diff --git a/ChangeLog b/ChangeLog index 064d5edd7c..cd51ee9c35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +1999-07-13 Jakub Jelinek + + * elf/ldd.bash.in: Add support for multiple dynamic linkers. + * sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed: On sparc*linux*, + try both 32bit and 64bit dynamic linker. + * sysdeps/unix/sysv/linux/configure.in: Apply sparc ldd-rewrite + script on all sparc targets. + +1999-07-13 Jakub Jelinek + + * sysdeps/unix/sysv/linux/shmat.c (shmat): Avoid casting a pointer + to int. + 1999-07-13 Andreas Schwab * elf/dl-runtime.c (fixup, profile_fixup): Call alloca to prevent diff --git a/elf/ldd.bash.in b/elf/ldd.bash.in index 5eeba806a8..85e0f88fa0 100644 --- a/elf/ldd.bash.in +++ b/elf/ldd.bash.in @@ -28,7 +28,7 @@ TEXTDOMAIN=libc TEXTDOMAINDIR=@TEXTDOMAINDIR@ -RTLD=@RTLD@ +RTLDLIST=@RTLD@ warn= bind_now= verbose= @@ -125,8 +125,23 @@ for file do elif test -r "$file"; then test -x "$file" || echo 'ldd:' $"\ warning: you do not have execution permission for" "\`$file'" >&2 - verify_out=`${RTLD} --verify "$file"` - case $? in + RTLD= + for rtld in ${RTLDLIST}; do + if test -x $rtld; then + verify_out=`${rtld} --verify "$file"` + ret=$? + case $ret in + [02]) RTLD=${rtld}; break;; + esac + fi + done + if test -z "${RTLD}"; then + set ${RTLDLIST} + RTLD=$1 + verify_out=`${RTLD} --verify "$file"` + ret=$? + fi + case $ret in 0) eval $add_env '"$file"' || result=1 ;; @@ -141,7 +156,7 @@ warning: you do not have execution permission for" "\`$file'" >&2 eval $add_env \${RTLD} '"$file"' || result=1 ;; *) - echo 'ldd:' ${RTLD} $"exited with unknown exit code" "($?)" >&2 + echo 'ldd:' ${RTLD} $"exited with unknown exit code" "($ret)" >&2 exit 1 ;; esac diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure index 2e3ba901e1..87a5bff15b 100644 --- a/sysdeps/unix/sysv/linux/configure +++ b/sysdeps/unix/sysv/linux/configure @@ -155,7 +155,7 @@ case "$machine" in i[3456]86* | m68*) ldd_rewrite_script=../sysdeps/unix/sysv/linux/ldd-rewrite.sed ;; - sparc/sparc32) + sparc*) ldd_rewrite_script=../sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed ;; *) diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in index d7b2bd97c4..fae7934312 100644 --- a/sysdeps/unix/sysv/linux/configure.in +++ b/sysdeps/unix/sysv/linux/configure.in @@ -126,7 +126,7 @@ case "$machine" in i[3456]86* | m68*) ldd_rewrite_script=../sysdeps/unix/sysv/linux/ldd-rewrite.sed ;; - sparc/sparc32) + sparc*) ldd_rewrite_script=../sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed ;; *) diff --git a/sysdeps/unix/sysv/linux/shmat.c b/sysdeps/unix/sysv/linux/shmat.c index 9ebac49537..6e25d452a3 100644 --- a/sysdeps/unix/sysv/linux/shmat.c +++ b/sysdeps/unix/sysv/linux/shmat.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , August 1995. @@ -33,11 +33,11 @@ shmat (shmid, shmaddr, shmflg) const void *shmaddr; int shmflg; { - int retval; + long int retval; unsigned long raddr; - retval = INLINE_SYSCALL (ipc, 5, IPCOP_shmat, shmid, shmflg, (int) &raddr, - (void *) shmaddr); + retval = INLINE_SYSCALL (ipc, 5, IPCOP_shmat, shmid, shmflg, + (long int) &raddr, (void *) shmaddr); return ((unsigned long int) retval > -(unsigned long int) SHMLBA ? (void *) retval : (void *) raddr); } diff --git a/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed index f0a192c7e0..7dc2698fa8 100644 --- a/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed +++ b/sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed @@ -1,2 +1,3 @@ /LD_TRACE_LOADED_OBJECTS=1/a\ add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" +s_^\(RTLDLIST=\)\(.*lib\)\(\|64\)\(/[^/]*\.so\.[0-9.]*\)[ ]*$_\1"\2\4 \264\4"_