diff options
42 files changed, 796 insertions, 353 deletions
@@ -1,3 +1,125 @@ +1998-09-14 Andreas Jaeger <aj@arthur.rhein-neckar.de> + + * sysdeps/mach/hurd/dl-cache.c (_dl_unload_cache): New dummy + function. Reported by okuji@kuicr.kyoto-u.ac.jp [PR libc/789]. + +1998-09-15 David S. Miller <davem@pierdol.cobaltmicro.com> + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup): + Add profiling support. + (TRAMPOLINE_TEMPLATE): New macro. + (ELF_MACHINE_RUNTIME_TRAMPOLINE): Define in terms of that. + (RTLD_START): Prettify, and set __libc_stack_end properly. + (elf_machine_rela) [R_SPARC_COPY]: Remove RTLD_BOOTSTRAP ifndef + and check for sym being NULL instead. + * sysdeps/sparc/sparc64/addmul_1.S: Adjust to allocate 192 bytes + of stack space. + * sysdeps/sparc/sparc64/lshift.S: Likewise. + * sysdeps/sparc/sparc64/mul_1.S: Likewise. + * sysdeps/sparc/sparc64/rshift.S: Likewise. + * sysdeps/sparc/sparc64/submul_1.S: Likewise. + * sysdeps/sparc/sparc64/elf/crtbegin.S: Likewise and remove old + MEDANY code model %g4 usage. + * sysdeps/sparc/sparc64/elf/crtend.S: Likewise and remove old + MEDANY code model %g4 usage. + * sysdeps/sparc/sparc64/elf/start.S: Rework to not use old FULLANY + code model address formation. + * sysdeps/sparc/sparc64/dl-machine.h: Don't include link.h, do + include elf/ldsodefs.h + (DT_SPARC): Remove. + (elf_machine_matches_host): It is now EM_SPARCV9. + (elf_machine_dynamic): Clean up to remove ugly cast. + (elf_machine_fixup_plt): Rework for new V9 ABI, add support for + new PLT formats. + (elf_machine_rela): Don't do anything at all for R_SPARC_NONE. + Prettify rest of function. + [R_SPARC_COPY]: Check for sym being NULL. + [R_SPARC_32]: Handle it. + [R_SPARC_H44, R_SPARC_M44, R_SPARC_L44]: Handle them for the + MEDMID code model. + [R_SPARC_HH22, R_SPARC_HM10, R_SPARC_LM22]: Handle them for the + MEDANY code model. + [R_SPARC_NONE]: Remove this case, as it is now checked earlier. + (elf_machine_runtime_setup): Rewrite for new V9 ABI plt formats. + Add profiling support. + (TRAMPOLINE_TEMPLATE): New macro. + (ELF_MACHINE_RUNTIME_TRAMPOLINE): Define in terms of that. + (RTLD_START): Prettify and set __libc_stack_end. + * sysdeps/unix/sysv/linux/sparc/bits/sigaction.h (SA_SIGINFO): + Define. + * sysdeps/unix/sysv/linux/sparc/bits/signum.h (_NSIG): Set to 64. + (SIGRTMIN, SIGRTMAX, __SIGRTMIN, __SIGRTMAX): Define. + * sysdeps/unix/sysv/linux/sparc/sparc32/brk.c (__brk): Remove + unused variable scratch. + * sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c + (__syscall_rt_sigaction, __rt_sigreturn_stub, __sigreturn_stub): + Declare. + (__sigaction): Rewrite rt_sigaction case to pass correct sigreturn + stub to rt_sigaction syscalls. Rewrite non-rt case to use correct + old format kernel sigaction structures. + * sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h: Move... + * sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h: to here. + * sysdeps/unix/sysv/linux/sparc/sparc64/Dist: Remove ucontext.h + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h: Fix + ucontext include. + (_JMPBUF_UNWINDS): Define. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: Declare + statfs64 structure, which is exactly the same as the normal one. + * sysdeps/unix/sysv/linux/sparc/sparc64/brk.S: Allocate 192 bytes + of stack. Use correct syscall trap number. Add branch prediction + settings to branch instructions. Remove old MEDANY code model %g4 + referneces for non-PIC. + * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S: Add + __libc_longjmp and __libc_siglongjmp strong aliases. + * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c (__readdir64): + Also define to __no__readdir64_decl around readdir.c inclusion. + (__readdir64): Add strong alias. + * sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (getrlimit): + Set strong and weak names properly. + +1998-09-16 11:25 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * manual/Makefile (AWK): Default to gawk if standalone. + +1998-09-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makefile (distribute): Undo last change. + * Make-dist (+tsrc) [not subdir]: Also include indirection headers + for sysdep headers. + (+subdir-headers): Removed, unused. + +1998-09-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * stdio-common/Makefile ($(inst_includedir)/bits/stdio_lim.h): Use + $(do-install). + +1998-09-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makerules ($(+sysdir_pfx)sysd-Makefile): Don't check for + absolute name in $(config-sysdirs), can never happen. + ($(+sysdir_pfx)sysd-rules): Likewise. + * Makeconfig (full-config-sysdirs): Likewise. + (all-Subdirs-files): Prepend $(..). + + * configure.in: Don't check for absolute name in $add_ons_pfx, can + not happen. Let --enable-add-ons=yes work if no add-ons actually + exist. + +1998-09-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Rules ($(common-objpfx)bits/stdio_%.h): Remove extra + continuations in command. + +1998-09-15 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * libio/oldstdfiles.c (_IO_stdin_used): Update declaration. + 1998-09-16 00:47 Tim Waugh <tim@cyberelk.demon.co.uk> * posix/wordexp-test.c: If expansion or substitution occurs @@ -77,7 +77,6 @@ all-headers := $(sort $(headers) \ # the source directory. all-headers := $(filter-out ../%,$(all-headers)) +subdir-nodist := $(patsubst +nodist+%,%,$(filter +nodist+%,$(+distinfo))) -+subdir-headers := $(filter-out $(headers),$(all-headers)) endif foo:=$(shell echo 'IS THIS WORKING??? all-headers=$(all-headers)' >&2) @@ -182,7 +181,7 @@ foo:=$(shell echo '+sysdep-dist=$(+sysdep-dist)' >&2) $(addsuffix /$(file),$(sysdep_dirs)))) \ $(+sysdep-dist) -+tsrcs := $(+tsrcs) $(+sysdep-tsrcs) ++tsrcs := $(+tsrcs) $(+sysdep-tsrcs) $(wildcard $(+sysdep-names:%=include/%)) ifeq ($(with-cvs),yes) define autoconf-it diff --git a/Makeconfig b/Makeconfig index 1858dd54a9..0b7b0384ed 100644 --- a/Makeconfig +++ b/Makeconfig @@ -93,9 +93,7 @@ binfmt-subdir = aout endif # Complete path to sysdep dirs. -full-config-sysdirs := $(filter /%, $(config-sysdirs)) \ - $(addprefix $(..), $(filter-out /%, $(config-sysdirs))) -export full-config-sysdirs := $(full-config-sysdirs) +export full-config-sysdirs := $(addprefix $(..),$(config-sysdirs)) # Run config.status to update config.make and config.h. We don't show the # dependence of config.h to Make, because it is only touched when it @@ -767,7 +765,7 @@ subdirs = $(all-subdirs) subdirs := $(filter mach,$(subdirs)) $(filter hurd,$(subdirs)) \ $(filter-out mach hurd,$(subdirs)) -all-Subdirs-files = $(wildcard $(addsuffix /Subdirs, $(config-sysdirs))) +all-Subdirs-files = $(wildcard $(config-sysdirs:%=$(..)%/Subdirs)) $(common-objpfx)sysd-dirs: $(common-objpfx)config.make $(all-Subdirs-files) (echo define sysdep-subdirs; \ sed 's/#.*$$//' $(all-Subdirs-files) /dev/null; \ @@ -253,7 +253,6 @@ distribute := README README.libm INSTALL FAQ FAQ.in NOTES NEWS BUGS \ version.h shlib-versions rpm/Makefile rpm/template \ rpm/rpmrc glibcbug.in abi-tags stub-tag.h \ test-skeleton.c include/des.h Versions.def \ - include/sys/mman.h \ $(addprefix scripts/, \ rellns-sh config.sub config.guess \ mkinstalldirs move-if-change install-sh \ @@ -104,17 +104,9 @@ $(+sysdir_pfx)sysd-Makefile: $(+sysdir_pfx)config.make $(..)Makerules \ $(sysd-Makefile-force) -@rm -f $@T (echo 'sysd-Makefile-sysdirs := $(config-sysdirs)'; \ - for dir in $(config-sysdirs); do \ - file=$$dir/Makefile; \ - case $$dir in \ - /*) rel= ;; \ - *) rel=$(..) ;; \ - esac; \ - if [ -f $$rel$$file ]; then \ - case $$dir in \ - /*) echo include "$$file" ;; \ - *) echo include "\$$(..)$$file" ;; \ - esac; \ + for file in $(config-sysdirs:=/Makefile); do \ + if [ -f $(..)$$file ]; then \ + echo include "\$$(..)$$file"; \ else true; fi; \ done; \ echo 'sysd-Makefile-done=t') > $@T @@ -244,11 +236,7 @@ $(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \ $(sysd-rules-force) -@rm -f $@T (echo 'sysd-rules-sysdirs := $(config-sysdirs)'; \ - for sysdir in $(config-sysdirs); do \ - case $$sysdir in \ - /*) dir=$$sysdir ;; \ - *) dir="\$$(..)$$sysdir" ;; \ - esac; \ + for dir in $(config-sysdirs:%='$$(..)%'); do \ for o in $(all-object-suffixes); do \ $(open-check-inhibit-asm) \ echo "\$$(objpfx)%$$o: $$dir/%.S \$$(before-compile); \ @@ -223,7 +223,7 @@ $(common-objpfx)bits/stdio_%.h $(common-objpfx)bits/stdio_%.d: \ $(CC) $(+includes) -E -dM -xc - -o $(@:.d=.h)T sed -e 's!MARKER!$(@:.h=.d) $(@:.d=.h)!' \ -e 's!$(common-objpfx)!$$(common-objpfx)!g' \ - $(@:.h=.d)T > $(@:.h=.d)t && \ + $(@:.h=.d)T > $(@:.h=.d)t mv -f $(@:.h=.d)t $(@:.h=.d) fopen_max=`sed -n 's/^#define OPEN_MAX //p' $(@:.d=.h)T`; \ filename_max=`sed -n 's/^#define PATH_MAX //p' $(@:.d=.h)T`; \ @@ -235,8 +235,8 @@ $(common-objpfx)bits/stdio_%.h $(common-objpfx)bits/stdio_%.d: \ -e "s/@TMP_MAX@/$(TMP_MAX)/" \ -e "s/@L_ctermid@/$(L_ctermid)/" \ -e "s/@L_cuserid@/$(L_cuserid)/" \ - $< > $(@:.d=.h).new && \ - mv -f $(@:.d=.h).new $(@:.d=.h); \ + $< > $(@:.d=.h).new + mv -f $(@:.d=.h).new $(@:.d=.h) # Remove these last so that they can be examined if something went wrong. rm -f $(@:.d=.h)T $(@:.h=.d)T # Get dependencies. @@ -12,7 +12,7 @@ # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.12 +# Generated automatically using autoconf version 2.12.2 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation @@ -103,6 +103,7 @@ mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 @@ -386,7 +387,7 @@ EOF verbose=yes ;; -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.12" + echo "configure generated by autoconf version 2.12.2" exit 0 ;; -with-* | --with-*) @@ -556,9 +557,11 @@ ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross +ac_exeext= +ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then @@ -751,12 +754,8 @@ fi if test "${enable_add_ons+set}" = set; then enableval="$enable_add_ons" case "$enableval" in - yes) if test "$srcdir" = "."; then - add_ons=`echo */configure | sed -e 's!/configure!!g'` - else - add_ons=`echo $srcdir/*/configure | \ - sed -e 's!/configure!!g' -e "s!$srcdir/!!g"` - fi;; + yes) add_ons=`cd $srcdir && echo */configure | sed -e 's!/configure!!g'` + test "$add_ons" = "*" && add_ons= ;; *) add_ons=`echo "$enableval" | sed 's/,/ /g'`;; esac else @@ -805,26 +804,26 @@ fi # Make sure we can run config.sub. -if $ac_config_sub sun4 >/dev/null 2>&1; then : +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:814: checking host system type" >&5 +echo "configure:813: checking host system type" >&5 host_alias=$host case "$host_alias" in NONE) case $nonopt in NONE) - if host_alias=`$ac_config_guess`; then : + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } fi ;; *) host_alias=$nonopt ;; esac ;; esac -host=`$ac_config_sub $host_alias` +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` @@ -933,7 +932,7 @@ fi # This can take a while to compute. sysdep_dir=$srcdir/sysdeps echo $ac_n "checking sysdep dirs""... $ac_c" 1>&6 -echo "configure:937: checking sysdep dirs" >&5 +echo "configure:936: checking sysdep dirs" >&5 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1. os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`" @@ -1011,11 +1010,7 @@ for d in $add_ons_pfx ''; do try="${d}sysdeps$m0$b$v$o$m" test -n "$enable_debug_configure" && echo "$0 DEBUG: try $try" >&2 - case $try in - /*) dest=$try ;; - *) dest=$srcdir/$try ;; - esac - if test -d $dest; then + if test -d $srcdir/$try; then sysnames="$sysnames $try" { test -n "$o" || test -n "$b"; } && os_used=t { test -n "$m" || test -n "$m0"; } && machine_used=t @@ -1047,12 +1042,8 @@ fi if test "$elf" = yes; then elf_dirs= for d in $add_ons_pfx ''; do - case $d in - /*) xsrcdir= ;; - *) xsrcdir=$srcdir/ ;; - esac for m in $mach; do - if test -d $xsrcdir${d}sysdeps$m/elf; then + if test -d $srcdir/${d}sysdeps$m/elf; then elf_dirs="$elf_dirs ${d}sysdeps$m/elf" fi done @@ -1138,28 +1129,30 @@ echo "$ac_t""$default_sysnames" 1>&6 # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1146: checking for a BSD compatible install" >&5 +echo "configure:1138: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else - IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. - for ac_prog in ginstall installbsd scoinst install; do + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. - # OSF/1 installbsd also uses dspmsg, but is usable. : else ac_cv_path_install="$ac_dir/$ac_prog -c" @@ -1196,7 +1189,7 @@ if test "$INSTALL" = "${srcdir}/install-sh -c"; then INSTALL='\$(..)./install-sh -c' fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1200: checking whether ln -s works" >&5 +echo "configure:1193: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1219,7 +1212,7 @@ fi # These programs are version sensitive. echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1223: checking build system type" >&5 +echo "configure:1216: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1230,7 +1223,7 @@ NONE) esac ;; esac -build=`$ac_config_sub $build_alias` +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` @@ -1247,14 +1240,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1251: checking for $ac_word" >&5 +echo "configure:1244: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1280,7 +1273,7 @@ if test -z "$CC"; then else # Found it, now check the version. echo $ac_n "checking version of $CC""... $ac_c" 1>&6 -echo "configure:1284: checking version of $CC" >&5 +echo "configure:1277: checking version of $CC" >&5 ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcstp-]*[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1300,14 +1293,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1304: checking for $ac_word" >&5 +echo "configure:1297: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MAKE"; then ac_cv_prog_MAKE="$MAKE" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1333,7 +1326,7 @@ if test -z "$MAKE"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKE""... $ac_c" 1>&6 -echo "configure:1337: checking version of $MAKE" >&5 +echo "configure:1330: checking version of $MAKE" >&5 ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*version \([0-9][0-9.]*\), by.*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1354,14 +1347,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1358: checking for $ac_word" >&5 +echo "configure:1351: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MSGFMT"; then ac_cv_prog_MSGFMT="$MSGFMT" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1387,7 +1380,7 @@ if test -z "$MSGFMT"; then else # Found it, now check the version. echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6 -echo "configure:1391: checking version of $MSGFMT" >&5 +echo "configure:1384: checking version of $MSGFMT" >&5 ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1407,14 +1400,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1411: checking for $ac_word" >&5 +echo "configure:1404: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1440,7 +1433,7 @@ if test -z "$MAKEINFO"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKEINFO""... $ac_c" 1>&6 -echo "configure:1444: checking version of $MAKEINFO" >&5 +echo "configure:1437: checking version of $MAKEINFO" >&5 ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo \([0-9][0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1469,7 +1462,7 @@ test -n "$aux_missing" && echo "configure: warning: echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1473: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1466: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1478,15 +1471,15 @@ ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext <<EOF -#line 1486 "configure" +#line 1479 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:1483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1511,7 +1504,7 @@ else cross_linkable=yes fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1515: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1508: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_cross'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1523,7 +1516,7 @@ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1527: checking whether we are using GNU C" >&5 +echo "configure:1520: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1532,7 +1525,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1529: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1545,7 +1538,7 @@ if test $ac_cv_prog_gcc != yes; then fi echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1549: checking build system type" >&5 +echo "configure:1542: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1556,7 +1549,7 @@ NONE) esac ;; esac -build=`$ac_config_sub $build_alias` +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` @@ -1568,14 +1561,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1572: checking for $ac_word" >&5 +echo "configure:1565: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$BUILD_CC"; then ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1599,7 +1592,7 @@ done fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1603: checking how to run the C preprocessor" >&5 +echo "configure:1596: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1614,14 +1607,14 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 1618 "configure" +#line 1611 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1624: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` +{ (eval echo configure:1617: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else @@ -1631,14 +1624,31 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 1635 "configure" +#line 1628 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1641: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` +{ (eval echo configure:1634: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext <<EOF +#line 1645 "configure" +#include "confdefs.h" +#include <assert.h> +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else @@ -1651,6 +1661,8 @@ fi rm -f conftest* fi rm -f conftest* +fi +rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" @@ -1670,7 +1682,7 @@ LD=`$CC -print-prog-name=ld` # Determine whether we are using GNU binutils. echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6 -echo "configure:1674: checking whether $AS is GNU as" >&5 +echo "configure:1686: checking whether $AS is GNU as" >&5 if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1688,7 +1700,7 @@ rm -f a.out gnu_as=$libc_cv_prog_as_gnu echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6 -echo "configure:1692: checking whether $LD is GNU ld" >&5 +echo "configure:1704: checking whether $LD is GNU ld" >&5 if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1707,14 +1719,14 @@ gnu_ld=$libc_cv_prog_ld_gnu # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1711: checking for $ac_word" >&5 +echo "configure:1723: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1738,14 +1750,14 @@ fi # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1742: checking for $ac_word" >&5 +echo "configure:1754: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1769,14 +1781,14 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1773: checking for $ac_word" >&5 +echo "configure:1785: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1803,14 +1815,14 @@ fi # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args. set dummy ${ac_tool_prefix}mig; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1807: checking for $ac_word" >&5 +echo "configure:1819: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$MIG"; then ac_cv_prog_MIG="$MIG" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1843,7 +1855,7 @@ fi # check if ranlib is necessary echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6 -echo "configure:1847: checking whether ranlib is necessary" >&5 +echo "configure:1859: checking whether ranlib is necessary" >&5 if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1877,7 +1889,7 @@ fi # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6 -echo "configure:1881: checking LD_LIBRARY_PATH variable" >&5 +echo "configure:1893: checking LD_LIBRARY_PATH variable" >&5 case ${LD_LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) ld_library_path_setting="contains current directory" @@ -1897,7 +1909,7 @@ fi # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1901: checking for $ac_word" >&5 +echo "configure:1913: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1905,8 +1917,11 @@ else /*) ac_cv_path_BASH="$BASH" # Let the user override the test with a path. ;; + ?:/*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a dos path. + ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1939,7 +1954,7 @@ if test "$BASH" = no; then # Extract the first word of "ksh", so it can be a program name with args. set dummy ksh; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1943: checking for $ac_word" >&5 +echo "configure:1958: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1947,8 +1962,11 @@ else /*) ac_cv_path_KSH="$KSH" # Let the user override the test with a path. ;; + ?:/*) + ac_cv_path_KSH="$KSH" # Let the user override the test with a dos path. + ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -1985,14 +2003,14 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1989: checking for $ac_word" >&5 +echo "configure:2007: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -2018,7 +2036,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2022: checking for $ac_word" >&5 +echo "configure:2040: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2026,8 +2044,11 @@ else /*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; + ?:/*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path. + ;; *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then @@ -2053,7 +2074,7 @@ test -n "$PERL" || PERL="no" echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 -echo "configure:2057: checking for signed size_t type" >&5 +echo "configure:2078: checking for signed size_t type" >&5 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2077,12 +2098,12 @@ EOF fi echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 -echo "configure:2081: checking for libc-friendly stddef.h" >&5 +echo "configure:2102: checking for libc-friendly stddef.h" >&5 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2086 "configure" +#line 2107 "configure" #include "confdefs.h" #define __need_size_t #define __need_wchar_t @@ -2097,7 +2118,7 @@ size_t size; wchar_t wchar; if (&size == NULL || &wchar == NULL) abort (); ; return 0; } EOF -if { (eval echo configure:2101: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_friendly_stddef=yes else @@ -2116,7 +2137,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly." fi echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6 -echo "configure:2120: checking whether we need to use -P to assemble .S files" >&5 +echo "configure:2141: checking whether we need to use -P to assemble .S files" >&5 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2139,7 +2160,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives." fi echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 -echo "configure:2143: checking for assembler global-symbol directive" >&5 +echo "configure:2164: checking for assembler global-symbol directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2169,7 +2190,7 @@ EOF fi echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 -echo "configure:2173: checking for .set assembler directive" >&5 +echo "configure:2194: checking for .set assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2203,7 +2224,7 @@ EOF fi echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6 -echo "configure:2207: checking for .symver assembler directive" >&5 +echo "configure:2228: checking for .symver assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2222,7 +2243,7 @@ fi echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6 -echo "configure:2226: checking for ld --version-script" >&5 +echo "configure:2247: checking for ld --version-script" >&5 if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2245,7 +2266,7 @@ EOF if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o -nostartfiles -nostdlib -Wl,--version-script,conftest.map - 1>&5'; { (eval echo configure:2249: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; + 1>&5'; { (eval echo configure:2270: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_version_script_option=yes else @@ -2283,7 +2304,7 @@ if test $VERSIONING = no; then fi if test $elf = yes; then echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 -echo "configure:2287: checking for .previous assembler directive" >&5 +echo "configure:2308: checking for .previous assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2291,7 +2312,7 @@ else .section foo_section .previous EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2295: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2316: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_previous_directive=yes else libc_cv_asm_previous_directive=no @@ -2307,7 +2328,7 @@ EOF else echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 -echo "configure:2311: checking for .popsection assembler directive" >&5 +echo "configure:2332: checking for .popsection assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2315,7 +2336,7 @@ else .pushsection foo_section .popsection EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2319: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_popsection_directive=yes else libc_cv_asm_popsection_directive=no @@ -2335,12 +2356,12 @@ fi if test $elf != yes; then echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 -echo "configure:2339: checking for .init and .fini sections" >&5 +echo "configure:2360: checking for .init and .fini sections" >&5 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2344 "configure" +#line 2365 "configure" #include "confdefs.h" int main() { @@ -2349,7 +2370,7 @@ asm (".section .init"); asm (".text"); ; return 0; } EOF -if { (eval echo configure:2353: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_have_initfini=yes else @@ -2377,19 +2398,19 @@ if test $elf = yes; then else if test $ac_cv_prog_cc_works = yes; then echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2381: checking for _ prefix on C symbol names" >&5 +echo "configure:2402: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2386 "configure" +#line 2407 "configure" #include "confdefs.h" asm ("_glibc_foobar:"); int main() { glibc_foobar (); ; return 0; } EOF -if { (eval echo configure:2393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then +if { (eval echo configure:2414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* libc_cv_asm_underscores=yes else @@ -2404,17 +2425,17 @@ fi echo "$ac_t""$libc_cv_asm_underscores" 1>&6 else echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2408: checking for _ prefix on C symbol names" >&5 +echo "configure:2429: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2413 "configure" +#line 2434 "configure" #include "confdefs.h" void underscore_test(void) { return; } EOF -if { (eval echo configure:2418: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if grep _underscore_test conftest* >/dev/null; then rm -f conftest* libc_cv_asm_underscores=yes @@ -2446,7 +2467,7 @@ if test $elf = yes; then fi echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 -echo "configure:2450: checking for assembler .weak directive" >&5 +echo "configure:2471: checking for assembler .weak directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2469,7 +2490,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6 if test $libc_cv_asm_weak_directive = no; then echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 -echo "configure:2473: checking for assembler .weakext directive" >&5 +echo "configure:2494: checking for assembler .weakext directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2507,7 +2528,7 @@ EOF fi echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 -echo "configure:2511: checking for ld --no-whole-archive" >&5 +echo "configure:2532: checking for ld --no-whole-archive" >&5 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2518,7 +2539,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -Wl,--no-whole-archive - -o conftest conftest.c 1>&5'; { (eval echo configure:2522: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:2543: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_no_whole_archive=yes else libc_cv_ld_no_whole_archive=no @@ -2532,7 +2553,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then fi echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 -echo "configure:2536: checking for gcc -fexceptions" >&5 +echo "configure:2557: checking for gcc -fexceptions" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2543,7 +2564,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -fexceptions - -o conftest conftest.c 1>&5'; { (eval echo configure:2547: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:2568: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_exceptions=yes else libc_cv_gcc_exceptions=no @@ -2558,14 +2579,14 @@ fi if test "$base_machine" = alpha ; then echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 -echo "configure:2562: checking for function ..ng prefix" >&5 +echo "configure:2583: checking for function ..ng prefix" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <<\EOF foo () { } EOF -if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2569: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; +if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2590: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_alpha_ng_prefix=yes else @@ -2592,19 +2613,19 @@ if test "$host_cpu" = powerpc ; then # Check for a bug present in at least versions 2.8.x of GCC # and versions 1.0.x of EGCS. echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6 -echo "configure:2596: checking whether clobbering cr0 causes problems" >&5 +echo "configure:2617: checking whether clobbering cr0 causes problems" >&5 if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2601 "configure" +#line 2622 "configure" #include "confdefs.h" int tester(int x) { asm ("" : : : "cc"); return x & 123; } int main() { ; return 0; } EOF -if { (eval echo configure:2608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2629: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_c_asmcr0_bug='no' else @@ -2626,12 +2647,12 @@ fi fi echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 -echo "configure:2630: checking for DWARF2 unwind info support" >&5 +echo "configure:2651: checking for DWARF2 unwind info support" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <<EOF -#line 2635 "configure" +#line 2656 "configure" static char __EH_FRAME_BEGIN__; _start () { @@ -2658,7 +2679,7 @@ __bzero () {} EOF if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info -nostdlib -nostartfiles - -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2683: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=static else libc_cv_gcc_dwarf2_unwind_info=no @@ -2666,7 +2687,7 @@ fi if test $libc_cv_gcc_dwarf2_unwind_info = no; then if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame -nostdlib -nostartfiles - -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2670: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2691: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=yes else libc_cv_gcc_dwarf2_unwind_info=no @@ -2740,7 +2761,7 @@ if test "$uname" = "sysdeps/generic"; then fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:2744: checking OS release for uname" >&5 +echo "configure:2765: checking OS release for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2762,7 +2783,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6 uname_release="$libc_cv_uname_release" echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 -echo "configure:2766: checking OS version for uname" >&5 +echo "configure:2787: checking OS version for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2784,7 +2805,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:2788: checking stdio selection" >&5 +echo "configure:2809: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -2798,7 +2819,7 @@ echo "$ac_t""$stdio" 1>&6 # Test for old glibc 2.0.x headers so that they can be removed properly # Search only in includedir. echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 -echo "configure:2802: checking for old glibc 2.0.x headers" >&5 +echo "configure:2823: checking for old glibc 2.0.x headers" >&5 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" then old_glibc_headers=yes @@ -2852,7 +2873,7 @@ if test $shared = default; then fi echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 -echo "configure:2856: checking whether -fPIC is default" >&5 +echo "configure:2877: checking whether -fPIC is default" >&5 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2919,7 +2940,7 @@ EOF # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | - case `(ac_space=' '; set) 2>&1` in + case `(ac_space=' '; set) 2>&1 | grep ac_space` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). @@ -2986,7 +3007,7 @@ do echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.12" + echo "$CONFIG_STATUS generated by autoconf version 2.12.2" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; @@ -3006,6 +3027,7 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF $ac_vpsub $extrasub +s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g diff --git a/configure.in b/configure.in index 979f982f51..cd65da1b65 100644 --- a/configure.in +++ b/configure.in @@ -96,12 +96,8 @@ AC_ARG_ENABLE(add-ons, dnl configure and build add-ons in DIR1,DIR2,... search for add-ons if no parameter given], [case "$enableval" in - yes) if test "$srcdir" = "."; then - add_ons=`echo */configure | sed -e 's!/configure!!g'` - else - add_ons=`echo $srcdir/*/configure | \ - sed -e 's!/configure!!g' -e "s!$srcdir/!!g"` - fi;; + yes) add_ons=`cd $srcdir && echo */configure | sed -e 's!/configure!!g'` + test "$add_ons" = "*" && add_ons= ;; *) add_ons=`echo "$enableval" | sed 's/,/ /g'`;; esac], [add_ons=]) @@ -319,11 +315,7 @@ for d in $add_ons_pfx ''; do try="${d}sysdeps$m0$b$v$o$m" test -n "$enable_debug_configure" && echo "$0 [DEBUG]: try $try" >&2 - case $try in - /*) dest=$try ;; - *) dest=$srcdir/$try ;; - esac - if test -d $dest; then + if test -d $srcdir/$try; then sysnames="$sysnames $try" { test -n "$o" || test -n "$b"; } && os_used=t { test -n "$m" || test -n "$m0"; } && machine_used=t @@ -355,12 +347,8 @@ fi if test "$elf" = yes; then elf_dirs= for d in $add_ons_pfx ''; do - case $d in - /*) xsrcdir= ;; - *) xsrcdir=$srcdir/ ;; - esac for m in $mach; do - if test -d $xsrcdir${d}sysdeps$m/elf; then + if test -d $srcdir/${d}sysdeps$m/elf; then elf_dirs="$elf_dirs ${d}sysdeps$m/elf" fi done diff --git a/libio/oldstdfiles.c b/libio/oldstdfiles.c index baf655048d..7781a17449 100644 --- a/libio/oldstdfiles.c +++ b/libio/oldstdfiles.c @@ -53,7 +53,7 @@ DEF_STDFILE(_IO_stderr_, 2, &_IO_stdout_.file, #include <stdio.h> -extern void * _IO_stdin_used; +extern const int _IO_stdin_used; weak_extern (_IO_stdin_used); #undef stdin diff --git a/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h index 894972d574..ea9685b59d 100644 --- a/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h +++ b/linuxthreads/sysdeps/sparc/sparc32/pt-machine.h @@ -52,7 +52,7 @@ register struct _pthread_descr_struct *__thread_self __asm__("%g6"); #define THREAD_SELF __thread_self /* Initialize the thread-unique value. */ -#define INIT_THREAD_SELF(descr) (__thread_self = (descr)) +#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) /* Access to data in the thread descriptor is easy. */ #define THREAD_GETMEM(descr, member) __thread_self->member diff --git a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h index 24c214117c..768956197d 100644 --- a/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h +++ b/linuxthreads/sysdeps/sparc/sparc64/pt-machine.h @@ -48,7 +48,7 @@ register struct _pthread_descr_struct *__thread_self __asm__("%g6"); #define THREAD_SELF __thread_self /* Initialize the thread-unique value. */ -#define INIT_THREAD_SELF(descr) (__thread_self = (descr)) +#define INIT_THREAD_SELF(descr, nr) (__thread_self = (descr)) /* Compare-and-swap for semaphores. */ diff --git a/manual/Makefile b/manual/Makefile index 2314c0c93d..538bb29a9c 100644 --- a/manual/Makefile +++ b/manual/Makefile @@ -34,6 +34,7 @@ include ../Makeconfig else MAKEINFO = makeinfo TEXI2DVI = texi2dvi +AWK = gawk endif ifneq ($(strip $(MAKEINFO)),) diff --git a/posix/wordexp.c b/posix/wordexp.c index e4bf414ced..0cda9deb76 100644 --- a/posix/wordexp.c +++ b/posix/wordexp.c @@ -898,7 +898,6 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length, int fildes[2]; int bufsize = 128; int buflen; - int i; char *buffer; pid_t pid; diff --git a/stdio-common/Makefile b/stdio-common/Makefile index f7d65d8ef0..49f9ddb4f7 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -61,10 +61,7 @@ CFLAGS-scanf7.c = -Wno-format CFLAGS-tst-printfsz.c = -Wno-format $(inst_includedir)/bits/stdio_lim.h: $(common-objpfx)bits/stdio_lim.h - $(make-target-directory) - if test -r $@ && cmp -s $< $@; \ - then echo 'gnu/lib-names.h unchanged'; \ - else $(INSTALL_DATA) $< $@; fi + $(do-install) ifeq ($(stdio),libio) ifneq (,$(filter %REENTRANT, $(defines))) diff --git a/sysdeps/mach/hurd/dl-cache.c b/sysdeps/mach/hurd/dl-cache.c index e7aca39aee..8b47cf073b 100644 --- a/sysdeps/mach/hurd/dl-cache.c +++ b/sysdeps/mach/hurd/dl-cache.c @@ -22,3 +22,8 @@ _dl_load_cache_lookup (const char *name) { return 0; } + +void +_dl_unload_cache (void) +{ +} diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index da15e94a69..e1fb2b68ce 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -101,14 +101,26 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) { Elf32_Addr *plt; extern void _dl_runtime_resolve (Elf32_Word); + extern void _dl_runtime_profile (Elf32_Word); if (l->l_info[DT_JMPREL] && lazy) { + Elf32_Addr rfunc; + /* The entries for functions in the PLT have not yet been filled in. Their initial contents will arrange when called to set the high 22 bits of %g1 with an offset into the .rela.plt section and jump to the beginning of the PLT. */ plt = (Elf32_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr); + if (! profile) + rfunc = (Elf32_Addr) &_dl_runtime_resolve; + else + { + rfunc = (Elf32_Addr) &_dl_runtime_profile; + + if (_dl_name_match_p (_dl_profile, l)) + _dl_profile_map = l; + } /* The beginning of the PLT does: @@ -123,8 +135,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) plt[0] = OPCODE_SAVE_SP; /* Construct PC-relative word address. */ - plt[1] = OPCODE_CALL | (((Elf32_Addr) &_dl_runtime_resolve - - (Elf32_Addr) &plt[1]) >> 2); + plt[1] = OPCODE_CALL | ((rfunc - (Elf32_Addr) &plt[1]) >> 2); plt[2] = OPCODE_NOP; /* Fill call delay slot. */ plt[3] = (Elf32_Addr) l; } @@ -134,20 +145,36 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) /* This code is used in dl-runtime.c to call the `fixup' function and then redirect to the address it returns. */ -#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function -_dl_runtime_resolve: +#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \ + asm ( "\ + .text + .globl " #tramp_name " + .type " #tramp_name ", @function + .align 32 +" #tramp_name ": /* Set up the arguments to fixup -- %o0 = link_map out of plt0 - %o1 = offset of reloc entry */ + %o1 = offset of reloc entry + %o2 = return address */ ld [%o7 + 8], %o0 srl %g1, 10, %o1 - call fixup + mov %i7, %o2 + call " #fixup_name " sub %o1, 4*12, %o1 jmp %o0 restore - .size _dl_runtime_resolve, . - _dl_runtime_resolve"); + .size " #tramp_name ", . - " #tramp_name " + .previous") + +#ifndef PROF +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \ + TRAMPOLINE_TEMPLATE (_dl_runtime_profile, profile_fixup); +#else +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \ + TRAMPOLINE_TEMPLATE (_dl_runtime_profile, fixup); +#endif /* Nonzero iff TYPE should not be allowed to resolve to one of the main executable's symbols, as for a COPY reloc. */ @@ -171,9 +198,10 @@ _dl_runtime_resolve: its return value is the user program's entry point. */ #define RTLD_START __asm__ ("\ -.text - .globl _start - .type _start,@function + .text + .globl _start + .type _start, @function + .align 32 _start: /* Allocate space for functions to drop their arguments. */ sub %sp, 6*4, %sp @@ -181,8 +209,8 @@ _start: call _dl_start add %sp, 22*4, %o0 /* FALTHRU */ - .globl _dl_start_user - .type _dl_start_user,@function + .globl _dl_start_user + .type _dl_start_user, @function _dl_start_user: /* Load the PIC register. */ 1: call 2f @@ -191,6 +219,12 @@ _dl_start_user: add %l7, %o7, %l7 /* Save the user entry point address in %l0 */ mov %o0, %l0 + /* Store the highest stack address. */ + sethi %hi(__libc_stack_end), %g2 + or %g2, %lo(__libc_stack_end), %g2 + ld [%l7 + %g2], %l1 + add %sp, 6*4, %l2 + st %l2, [%l1] /* See if we were run as a command with the executable file name as an extra leading argument. If so, adjust the contents of the stack. */ sethi %hi(_dl_skip_args), %g2 @@ -230,7 +264,7 @@ _dl_start_user: st %i4, [%i1+4] bne 23b add %i1, 8, %i1 - /* Load _dl_main_searchlist to pass to _dl_init_next. */ + /* Load searchlist of the main object to pass to _dl_init_next. */ 3: sethi %hi(_dl_main_searchlist), %g1 or %g1, %lo(_dl_main_searchlist), %g1 ld [%l7+%g1], %l1 @@ -242,8 +276,7 @@ _dl_start_user: beq 5f nop jmpl %o0, %o7 - nop - ba,a 4b + sub %o7, 28, %o7 /* Clear the startup flag. */ 5: sethi %hi(_dl_starting_up), %g1 or %g1, %lo(_dl_starting_up), %g1 @@ -256,8 +289,8 @@ _dl_start_user: /* Jump to the user's entry point and deallocate the extra stack we got. */ jmp %l0 add %sp, 6*4, %sp - .size _dl_start_user,.-_dl_start_user -.previous"); + .size _dl_start_user, . - _dl_start_user + .previous"); static inline void elf_machine_fixup_plt (struct link_map *map, const Elf32_Rela *reloc, @@ -343,7 +376,10 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, switch (ELF32_R_TYPE (reloc->r_info)) { case R_SPARC_COPY: -#ifndef RTLD_BOOTSTRAP + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; if (sym->st_size > refsym->st_size || (_dl_verbose && sym->st_size < refsym->st_size)) { @@ -359,7 +395,6 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, } memcpy (reloc_addr, (void *) value, MIN (sym->st_size, refsym->st_size)); -#endif break; case R_SPARC_GLOB_DAT: case R_SPARC_32: diff --git a/sysdeps/sparc/sparc64/addmul_1.S b/sysdeps/sparc/sparc64/addmul_1.S index 260481230f..6782db77df 100644 --- a/sysdeps/sparc/sparc64/addmul_1.S +++ b/sysdeps/sparc/sparc64/addmul_1.S @@ -32,7 +32,7 @@ ENTRY(__mpn_addmul_1) !#PROLOGUE# 0 - save %sp,-128,%sp + save %sp,-192,%sp !#PROLOGUE# 1 sub %g0,%i2,%o7 diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 788e239779..33def6b455 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -21,19 +21,15 @@ #include <assert.h> #include <string.h> -#include <link.h> #include <sys/param.h> +#include <elf/ldsodefs.h> #include <sysdep.h> - -/* Translate a processor-specific dynamic tag to the index into l_info. */ -#define DT_SPARC(x) (DT_SPARC_##x - DT_LOPROC + DT_NUM) - /* Return nonzero iff E_MACHINE is compatible with the running host. */ static inline int elf_machine_matches_host (Elf64_Half e_machine) { - return e_machine == EM_SPARC64; + return e_machine == EM_SPARCV9; } /* Return the link-time address of _DYNAMIC. Conveniently, this is the @@ -42,12 +38,11 @@ elf_machine_matches_host (Elf64_Half e_machine) static inline Elf64_Addr elf_machine_dynamic (void) { - register Elf64_Addr elf_pic_register __asm__("%l7"); + register Elf64_Addr *elf_pic_register __asm__("%l7"); - return *(Elf64_Addr *)elf_pic_register; + return *elf_pic_register; } - /* Return the run-time load address of the shared object. */ static inline Elf64_Addr elf_machine_load_address (void) @@ -67,21 +62,92 @@ elf_machine_load_address (void) return pc - *(Elf64_Addr *)(elf_pic_register + la); } +/* We have 3 cases to handle. And we code different code sequences + for each one. I love V9 code models... */ static inline void elf_machine_fixup_plt(struct link_map *map, const Elf64_Rela *reloc, Elf64_Addr *reloc_addr, Elf64_Addr value) { - Elf64_Dyn *pltfmt = map->l_info[DT_SPARC(PLTFMT)]; - switch (pltfmt ? pltfmt->d_un.d_val : 0) + unsigned int *insns = (unsigned int *) reloc_addr; + Elf64_Addr plt_vaddr = (Elf64_Addr) reloc_addr; + + /* Now move plt_vaddr up to the call instruction. */ + plt_vaddr += (2 * 4); + + /* 32-bit Sparc style, the target is in the lower 32-bits of + address space. */ + if ((value >> 32) == 0) { - case 1: /* .got.plt with absolute addresses */ - *reloc_addr = value; - break; - case 2: /* .got.plt with got-relative addresses */ - *reloc_addr = value - (map->l_info[DT_PLTGOT]->d_un.d_ptr + map->l_addr); - break; - default: - assert (! "unexpected .plt format type"); + /* sethi %hi(target), %g1 + jmpl %g1 + %lo(target), %g0 */ + + insns[2] = 0x81c06000 | (value & 0x3ff); + __asm __volatile ("flush %0 + 8" : : "r" (insns)); + + insns[1] = 0x03000000 | ((unsigned int)(value >> 10)); + __asm __volatile ("flush %0 + 4" : : "r" (insns)); + } + /* We can also get somewhat simple sequences if the distance between + the target and the PLT entry is within +/- 2GB. */ + else if ((plt_vaddr > value + && ((plt_vaddr - value) >> 32) == 0) + || (value > plt_vaddr + && ((value - plt_vaddr) >> 32) == 0)) + { + unsigned int displacement; + + if (plt_vaddr > value) + displacement = (0 - (plt_vaddr - value)); + else + displacement = value - plt_vaddr; + + /* mov %o7, %g1 + call displacement + mov %g1, %o7 */ + + insns[3] = 0x9e100001; + __asm __volatile ("flush %0 + 12" : : "r" (insns)); + + insns[2] = 0x40000000 | (displacement >> 2); + __asm __volatile ("flush %0 + 8" : : "r" (insns)); + + insns[1] = 0x8210000f; + __asm __volatile ("flush %0 + 4" : : "r" (insns)); + } + /* Worst case, ho hum... */ + else + { + unsigned int high32 = (value >> 32); + unsigned int low32 = (unsigned int) value; + + /* ??? Some tricks can be stolen from the sparc64 egcs backend + constant formation code I wrote. -DaveM */ + + /* sethi %hh(value), %g1 + sethi %lm(value), %g2 + or %g1, %hl(value), %g1 + or %g2, %lo(value), %g2 + sllx %g1, 32, %g1 + jmpl %g1 + %g2, %g0 + nop */ + + insns[6] = 0x81c04002; + __asm __volatile ("flush %0 + 24" : : "r" (insns)); + + insns[5] = 0x83287020; + __asm __volatile ("flush %0 + 20" : : "r" (insns)); + + insns[4] = 0x8410a000 | (low32 & 0x3ff); + __asm __volatile ("flush %0 + 16" : : "r" (insns)); + + insns[3] = 0x82106000 | (high32 & 0x3ff); + __asm __volatile ("flush %0 + 12" : : "r" (insns)); + + insns[2] = 0x05000000 | (low32 >> 10); + __asm __volatile ("flush %0 + 8" : : "r" (insns)); + + insns[1] = 0x03000000 | (high32 >> 10); + __asm __volatile ("flush %0 + 4" : : "r" (insns)); } } @@ -119,7 +185,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, #endif *reloc_addr = map->l_addr + reloc->r_addend; } - else + else if (ELF64_R_TYPE (reloc->r_info) != R_SPARC_NONE) /* Who is Wilbur? */ { const Elf64_Sym *const refsym = sym; Elf64_Addr value; @@ -137,6 +203,10 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, switch (ELF64_R_TYPE (reloc->r_info)) { case R_SPARC_COPY: + if (sym == NULL) + /* This can happen in trace mode if an object could not be + found. */ + break; if (sym->st_size > refsym->st_size || (_dl_verbose && sym->st_size < refsym->st_size)) { @@ -164,6 +234,9 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, case R_SPARC_16: *(short *) reloc_addr = value; break; + case R_SPARC_32: + *(unsigned int *) reloc_addr = value; + break; case R_SPARC_DISP8: *(char *) reloc_addr = (value - (Elf64_Addr) reloc_addr); break; @@ -171,27 +244,64 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, *(short *) reloc_addr = (value - (Elf64_Addr) reloc_addr); break; case R_SPARC_DISP32: - *(unsigned int *)reloc_addr = (value - (Elf64_Addr) reloc_addr); - break; - case R_SPARC_LO10: - *(unsigned *)reloc_addr = (*(unsigned *)reloc_addr & ~0x3ff) - | (value & 0x3ff); + *(unsigned int *) reloc_addr = (value - (Elf64_Addr) reloc_addr); break; case R_SPARC_WDISP30: - *(unsigned *)reloc_addr = ((*(unsigned *)reloc_addr & 0xc0000000) - | ((value - (Elf64_Addr) reloc_addr) >> 2)); + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xc0000000) | + ((value - (Elf64_Addr) reloc_addr) >> 2)); + break; + + /* MEDLOW code model relocs */ + case R_SPARC_LO10: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & ~0x3ff) | + (value & 0x3ff)); break; case R_SPARC_HI22: - *(unsigned *)reloc_addr = (*(unsigned *)reloc_addr & 0xffc00000) - | (value >> 10); + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xffc00000) | + (value >> 10)); + break; + + /* MEDMID code model relocs */ + case R_SPARC_H44: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xffc00000) | + (value >> 22)); + break; + case R_SPARC_M44: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & ~0x3ff) | + ((value >> 12) & 0x3ff)); + break; + case R_SPARC_L44: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & ~0xfff) | + (value & 0xfff)); + break; + + /* MEDANY code model relocs */ + case R_SPARC_HH22: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xffc00000) | + (value >> 42)); + break; + case R_SPARC_HM10: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & ~0x3ff) | + ((value >> 32) & 0x3ff)); + break; + case R_SPARC_LM22: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xffc00000) | + ((value >> 10) & 0x003fffff)); break; case R_SPARC_JMP_SLOT: elf_machine_fixup_plt(map, reloc, reloc_addr, value); break; - case R_SPARC_NONE: /* Alright, Wilbur. */ - break; default: assert (! "unexpected dynamic reloc type"); break; @@ -239,16 +349,63 @@ elf_machine_lazy_rel (Elf64_Addr l_addr, const Elf64_Rela *reloc) static inline int elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) { - Elf64_Addr *got; - extern void _dl_runtime_resolve (void); - if (l->l_info[DT_JMPREL] && lazy) { - got = (Elf64_Addr *) (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr); - /* This function will get called to fix up the GOT entry indicated by - the offset on the stack, and then jump to the resolved address. */ - got[1] = (Elf64_Addr) &_dl_runtime_resolve; - got[2] = (Elf64_Addr) l; /* Identify this shared object. */ + extern void _dl_runtime_resolve_0 (void); + extern void _dl_runtime_resolve_1 (void); + extern void _dl_runtime_profile_0 (void); + extern void _dl_runtime_profile_1 (void); + Elf64_Addr res0_addr, res1_addr; + unsigned int *plt = (unsigned int *) + (l->l_addr + l->l_info[DT_PLTGOT]->d_un.d_ptr); + + if (! profile) + { + res0_addr = (Elf64_Addr) &_dl_runtime_resolve_0; + res1_addr = (Elf64_Addr) &_dl_runtime_resolve_1; + } + else + { + res0_addr = (Elf64_Addr) &_dl_runtime_profile_0; + res1_addr = (Elf64_Addr) &_dl_runtime_profile_1; + if (_dl_name_match_p (_dl_profile, l)) + _dl_profile_map = l; + } + + /* PLT0 looks like: + + save %sp, -192, %sp + sethi %hh(_dl_runtime_{resolve,profile}_0), %g3 + sethi %lm(_dl_runtime_{resolve,profile}_0), %g4 + or %g3, %hm(_dl_runtime_{resolve,profile}_0), %g3 + or %g4, %lo(_dl_runtime_{resolve,profile}_0), %g4 + sllx %g3, 32, %g3 + jmpl %g3 + %g4, %o0 + nop + + PLT1 is similar except we jump to _dl_runtime_{resolve,profile}_1. */ + + plt[0] = 0x9de3bf40; + plt[1] = 0x07000000 | (res0_addr >> (64 - 22)); + plt[2] = 0x09000000 | ((res0_addr >> 10) & 0x003fffff); + plt[3] = 0x8610e000 | ((res0_addr >> 32) & 0x3ff); + plt[4] = 0x88112000 | (res0_addr & 0x3ff); + plt[5] = 0x8728f020; + plt[6] = 0x91c0c004; + plt[7] = 0x01000000; + + plt[8 + 0] = 0x9de3bf40; + plt[8 + 1] = 0x07000000 | (res1_addr >> (64 - 22)); + plt[8 + 2] = 0x09000000 | ((res1_addr >> 10) & 0x003fffff); + plt[8 + 3] = 0x8610e000 | ((res1_addr >> 32) & 0x3ff); + plt[8 + 4] = 0x88112000 | (res1_addr & 0x3ff); + plt[8 + 5] = 0x8728f020; + plt[8 + 6] = 0x91c0c004; + plt[8 + 7] = 0x01000000; + + /* Now put the magic cookie at the beginning of .PLT3 + Entry .PLT4 is unused by this implementation. */ + *((struct link_map **)(&plt[16 + 0])) = l; } return lazy; @@ -256,23 +413,68 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) /* This code is used in dl-runtime.c to call the `fixup' function and then redirect to the address it returns. */ -#define ELF_MACHINE_RUNTIME_TRAMPOLINE asm ("\ - .globl _dl_runtime_resolve - .type _dl_runtime_resolve, @function -_dl_runtime_resolve: - save %sp, -160, %sp - mov %g1, %o0 - call fixup - mov %g2, %o1 - jmp %o0 +#define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \ + asm ("\ + .text + .globl " #tramp_name "_0 + .type " #tramp_name "_0, @function + .align 32 +" #tramp_name "_0: + ldx [%o0 + 32 + 8], %l0 + sethi %hi(1048576), %g2 + sub %g1, %o0, %o0 + xor %g2, -20, %g2 + sethi %hi(5120), %g3 + add %o0, %g2, %o0 + sethi %hi(32768), %o2 + udivx %o0, %g3, %g3 + sllx %g3, 2, %g1 + add %g1, %g3, %g1 + sllx %g1, 10, %g2 + sllx %g1, 5, %g1 + sub %o0, %g2, %o0 + udivx %o0, 24, %o0 + add %o0, %o2, %o0 + add %g1, %o0, %g1 + sllx %g1, 1, %o1 + mov %l0, %o0 + add %o1, %g1, %o1 + mov %i7, %o2 + call " #fixup_name " + sllx %o1, 3, %o1 + jmp %o0 + restore + .size " #tramp_name "_0, . - " #tramp_name "_0 + + .globl " #tramp_name "_1 + .type " #tramp_name "_1, @function + .align 32 +" #tramp_name "_1: + srlx %g1, 15, %o1 + ldx [%o0 + 8], %o0 + sllx %o1, 1, %o3 + add %o1, %o3, %o1 + mov %i7, %o2 + call " #fixup_name " + sllx %o1, 3, %o1 + jmp %o0 restore - .size _dl_runtime_resolve, .-_dl_runtime_resolve -"); + .size " #tramp_name "_1, . - " #tramp_name "_1 + .previous"); + +#ifndef PROF +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \ + TRAMPOLINE_TEMPLATE (_dl_runtime_profile, profile_fixup); +#else +#define ELF_MACHINE_RUNTIME_TRAMPOLINE \ + TRAMPOLINE_TEMPLATE (_dl_runtime_resolve, fixup); \ + TRAMPOLINE_TEMPLATE (_dl_runtime_profile, fixup); +#endif /* The PLT uses Elf64_Rela relocs. */ #define elf_machine_relplt elf_machine_rela - /* Initial entry point code for the dynamic linker. The C function `_dl_start' is the real entry point; its return value is the user program's entry point. */ @@ -281,8 +483,10 @@ _dl_runtime_resolve: #define __S(x) __S1(x) #define RTLD_START __asm__ ( "\ - .global _start - .type _start, @function + .text + .global _start + .type _start, @function + .align 32 _start: /* Make room for functions to drop their arguments on the stack. */ sub %sp, 6*8, %sp @@ -292,8 +496,8 @@ _start: /* FALLTHRU */ .size _start, .-_start - .global _dl_start_user - .type _dl_start_user, @function + .global _dl_start_user + .type _dl_start_user, @function _dl_start_user: /* Load the GOT register. */ 1: call 11f @@ -302,6 +506,12 @@ _dl_start_user: add %l7,%o7,%l7 /* Save the user entry point address in %l0. */ mov %o0,%l0 + /* Store the highest stack address. */ + sethi %hi(__libc_stack_end), %g2 + or %g2, %lo(__libc_stack_end), %g2 + ldx [%l7 + %g2], %l1 + add %sp, 6*8, %l2 + stx %l2, [%l1] /* See if we were run as a command with the executable file name as an extra leading argument. If so, we must shift things around since we must keep the stack doubleword aligned. */ @@ -338,7 +548,7 @@ _dl_start_user: stx %i4, [%i1+8] brnz,pt %i3, 13b add %i1, 16, %i1 - /* Load _dl_main_searchlist to pass to _dl_init_next. */ + /* Load searchlist of the main object to pass to _dl_init_next. */ 2: sethi %hi(_dl_main_searchlist), %g2 or %g2, %lo(_dl_main_searchlist), %g2 ldx [%l7+%g2], %g2 @@ -349,8 +559,7 @@ _dl_start_user: brz,pn %o0, 4f nop jmpl %o0, %o7 - nop - ba,a 3b + sub %o7, 24, %o7 /* Clear the startup flag. */ 4: sethi %hi(_dl_starting_up), %g2 or %g2, %lo(_dl_starting_up), %g2 @@ -360,7 +569,8 @@ _dl_start_user: sethi %hi(_dl_fini), %g1 or %g1, %lo(_dl_fini), %g1 ldx [%l7+%g1], %g1 - /* Jump to the user's entry point & undo the allocation of the xtra regs. */ + /* Jump to the user's entry point and deallocate the extra stack we got. */ jmp %l0 add %sp, 6*8, %sp - .size _dl_start_user, .-_dl_start_user"); + .size _dl_start_user, . - _dl_start_user + .previous"); diff --git a/sysdeps/sparc/sparc64/elf/crtbegin.S b/sysdeps/sparc/sparc64/elf/crtbegin.S index 318e7a6a3f..c2fe01f6b0 100644 --- a/sysdeps/sparc/sparc64/elf/crtbegin.S +++ b/sysdeps/sparc/sparc64/elf/crtbegin.S @@ -40,7 +40,7 @@ __DTOR_LIST__: .align 4 .type __do_global_dtors_aux,#function __do_global_dtors_aux: - save %sp,-160,%sp + save %sp,-192,%sp #ifdef PIC 1: call 11f @@ -53,7 +53,6 @@ __do_global_dtors_aux: #else sethi %hi(__DTOR_LIST__), %l0 or %l0, %lo(__DTOR_LIST__), %l0 - add %l0, %g4, %l0 #endif ba 3f diff --git a/sysdeps/sparc/sparc64/elf/crtend.S b/sysdeps/sparc/sparc64/elf/crtend.S index 7a5c067b07..db0ac87ecd 100644 --- a/sysdeps/sparc/sparc64/elf/crtend.S +++ b/sysdeps/sparc/sparc64/elf/crtend.S @@ -40,7 +40,7 @@ __DTOR_END__: .align 4 .type __do_global_ctors_aux,#function __do_global_ctors_aux: - save %sp,-160,%sp + save %sp,-192,%sp #ifdef PIC 1: call 11f @@ -53,7 +53,6 @@ __do_global_ctors_aux: #else sethi %hi(__CTOR_END__), %l0 or %l0, %lo(__CTOR_END__), %l0 - add %l0, %g4, %l0 #endif ba 3f diff --git a/sysdeps/sparc/sparc64/elf/start.S b/sysdeps/sparc/sparc64/elf/start.S index 140cd366e5..1fc24619cf 100644 --- a/sysdeps/sparc/sparc64/elf/start.S +++ b/sysdeps/sparc/sparc64/elf/start.S @@ -38,24 +38,12 @@ _start: add %sp, STACK_BIAS+23*8, %o2 /* Load the addresses of the user entry points. */ - sethi %uhi(main), %o0 - sethi %uhi(_init), %o3 - sethi %uhi(_fini), %o4 - or %o0, %ulo(main), %o0 - or %o3, %ulo(_init), %o3 - or %o4, %ulo(_fini), %o4 - sethi %hi(main), %i0 - sethi %hi(_init), %i3 - sethi %hi(_fini), %i4 - sllx %o0, 32, %o0 - or %i0, %lo(main), %i0 - sllx %o3, 32, %o3 - or %i3, %lo(_init), %i3 - sllx %o4, 32, %o4 - or %i4, %lo(_fini), %i4 - or %o0, %i0, %o0 - or %o3, %i3, %o3 - or %o4, %i4, %o4 + sethi %hi(main), %o0 + sethi %hi(_init), %o3 + sethi %hi(_fini), %o4 + or %o0, %lo(main), %o0 + or %o3, %lo(_init), %o3 + or %o4, %lo(_fini), %o4 /* When starting a binary via the dynamic linker, %g1 contains the address of the shared library termination function, which will be diff --git a/sysdeps/sparc/sparc64/lshift.S b/sysdeps/sparc/sparc64/lshift.S index 1678991529..f211924ddb 100644 --- a/sysdeps/sparc/sparc64/lshift.S +++ b/sysdeps/sparc/sparc64/lshift.S @@ -28,7 +28,7 @@ cnt %i3 */ ENTRY(__mpn_lshift) - save %sp, -128, %sp + save %sp, -192, %sp sllx %i2,3,%g1 add %i1,%g1,%i1 ! make %i1 point at end of src diff --git a/sysdeps/sparc/sparc64/mul_1.S b/sysdeps/sparc/sparc64/mul_1.S index 87e441d7eb..757856b4cd 100644 --- a/sysdeps/sparc/sparc64/mul_1.S +++ b/sysdeps/sparc/sparc64/mul_1.S @@ -31,7 +31,7 @@ ENTRY(__mpn_mul_1) !#PROLOGUE# 0 - save %sp,-128,%sp + save %sp,-192,%sp !#PROLOGUE# 1 sub %g0,%i2,%o7 diff --git a/sysdeps/sparc/sparc64/rshift.S b/sysdeps/sparc/sparc64/rshift.S index e1b3aca112..51eb4af3ab 100644 --- a/sysdeps/sparc/sparc64/rshift.S +++ b/sysdeps/sparc/sparc64/rshift.S @@ -28,7 +28,7 @@ cnt %i3 */ ENTRY(__mpn_rshift) - save %sp, -128, %sp + save %sp, -192, %sp ldx [%i1],%g2 ! load first limb sub %g0,%i3,%i5 ! negate shift count diff --git a/sysdeps/sparc/sparc64/submul_1.S b/sysdeps/sparc/sparc64/submul_1.S index 3cc0e3bb08..ce9a80464f 100644 --- a/sysdeps/sparc/sparc64/submul_1.S +++ b/sysdeps/sparc/sparc64/submul_1.S @@ -31,7 +31,7 @@ ENTRY(__mpn_submul_1) !#PROLOGUE# 0 - save %sp,-128,%sp + save %sp,-192,%sp !#PROLOGUE# 1 sub %g0,%i2,%o7 diff --git a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h index 1858ef4857..3e4e855915 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/sigaction.h @@ -40,6 +40,8 @@ struct sigaction /* Bits in `sa_flags'. */ #define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */ +#define SA_SIGINFO 0x00000200 /* Invoke signal-catching function with + three arguments instead of one. */ #ifdef __USE_MISC # define SA_STACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ # define SA_RESTART 0x00000002 /* Restart syscall on signal return. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signum.h b/sysdeps/unix/sysv/linux/sparc/bits/signum.h index fae3826023..976eef2758 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/signum.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/signum.h @@ -32,8 +32,6 @@ * Linux/SPARC has different signal numbers that Linux/i386: I'm trying * to make it OSF/1 binary compatible, at least for normal binaries. */ -#define _NSIG 32 /* Biggest signal number + 1. */ - #define SIGHUP 1 #define SIGINT 2 #define SIGQUIT 3 @@ -70,4 +68,15 @@ #define SIGUSR1 30 #define SIGUSR2 31 +#define _NSIG 64 /* Biggest signal number + 1 + (including real-time signals). */ + +#define SIGRTMIN (__libc_current_sigrtmin ()) +#define SIGRTMAX (__libc_current_sigrtmax ()) + +/* These are the hard limits of the kernel. These values should not be + used directly at user level. */ +#define __SIGRTMIN 32 +#define __SIGRTMAX (_NSIG - 1) + #endif /* <signal.h> included. */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c index 7e784cab8f..4d38631a19 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/brk.c @@ -33,7 +33,7 @@ weak_alias (__curbrk, ___brk_addr) int __brk (void *addr) { - void *newbrk, *scratch; + void *newbrk; { register void *o0 __asm__("%o0") = addr; diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c index 742ac5583c..ae44328fad 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c @@ -23,6 +23,13 @@ #include <errno.h> #include <kernel_sigaction.h> +extern int __syscall_rt_sigaction (int, const struct kernel_sigaction *, + struct kernel_sigaction *, unsigned long, + size_t); + +static void __rt_sigreturn_stub (void); +static void __sigreturn_stub (void); + /* The variable is shared between all wrappers around signal handling functions which have RT equivalents. */ int __libc_missing_rt_sigs; @@ -30,8 +37,49 @@ int __libc_missing_rt_sigs; int __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact) { + struct old_kernel_sigaction k_sigact, k_osigact; int ret; - struct kernel_sigaction k_sigact, k_osigact; + + /* First try the RT signals. */ + if (!__libc_missing_rt_sigs) + { + struct kernel_sigaction kact, koact; + unsigned long stub = 0; + int saved_errno = errno; + + if (act) + { + kact.k_sa_handler = act->sa_handler; + memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t)); + if (((kact.sa_flags = act->sa_flags) & SA_SIGINFO) != 0) + stub = (unsigned long) &__rt_sigreturn_stub; + else + stub = (unsigned long) &__sigreturn_stub; + stub -= 8; + kact.sa_restorer = NULL; + } + + /* XXX The size argument hopefully will have to be changed to the + real size of the user-level sigset_t. */ + ret = __syscall_rt_sigaction (sig, act ? &kact : 0, + oact ? &koact : 0, + stub, _NSIG / 8); + + if (ret >= 0 || errno != ENOSYS) + { + if (oact && ret >= 0) + { + oact->sa_handler = koact.k_sa_handler; + memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t)); + oact->sa_flags = koact.sa_flags; + oact->sa_restorer = koact.sa_restorer; + } + return ret; + } + + __set_errno (saved_errno); + __libc_missing_rt_sigs = 1; + } /* Magic to tell the kernel we are using "new-style" signals, in that the signal table is not kept in userspace. Not the same as the @@ -41,15 +89,16 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact) if (act) { k_sigact.k_sa_handler = act->sa_handler; - memcpy (&k_sigact.sa_mask, &act->sa_mask, sizeof (sigset_t)); + k_sigact.sa_mask = act->sa_mask.__val[0]; k_sigact.sa_flags = act->sa_flags; + k_sigact.sa_restorer = NULL; } { register int r_syscallnr __asm__("%g1") = __NR_sigaction; register int r_sig __asm__("%o0") = sig; - register struct kernel_sigaction *r_act __asm__("%o1"); - register struct kernel_sigaction *r_oact __asm__("%o2"); + register struct old_kernel_sigaction *r_act __asm__("%o1"); + register struct old_kernel_sigaction *r_oact __asm__("%o2"); r_act = act ? &k_sigact : NULL; r_oact = oact ? &k_osigact : NULL; @@ -57,7 +106,7 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact) __asm__ __volatile__("t 0x10\n\t" "bcc 1f\n\t" " nop\n\t" - " sub %%g0,%%o0,%%o0\n" + "sub %%g0,%%o0,%%o0\n" "1:" : "=r"(r_sig) : "r"(r_syscallnr), "r"(r_act), "r"(r_oact), @@ -66,16 +115,13 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact) ret = r_sig; } - if (ret >= 0) + if (oact && ret >= 0) { - if (oact) - { - oact->sa_handler = k_osigact.k_sa_handler; - memcpy (&oact->sa_mask, &k_osigact.sa_mask, sizeof (sigset_t)); - oact->sa_flags = k_osigact.sa_flags; - oact->sa_restorer = NULL; - } - return 0; + oact->sa_handler = k_osigact.k_sa_handler; + oact->sa_mask.__val[0] = k_osigact.sa_mask; + oact->sa_flags = k_osigact.sa_flags; + oact->sa_restorer = NULL; + return ret; } __set_errno (-ret); @@ -83,3 +129,21 @@ __sigaction (int sig, __const struct sigaction *act, struct sigaction *oact) } weak_alias (__sigaction, sigaction); + +static void +__rt_sigreturn_stub (void) +{ + __asm__ ("mov %0, %%g1\n\t" + "ta 0x10\n\t" + : /* no outputs */ + : "i" (__NR_rt_sigreturn)); +} + +static void +__sigreturn_stub (void) +{ + __asm__ ("mov %0, %%g1\n\t" + "ta 0x10\n\t" + : /* no outputs */ + : "i" (__NR_sigreturn)); +} diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/Dist b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist index 50f83311cd..c22b73ebd2 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/Dist +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/Dist @@ -4,5 +4,4 @@ kernel_stat.h getcontext.S setcontext.S sizes.h -ucontext.h init-first.h diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h index b200b718d2..e51f81a5a0 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h @@ -21,6 +21,11 @@ # error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." #endif -#include <ucontext.h> +#include <sys/ucontext.h> typedef ucontext_t __jmp_buf[1]; + +/* Test if longjmp to JMPBUF would unwind the frame + containing a local variable at ADDRESS. */ +#define _JMPBUF_UNWINDS(jmpbuf, address) \ + ((unsigned long int) (address) < (jmpbuf)->uc_mcontext.mc_fp) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h index 9027eca2ac..b6178f5a8e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h @@ -39,4 +39,20 @@ struct statfs long int f_spare[6]; }; +/* We already use 64-bit types in the normal structure, + so this is the same as the above. */ +struct statfs64 + { + long int f_type; + long int f_bsize; + long int f_blocks; + long int f_bfree; + long int f_bavail; + long int f_files; + long int f_ffree; + __fsid_t f_fsid; + long int f_namelen; + long int f_spare[6]; + }; + #endif /* bits/statfs.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S index 333f9916f8..e21b60d637 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/brk.S @@ -38,7 +38,7 @@ __curbrk: .skip 8 .text ENTRY(__brk) - save %sp, -160, %sp + save %sp, -192, %sp #ifdef PIC 1: call 2f sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 @@ -49,24 +49,23 @@ ENTRY(__brk) LOADSYSCALL(brk) mov %i0, %o0 - ta 0x11 + ta 0x6d /* All the ways we can fail... */ bcs,pn %xcc, .Lerr1 nop - brz %i0, .Lok + brz,pt %i0, .Lok subcc %i0, %o0, %g0 bne,pn %xcc, .Lerr0 + nop /* Update __curbrk and return cleanly. */ .Lok: sethi %hi(__curbrk), %g1 or %g1, %lo(__curbrk), %g1 #ifdef PIC ldx [%l7+%g1], %g1 - stx %o0, [%g1] -#else - stx %o0, [%g4+%g1] #endif + stx %o0, [%g1] mov %g0, %i0 /* Don't use "ret" cause the preprocessor will eat it. */ @@ -81,10 +80,8 @@ ENTRY(__brk) or %g1, %lo(errno), %g1 #ifdef PIC ldx [%l7+%g1], %g1 - st %o0, [%g1] -#else - st %o0, [%g4+%g1] #endif + st %o0, [%g1] #else call __errno_location mov %o0,%l1 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index 6c619fcdc3..d7506b7c72 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -30,7 +30,7 @@ .type __clone,@function __clone: - save %sp,-160,%sp + save %sp, -192, %sp /* sanity check arguments */ brz,pn %i0, 99f @@ -42,10 +42,10 @@ __clone: mov %i1, %o1 mov %i2, %o0 set __NR_clone, %g1 - ta 0x11 + ta 0x6d bcs,pn %xcc, 99f nop - brnz %o0, __thread_start + brnz,pn %o0, __thread_start mov %o0, %i0 ret restore @@ -62,7 +62,6 @@ __clone: st %i0, [%l7+%g2] #else sethi %hi(errno), %g2 - add %g2, %g4, %g2 set EINVAL, %i0 st %i0, [%g2+%lo(errno)] #endif diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h index 955714dc4f..ece284ab44 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/init-first.h @@ -33,7 +33,7 @@ .global " #NAME " .type " #NAME ",@function " #NAME ": - save %sp, -128, %sp + save %sp, -192, %sp 1: call 11f sethi %hi(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 11: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(1b-.)), %l7 @@ -73,11 +73,10 @@ or %g2, %lo(_dl_starting_up), %g2 brz,pt %g2, 3f sethi %hi(__libc_multiple_libcs), %g3 - ld [%g4+%g2], %g1 + ld [%g2], %g1 mov %g0, %g2 movrz %g1, 1, %g2 -3: or %g3, %lo(__libc_multiple_libcs), %g3 - st %g2, [%g3+%g4] +3: st %g2, [%g3 + %lo(__libc_multiple_libcs)] /* If so, argc et al are in %o0-%o2 already. Otherwise, load them. */ brnz,pn %g2, " #INIT " nop diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S index d63762cb15..963aa6d89d 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S @@ -44,5 +44,7 @@ ENTRY(longjmp) END(longjmp) strong_alias(longjmp, __longjmp) +strong_alias(longjmp, __libc_longjmp) +strong_alias(longjmp, __libc_siglongjmp) weak_alias(longjmp, _longjmp) weak_alias(longjmp, siglongjmp) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S index 82ff4eae3c..38a6f8f8b8 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S @@ -22,7 +22,7 @@ ENTRY (__libc_pipe) mov %o0, %o2 /* Save PIPEDES. */ LOADSYSCALL(pipe) - ta 0x11 + ta 0x6d bcc,pn %xcc, 2f nop SYSCALL_ERROR_HANDLER diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c index 96a6a76945..300ebb2629 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c @@ -1,4 +1,7 @@ #define readdir64 __no_readdir64_decl +#define __readdir64 __no___readdir64_decl #include <sysdeps/unix/readdir.c> +#undef __readdir64 +strong_alias (__readdir, __readdir64) #undef readdir64 weak_alias (__readdir, readdir64) diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h index 160e2fc43a..f62b542b2f 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/ucontext.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h @@ -1,5 +1,5 @@ -#ifndef _UCONTEXT_H -#define _UCONTEXT_H +#ifndef _SYS_UCONTEXT_H +#define _SYS_UCONTEXT_H #include <signal.h> @@ -64,4 +64,4 @@ struct ucontext { }; typedef struct ucontext ucontext_t; -#endif /* ucontext.h */ +#endif /* sys/ucontext.h */ diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S index 30dace5903..5864bfcbc3 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscall.S @@ -28,7 +28,7 @@ ENTRY (syscall) mov %o4,%o3 mov %o5,%o4 - ta 0x11 + ta 0x6d bcc,pt %xcc,1f nop diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list index fcf556b818..1ec42fa42e 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list @@ -6,7 +6,7 @@ pread - pread 4 __pread pread __pread64 pread64 pwrite - pwrite 4 __pwrite pwrite __pwrite64 pwrite64 fstatfs - fstatfs 2 __fstatfs fstatfs fstatfs64 statfs - statfs 2 __statfs statfs statfs64 -getrlimit - getrlimit 2 getrlimit getrlimit64 +getrlimit - getrlimit 2 __getrlimit getrlimit getrlimit64 setrlimit - setrlimit 2 setrlimit setrlimit64 ftruncate - ftruncate 2 __ftruncate ftruncate ftruncate64 truncate - truncate 2 truncate truncate64 diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h index 2cc8547c1a..5a9a4e249b 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h @@ -46,49 +46,48 @@ #ifdef PIC # ifdef _LIBC_REENTRANT # define SYSCALL_ERROR_HANDLER \ - save %sp,-160,%sp; \ - call __errno_location; \ + save %sp, -192, %sp; \ + call __errno_location; \ nop; \ - st %i0,[%o0]; \ - sub %g0,1,%i0; \ - jmpl %i7+8, %g0; \ + st %i0,[%o0]; \ + sub %g0,1,%i0; \ + jmpl %i7+8, %g0; \ restore # else # define SYSCALL_ERROR_HANDLER \ .global C_SYMBOL_NAME(errno); \ .type C_SYMBOL_NAME(errno),@object; \ - mov %o7,%g3; \ - 101: call 102f; \ - sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \ - 102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)),%g2; \ - sethi %hi(errno),%o1; \ - add %g2,%o7,%l7; \ - or %o1,%lo(errno),%o1; \ - mov %g3,%o7; \ - ldx [%l7+%o1],%g2; \ - st %o0,[%g2]; \ + mov %o7, %g3; \ + 101: call 102f; \ + sethi %hi(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \ + 102: or %g2,%lo(_GLOBAL_OFFSET_TABLE_-(101b-.)), %g2; \ + sethi %hi(errno), %o1; \ + add %g2, %o7, %l7; \ + or %o1, %lo(errno), %o1; \ + mov %g3,%o7; \ + ldx [%l7+%o1], %g2; \ + st %o0, [%g2]; \ retl; \ - sub %g0,1,%i0 + sub %g0, 1, %i0 # endif #else # ifdef _LIBC_REENTRANT # define SYSCALL_ERROR_HANDLER \ - save %sp,-160,%sp; \ - call __errno_location; \ + save %sp, -192, %sp; \ + call __errno_location; \ nop; \ - st %i0,[%o0]; \ - sub %g0,1,%i0; \ - jmpl %i7+8, %g0; \ + st %i0, [%o0]; \ + sub %g0, 1, %i0; \ + jmpl %i7+8, %g0; \ restore # else # define SYSCALL_ERROR_HANDLER \ .global C_SYMBOL_NAME(errno); \ .type C_SYMBOL_NAME(errno),@object; \ - sethi %hi(errno),%g1; \ - or %g1,%lo(errno),%g1; \ - st %i0,[%g1+%g4]; \ + sethi %hi(errno), %g1; \ + st %i0, [%g1 + %lo(errno)]; \ retl; \ - sub %g0,1,%i0 + sub %g0, 1, %i0 # endif #endif @@ -96,8 +95,8 @@ .text; \ ENTRY(name); \ LOADSYSCALL(syscall_name); \ - ta 0x11; \ - bcc,pt %xcc,1f; \ + ta 0x6d; \ + bcc,pt %xcc, 1f; \ nop; \ SYSCALL_ERROR_HANDLER; \ 1: |