1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00
* sysdeps/generic/ldsodefs.h: Add _dl_load_lock, _dl_lazy,
	_dl_dynamic_weak, _dl_fpu_control, _dl_cpuclock_offset, and
	_dl_debug_fd to rtld_global.
	* elf/Versions: Likewise.
	* elf/dl-close.c: Likewise.
	* elf/dl-iteratephdr.c: Likewise.
	* elf/dl-lookup.c: Likewise.
	* elf/dl-misc.c: Likewise.
	* elf/dl-open.c: Likewise.
	* elf/dl-support.c: Likewise.
	* elf/do-lookup.h: Likewise.
	* elf/rtld.c: Likewise.
	* sysdeps/generic/dl-cache.c: Likewise.
	* sysdeps/generic/dl-sysdep.c: Likewise.
	* sysdeps/ia64/Versions: Likewise.
	* sysdeps/unix/clock_gettime.c: Likewise.
	* sysdeps/unix/clock_settime.c: Likewise.
	* sysdeps/unix/sysv/linux/init-first.c: Likewise.
	* sysdeps/sparc/Versions: Removed.
	* sysdeps/i386/i686/Versions : Removed.
	* sysdeps/x86_64/Versions: Removed.
	* configure.in: Define HAVE_PROTECTED if .protected is available.
	* config.h.in: Add entry for HAVE_PROTECTED.

2002-01-31  Jakub Jelinek  <jakub@redhat.com.

	* sysdeps/alpha/dl-machine.h: Move global variables for SHARED
	code in struct _rtld_global.  Export this struct, remove all
	exports for the signal variables.
	* sysdeps/arm/dl-machine: Likewise.
	* sysdeps/generic/dl-origin: Likewise.
	* sysdeps/generic/dl-sysdep: Likewise.
	* sysdeps/generic/dl-cache: Likewise.
	* sysdeps/hppa/dl-fptr: Likewise.
	* sysdeps/hppa/dl-machine: Likewise.
	* sysdeps/cris/dl-machine: Likewise.
	* sysdeps/i386/dl-machine: Likewise.
	* sysdeps/ia64/dl-machine: Likewise.
	* sysdeps/m68k/dl-machine: Likewise.
	* sysdeps/mach/hurd/dl-sysdep: Likewise.
	* sysdeps/mips/mips64/dl-machine: Likewise.
	* sysdeps/mips/dl-machine: Likewise.
	* sysdeps/powerpc/elf/libc-start: Likewise.
	* sysdeps/powerpc/dl-machine: Likewise.
	* sysdeps/powerpc/dl-start: Likewise.
	* sysdeps/sparc/sparc32/dl-machine: Likewise.
	* sysdeps/sparc/sparc64/dl-machine: Likewise.
	* sysdeps/sh/dl-machine: Likewise.
	* sysdeps/s390/s390-32/dl-machine: Likewise.
	* sysdeps/s390/s390-64/dl-machine: Likewise.
	* sysdeps/unix/sysv/aix/libc-start: Likewise.
	* sysdeps/unix/sysv/aix/start-libc: Likewise.
	* sysdeps/unix/sysv/linux/ia64/dl-static: Likewise.
	* sysdeps/unix/sysv/linux/m68k/getpagesize: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize: Likewise.
	* sysdeps/x86_64/dl-machine: Likewise.

2002-01-31  Ulrich Drepper  <drepper@redhat.com>
This commit is contained in:
Ulrich Drepper
2002-02-01 01:33:04 +00:00
parent a204ea3607
commit 5688da5537
51 changed files with 389 additions and 353 deletions

View File

@ -1,3 +1,62 @@
2002-01-31 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/ldsodefs.h: Add _dl_load_lock, _dl_lazy,
_dl_dynamic_weak, _dl_fpu_control, _dl_cpuclock_offset, and
_dl_debug_fd to rtld_global.
* elf/Versions: Likewise.
* elf/dl-close.c: Likewise.
* elf/dl-iteratephdr.c: Likewise.
* elf/dl-lookup.c: Likewise.
* elf/dl-misc.c: Likewise.
* elf/dl-open.c: Likewise.
* elf/dl-support.c: Likewise.
* elf/do-lookup.h: Likewise.
* elf/rtld.c: Likewise.
* sysdeps/generic/dl-cache.c: Likewise.
* sysdeps/generic/dl-sysdep.c: Likewise.
* sysdeps/ia64/Versions: Likewise.
* sysdeps/unix/clock_gettime.c: Likewise.
* sysdeps/unix/clock_settime.c: Likewise.
* sysdeps/unix/sysv/linux/init-first.c: Likewise.
* sysdeps/sparc/Versions: Removed.
* sysdeps/i386/i686/Versions : Removed.
* sysdeps/x86_64/Versions: Removed.
* configure.in: Define HAVE_PROTECTED if .protected is available.
* config.h.in: Add entry for HAVE_PROTECTED.
2002-01-31 Jakub Jelinek <jakub@redhat.com.
* sysdeps/alpha/dl-machine.h: Move global variables for SHARED
code in struct _rtld_global. Export this struct, remove all
exports for the signal variables.
* sysdeps/arm/dl-machine: Likewise.
* sysdeps/generic/dl-origin: Likewise.
* sysdeps/generic/dl-sysdep: Likewise.
* sysdeps/generic/dl-cache: Likewise.
* sysdeps/hppa/dl-fptr: Likewise.
* sysdeps/hppa/dl-machine: Likewise.
* sysdeps/cris/dl-machine: Likewise.
* sysdeps/i386/dl-machine: Likewise.
* sysdeps/ia64/dl-machine: Likewise.
* sysdeps/m68k/dl-machine: Likewise.
* sysdeps/mach/hurd/dl-sysdep: Likewise.
* sysdeps/mips/mips64/dl-machine: Likewise.
* sysdeps/mips/dl-machine: Likewise.
* sysdeps/powerpc/elf/libc-start: Likewise.
* sysdeps/powerpc/dl-machine: Likewise.
* sysdeps/powerpc/dl-start: Likewise.
* sysdeps/sparc/sparc32/dl-machine: Likewise.
* sysdeps/sparc/sparc64/dl-machine: Likewise.
* sysdeps/sh/dl-machine: Likewise.
* sysdeps/s390/s390-32/dl-machine: Likewise.
* sysdeps/s390/s390-64/dl-machine: Likewise.
* sysdeps/unix/sysv/aix/libc-start: Likewise.
* sysdeps/unix/sysv/aix/start-libc: Likewise.
* sysdeps/unix/sysv/linux/ia64/dl-static: Likewise.
* sysdeps/unix/sysv/linux/m68k/getpagesize: Likewise.
* sysdeps/unix/sysv/linux/sparc/sparc32/getpagesize: Likewise.
* sysdeps/x86_64/dl-machine: Likewise.
2002-01-31 Ulrich Drepper <drepper@redhat.com> 2002-01-31 Ulrich Drepper <drepper@redhat.com>
* sysdeps/posix/readv.c: Don't use alloca if the memory requirements * sysdeps/posix/readv.c: Don't use alloca if the memory requirements

View File

@ -96,6 +96,9 @@
/* Define if the linker supports the -z combreloc option. */ /* Define if the linker supports the -z combreloc option. */
#undef HAVE_Z_COMBRELOC #undef HAVE_Z_COMBRELOC
/* Define if the assembler supported .protected. */
#undef HAVE_PROTECTED
/* Defined to some form of __attribute__ ((...)) if the compiler supports /* Defined to some form of __attribute__ ((...)) if the compiler supports
a different, more efficient calling convention. */ a different, more efficient calling convention. */

112
configure vendored
View File

@ -2789,9 +2789,13 @@ fi
echo "$ac_t""$libc_cv_asm_protected_directive" 1>&6 echo "$ac_t""$libc_cv_asm_protected_directive" 1>&6
cat >> confdefs.h <<\EOF
#define HAVE_PROTECTED 1
EOF
echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6 echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6
echo "configure:2795: checking for -z nodelete option" >&5 echo "configure:2799: checking for -z nodelete option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2800,7 +2804,7 @@ int _start (void) { return 42; }
EOF EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib -nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2804: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2808: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then then
libc_cv_z_nodelete=yes libc_cv_z_nodelete=yes
else else
@ -2813,7 +2817,7 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6
echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6 echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6
echo "configure:2817: checking for -z nodlopen option" >&5 echo "configure:2821: checking for -z nodlopen option" >&5
if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2822,7 +2826,7 @@ int _start (void) { return 42; }
EOF EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib -nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2826: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2830: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then then
libc_cv_z_nodlopen=yes libc_cv_z_nodlopen=yes
else else
@ -2835,7 +2839,7 @@ echo "$ac_t""$libc_cv_z_nodlopen" 1>&6
echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6 echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6
echo "configure:2839: checking for -z initfirst option" >&5 echo "configure:2843: checking for -z initfirst option" >&5
if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2844,7 +2848,7 @@ int _start (void) { return 42; }
EOF EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostartfiles -nostdlib -nostartfiles -nostdlib
-Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2852: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then then
libc_cv_z_initfirst=yes libc_cv_z_initfirst=yes
else else
@ -2857,14 +2861,14 @@ echo "$ac_t""$libc_cv_z_initfirst" 1>&6
echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6 echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6
echo "configure:2861: checking for -Bgroup option" >&5 echo "configure:2865: checking for -Bgroup option" >&5
if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
int _start (void) { return 42; } int _start (void) { return 42; }
EOF EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2868: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,-Bgroup -nostdlib 1>&5'; { (eval echo configure:2872: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then then
libc_cv_Bgroup=yes libc_cv_Bgroup=yes
else else
@ -2877,7 +2881,7 @@ echo "$ac_t""$libc_cv_Bgroup" 1>&6
echo $ac_n "checking for -z combreloc""... $ac_c" 1>&6 echo $ac_n "checking for -z combreloc""... $ac_c" 1>&6
echo "configure:2881: checking for -z combreloc" >&5 echo "configure:2885: checking for -z combreloc" >&5
if eval "test \"`echo '$''{'libc_cv_z_combreloc'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_z_combreloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2887,7 +2891,7 @@ int foo (void) { return bar (); }
EOF EOF
if { ac_try='${CC-cc} -shared -o conftest.so conftest.c if { ac_try='${CC-cc} -shared -o conftest.so conftest.c
-nostdlib -nostartfiles -nostdlib -nostartfiles
-Wl,-z,combreloc 1>&5'; { (eval echo configure:2891: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } -Wl,-z,combreloc 1>&5'; { (eval echo configure:2895: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
then then
if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
libc_cv_z_combreloc=yes libc_cv_z_combreloc=yes
@ -2912,12 +2916,12 @@ fi
if test $elf != yes; then if test $elf != yes; then
echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
echo "configure:2916: checking for .init and .fini sections" >&5 echo "configure:2920: checking for .init and .fini sections" >&5
if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2921 "configure" #line 2925 "configure"
#include "confdefs.h" #include "confdefs.h"
int main() { int main() {
@ -2926,7 +2930,7 @@ asm (".section .init");
asm ("${libc_cv_dot_text}"); asm ("${libc_cv_dot_text}");
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:2930: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:2934: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
libc_cv_have_initfini=yes libc_cv_have_initfini=yes
else else
@ -2949,7 +2953,7 @@ fi
if test $elf = yes -a $gnu_ld = yes; then if test $elf = yes -a $gnu_ld = yes; then
echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6 echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6
echo "configure:2953: checking whether cc puts quotes around section names" >&5 echo "configure:2957: checking whether cc puts quotes around section names" >&5
if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -2986,19 +2990,19 @@ if test $elf = yes; then
else else
if test $ac_cv_prog_cc_works = yes; then if test $ac_cv_prog_cc_works = yes; then
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:2990: checking for _ prefix on C symbol names" >&5 echo "configure:2994: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 2995 "configure" #line 2999 "configure"
#include "confdefs.h" #include "confdefs.h"
asm ("_glibc_foobar:"); asm ("_glibc_foobar:");
int main() { int main() {
glibc_foobar (); glibc_foobar ();
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:3002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:3006: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
libc_cv_asm_underscores=yes libc_cv_asm_underscores=yes
else else
@ -3013,17 +3017,17 @@ fi
echo "$ac_t""$libc_cv_asm_underscores" 1>&6 echo "$ac_t""$libc_cv_asm_underscores" 1>&6
else else
echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
echo "configure:3017: checking for _ prefix on C symbol names" >&5 echo "configure:3021: checking for _ prefix on C symbol names" >&5
if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3022 "configure" #line 3026 "configure"
#include "confdefs.h" #include "confdefs.h"
void underscore_test(void) { void underscore_test(void) {
return; } return; }
EOF EOF
if { (eval echo configure:3027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:3031: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if grep _underscore_test conftest* >/dev/null; then if grep _underscore_test conftest* >/dev/null; then
rm -f conftest* rm -f conftest*
libc_cv_asm_underscores=yes libc_cv_asm_underscores=yes
@ -3055,7 +3059,7 @@ if test $elf = yes; then
fi fi
echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
echo "configure:3059: checking for assembler .weak directive" >&5 echo "configure:3063: checking for assembler .weak directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3078,7 +3082,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
if test $libc_cv_asm_weak_directive = no; then if test $libc_cv_asm_weak_directive = no; then
echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
echo "configure:3082: checking for assembler .weakext directive" >&5 echo "configure:3086: checking for assembler .weakext directive" >&5
if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3125,14 +3129,14 @@ EOF
;; ;;
hppa*linux*) hppa*linux*)
echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6 echo $ac_n "checking for assembler line separator""... $ac_c" 1>&6
echo "configure:3129: checking for assembler line separator" >&5 echo "configure:3133: checking for assembler line separator" >&5
if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.s <<EOF cat > conftest.s <<EOF
nop ; is_old_puffin nop ; is_old_puffin
EOF EOF
if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3136: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3140: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_asm_line_sep='!' libc_cv_asm_line_sep='!'
else else
if test -z "$enable_hacker_mode"; then if test -z "$enable_hacker_mode"; then
@ -3154,7 +3158,7 @@ EOF
esac esac
echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
echo "configure:3158: checking for ld --no-whole-archive" >&5 echo "configure:3162: checking for ld --no-whole-archive" >&5
if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3165,7 +3169,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -Wl,--no-whole-archive -nostdlib -nostartfiles -Wl,--no-whole-archive
-o conftest conftest.c 1>&5'; { (eval echo configure:3169: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c 1>&5'; { (eval echo configure:3173: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_ld_no_whole_archive=yes libc_cv_ld_no_whole_archive=yes
else else
libc_cv_ld_no_whole_archive=no libc_cv_ld_no_whole_archive=no
@ -3179,7 +3183,7 @@ if test $libc_cv_ld_no_whole_archive = yes; then
fi fi
echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6
echo "configure:3183: checking for gcc -fexceptions" >&5 echo "configure:3187: checking for gcc -fexceptions" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3190,7 +3194,7 @@ __throw () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS if { ac_try='${CC-cc} $CFLAGS
-nostdlib -nostartfiles -fexceptions -nostdlib -nostartfiles -fexceptions
-o conftest conftest.c 1>&5'; { (eval echo configure:3194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c 1>&5'; { (eval echo configure:3198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_exceptions=yes libc_cv_gcc_exceptions=yes
else else
libc_cv_gcc_exceptions=no libc_cv_gcc_exceptions=no
@ -3205,14 +3209,14 @@ fi
if test "$base_machine" = alpha ; then if test "$base_machine" = alpha ; then
echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6
echo "configure:3209: checking for function ..ng prefix" >&5 echo "configure:3213: checking for function ..ng prefix" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<\EOF cat > conftest.c <<\EOF
foo () { } foo () { }
EOF EOF
if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:3216: \"$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:3220: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
then then
libc_cv_gcc_alpha_ng_prefix=yes libc_cv_gcc_alpha_ng_prefix=yes
else else
@ -3239,19 +3243,19 @@ if test "$host_cpu" = powerpc ; then
# Check for a bug present in at least versions 2.8.x of GCC # Check for a bug present in at least versions 2.8.x of GCC
# and versions 1.0.x of EGCS. # and versions 1.0.x of EGCS.
echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6 echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6
echo "configure:3243: checking whether clobbering cr0 causes problems" >&5 echo "configure:3247: checking whether clobbering cr0 causes problems" >&5
if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3248 "configure" #line 3252 "configure"
#include "confdefs.h" #include "confdefs.h"
int tester(int x) { asm ("" : : : "cc"); return x & 123; } int tester(int x) { asm ("" : : : "cc"); return x & 123; }
int main() { int main() {
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:3255: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if { (eval echo configure:3259: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest* rm -rf conftest*
libc_cv_c_asmcr0_bug='no' libc_cv_c_asmcr0_bug='no'
else else
@ -3273,12 +3277,12 @@ fi
fi fi
echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6
echo "configure:3277: checking for DWARF2 unwind info support" >&5 echo "configure:3281: checking for DWARF2 unwind info support" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3282 "configure" #line 3286 "configure"
static char __EH_FRAME_BEGIN__; static char __EH_FRAME_BEGIN__;
_start () _start ()
{ {
@ -3305,7 +3309,7 @@ __bzero () {}
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame_info
-nostdlib -nostartfiles -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3309: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=static libc_cv_gcc_dwarf2_unwind_info=static
else else
libc_cv_gcc_dwarf2_unwind_info=no libc_cv_gcc_dwarf2_unwind_info=no
@ -3313,7 +3317,7 @@ fi
if test $libc_cv_gcc_dwarf2_unwind_info = no; then if test $libc_cv_gcc_dwarf2_unwind_info = no; then
if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame
-nostdlib -nostartfiles -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3317: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3321: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_dwarf2_unwind_info=yes libc_cv_gcc_dwarf2_unwind_info=yes
else else
libc_cv_gcc_dwarf2_unwind_info=no libc_cv_gcc_dwarf2_unwind_info=no
@ -3343,12 +3347,12 @@ EOF
esac esac
echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6
echo "configure:3347: checking for __builtin_expect" >&5 echo "configure:3351: checking for __builtin_expect" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3352 "configure" #line 3356 "configure"
int foo (int a) int foo (int a)
{ {
a = __builtin_expect (a, 10); a = __builtin_expect (a, 10);
@ -3356,7 +3360,7 @@ int foo (int a)
} }
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_builtin_expect=yes libc_cv_gcc_builtin_expect=yes
else else
libc_cv_gcc_builtin_expect=no libc_cv_gcc_builtin_expect=no
@ -3373,12 +3377,12 @@ EOF
fi fi
echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6 echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6
echo "configure:3377: checking for local label subtraction" >&5 echo "configure:3381: checking for local label subtraction" >&5
if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
cat > conftest.c <<EOF cat > conftest.c <<EOF
#line 3382 "configure" #line 3386 "configure"
int foo (int a) int foo (int a)
{ {
static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 }; static const int ar[] = { &&l1 - &&l1, &&l2 - &&l1 };
@ -3391,7 +3395,7 @@ int foo (int a)
} }
EOF EOF
if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles
-o conftest conftest.c -lgcc >&5'; { (eval echo configure:3395: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3399: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
libc_cv_gcc_subtract_local_labels=yes libc_cv_gcc_subtract_local_labels=yes
else else
libc_cv_gcc_subtract_local_labels=no libc_cv_gcc_subtract_local_labels=no
@ -3408,7 +3412,7 @@ EOF
fi fi
echo $ac_n "checking for libgd""... $ac_c" 1>&6 echo $ac_n "checking for libgd""... $ac_c" 1>&6
echo "configure:3412: checking for libgd" >&5 echo "configure:3416: checking for libgd" >&5
if test "$with_gd" != "no"; then if test "$with_gd" != "no"; then
old_CFLAGS="$CFLAGS" old_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $libgd_include" CFLAGS="$CFLAGS $libgd_include"
@ -3417,14 +3421,14 @@ if test "$with_gd" != "no"; then
old_LIBS="$LIBS" old_LIBS="$LIBS"
LIBS="$LIBS -lgd -lpng -lz -lm" LIBS="$LIBS -lgd -lpng -lz -lm"
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3421 "configure" #line 3425 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <gd.h> #include <gd.h>
int main() { int main() {
gdImagePng (0, 0) gdImagePng (0, 0)
; return 0; } ; return 0; }
EOF EOF
if { (eval echo configure:3428: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then if { (eval echo configure:3432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest* rm -rf conftest*
LIBGD=yes LIBGD=yes
else else
@ -3444,7 +3448,7 @@ echo "$ac_t""$LIBGD" 1>&6
echo $ac_n "checking size of long double""... $ac_c" 1>&6 echo $ac_n "checking size of long double""... $ac_c" 1>&6
echo "configure:3448: checking size of long double" >&5 echo "configure:3452: checking size of long double" >&5
if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3452,7 +3456,7 @@ else
ac_cv_sizeof_long_double=0 ac_cv_sizeof_long_double=0
else else
cat > conftest.$ac_ext <<EOF cat > conftest.$ac_ext <<EOF
#line 3456 "configure" #line 3460 "configure"
#include "confdefs.h" #include "confdefs.h"
#include <stdio.h> #include <stdio.h>
int main() int main()
@ -3463,7 +3467,7 @@ int main()
return(0); return(0);
} }
EOF EOF
if { (eval echo configure:3467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null if { (eval echo configure:3471: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then then
ac_cv_sizeof_long_double=`cat conftestval` ac_cv_sizeof_long_double=`cat conftestval`
else else
@ -3541,7 +3545,7 @@ if test "$uname" = "sysdeps/generic"; then
fi fi
echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
echo "configure:3545: checking OS release for uname" >&5 echo "configure:3549: checking OS release for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3563,7 +3567,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
uname_release="$libc_cv_uname_release" uname_release="$libc_cv_uname_release"
echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
echo "configure:3567: checking OS version for uname" >&5 echo "configure:3571: checking OS version for uname" >&5
if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else
@ -3585,7 +3589,7 @@ else
fi fi
echo $ac_n "checking stdio selection""... $ac_c" 1>&6 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
echo "configure:3589: checking stdio selection" >&5 echo "configure:3593: checking stdio selection" >&5
case $stdio in case $stdio in
libio) cat >> confdefs.h <<\EOF libio) cat >> confdefs.h <<\EOF
@ -3599,7 +3603,7 @@ echo "$ac_t""$stdio" 1>&6
# Test for old glibc 2.0.x headers so that they can be removed properly # Test for old glibc 2.0.x headers so that they can be removed properly
# Search only in includedir. # Search only in includedir.
echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6
echo "configure:3603: checking for old glibc 2.0.x headers" >&5 echo "configure:3607: checking for old glibc 2.0.x headers" >&5
if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h"
then then
old_glibc_headers=yes old_glibc_headers=yes
@ -3660,7 +3664,7 @@ if test $shared = default; then
fi fi
echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6
echo "configure:3664: checking whether -fPIC is default" >&5 echo "configure:3668: checking whether -fPIC is default" >&5
if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6 echo $ac_n "(cached) $ac_c" 1>&6
else else

View File

@ -993,6 +993,7 @@ EOF
fi fi
rm -f conftest*]) rm -f conftest*])
AC_SUBST(libc_cv_asm_protected_directive) AC_SUBST(libc_cv_asm_protected_directive)
AC_DEFINE(HAVE_PROTECTED)
AC_CACHE_CHECK(for -z nodelete option, AC_CACHE_CHECK(for -z nodelete option,
libc_cv_z_nodelete, [dnl libc_cv_z_nodelete, [dnl

View File

@ -30,9 +30,6 @@ libc {
ld { ld {
GLIBC_2.0 { GLIBC_2.0 {
# global variables
_dl_debug_fd;
# Those are in the dynamic linker, but used by libc.so. # Those are in the dynamic linker, but used by libc.so.
__libc_enable_secure; _dl_catch_error; _dl_check_all_versions; __libc_enable_secure; _dl_catch_error; _dl_check_all_versions;
_dl_debug_initialize; _dl_debug_state; _dl_debug_initialize; _dl_debug_state;
@ -48,20 +45,17 @@ ld {
} }
GLIBC_2.1 { GLIBC_2.1 {
# global variables # global variables
_dl_fpu_control; __libc_stack_end; __libc_stack_end;
# functions used in other libraries # functions used in other libraries
_dl_start_profile; _dl_mcount; _dl_unload_cache; _dl_start_profile; _dl_mcount; _dl_unload_cache;
} }
GLIBC_2.1.1 { GLIBC_2.1.1 {
# global variables
_dl_lazy;
# functions used in other libraries # functions used in other libraries
_dl_dst_count; _dl_dst_substitute; _dl_dst_count; _dl_dst_substitute;
} }
GLIBC_2.2 { GLIBC_2.2 {
_dl_init; _dl_load_lock; _dl_argv; _dl_check_map_versions; _dl_init; _dl_argv; _dl_check_map_versions;
# variables used elsewhere # variables used elsewhere
_dl_out_of_memory; _dl_out_of_memory;

View File

@ -57,7 +57,7 @@ _dl_close (void *_map)
_dl_signal_error (0, map->l_name, NULL, N_("shared object not open")); _dl_signal_error (0, map->l_name, NULL, N_("shared object not open"));
/* Acquire the lock. */ /* Acquire the lock. */
__libc_lock_lock_recursive (_dl_load_lock); __libc_lock_lock_recursive (GL(dl_load_lock));
/* Decrement the reference count. */ /* Decrement the reference count. */
if (map->l_opencount > 1 || map->l_type != lt_loaded) if (map->l_opencount > 1 || map->l_type != lt_loaded)
@ -70,7 +70,7 @@ _dl_close (void *_map)
/* One decrement the object itself, not the dependencies. */ /* One decrement the object itself, not the dependencies. */
--map->l_opencount; --map->l_opencount;
__libc_lock_unlock_recursive (_dl_load_lock); __libc_lock_unlock_recursive (GL(dl_load_lock));
return; return;
} }
@ -298,7 +298,7 @@ _dl_close (void *_map)
free (list); free (list);
/* Release the lock. */ /* Release the lock. */
__libc_lock_unlock_recursive (_dl_load_lock); __libc_lock_unlock_recursive (GL(dl_load_lock));
} }

View File

@ -32,7 +32,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
int ret = 0; int ret = 0;
/* Make sure we are alone. */ /* Make sure we are alone. */
__libc_lock_lock_recursive (_dl_load_lock); __libc_lock_lock_recursive (GL(dl_load_lock));
for (l = GL(dl_loaded); l != NULL; l = l->l_next) for (l = GL(dl_loaded); l != NULL; l = l->l_next)
{ {
@ -49,7 +49,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
} }
/* Release the lock. */ /* Release the lock. */
__libc_lock_unlock_recursive (_dl_load_lock); __libc_lock_unlock_recursive (GL(dl_load_lock));
return ret; return ret;
} }

View File

@ -94,7 +94,7 @@ add_dependency (struct link_map *undef_map, struct link_map *map)
return 0; return 0;
/* Make sure nobody can unload the object while we are at it. */ /* Make sure nobody can unload the object while we are at it. */
__libc_lock_lock_recursive (_dl_load_lock); __libc_lock_lock_recursive (GL(dl_load_lock));
/* Determine whether UNDEF_MAP already has a reference to MAP. First /* Determine whether UNDEF_MAP already has a reference to MAP. First
look in the normal dependencies. */ look in the normal dependencies. */
@ -180,7 +180,7 @@ add_dependency (struct link_map *undef_map, struct link_map *map)
out: out:
/* Release the lock. */ /* Release the lock. */
__libc_lock_unlock_recursive (_dl_load_lock); __libc_lock_unlock_recursive (GL(dl_load_lock));
return result; return result;
} }

View File

@ -1,5 +1,5 @@
/* Miscellaneous support functions for dynamic linker /* Miscellaneous support functions for dynamic linker
Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -80,10 +80,6 @@ _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
} }
/* Descriptor to write debug messages to. */
int _dl_debug_fd = 2;
/* Bare-bone printf implementation. This function only knows about /* Bare-bone printf implementation. This function only knows about
the formats and flags needed and can handle only up to 64 stripes in the formats and flags needed and can handle only up to 64 stripes in
the output. */ the output. */
@ -250,7 +246,7 @@ _dl_debug_printf (const char *fmt, ...)
va_list arg; va_list arg;
va_start (arg, fmt); va_start (arg, fmt);
_dl_debug_vdprintf (_dl_debug_fd, 1, fmt, arg); _dl_debug_vdprintf (GL(dl_debug_fd), 1, fmt, arg);
va_end (arg); va_end (arg);
} }
@ -262,7 +258,7 @@ _dl_debug_printf_c (const char *fmt, ...)
va_list arg; va_list arg;
va_start (arg, fmt); va_start (arg, fmt);
_dl_debug_vdprintf (_dl_debug_fd, -1, fmt, arg); _dl_debug_vdprintf (GL(dl_debug_fd), -1, fmt, arg);
va_end (arg); va_end (arg);
} }

View File

@ -259,7 +259,7 @@ dl_open_worker (void *a)
#endif #endif
/* Only do lazy relocation if `LD_BIND_NOW' is not set. */ /* Only do lazy relocation if `LD_BIND_NOW' is not set. */
lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && _dl_lazy; lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && GL(dl_lazy);
/* Relocate the objects loaded. We do this in reverse order so that copy /* Relocate the objects loaded. We do this in reverse order so that copy
relocs of earlier objects overwrite the data written by later objects. */ relocs of earlier objects overwrite the data written by later objects. */
@ -400,7 +400,7 @@ _dl_open (const char *file, int mode, const void *caller)
_dl_signal_error (EINVAL, file, NULL, N_("invalid mode for dlopen()")); _dl_signal_error (EINVAL, file, NULL, N_("invalid mode for dlopen()"));
/* Make sure we are alone. */ /* Make sure we are alone. */
__libc_lock_lock_recursive (_dl_load_lock); __libc_lock_lock_recursive (GL(dl_load_lock));
args.file = file; args.file = file;
args.mode = mode; args.mode = mode;
@ -414,7 +414,7 @@ _dl_open (const char *file, int mode, const void *caller)
#endif #endif
/* Release the lock. */ /* Release the lock. */
__libc_lock_unlock_recursive (_dl_load_lock); __libc_lock_unlock_recursive (GL(dl_load_lock));
if (errstring) if (errstring)
{ {

View File

@ -27,6 +27,7 @@
#include <ldsodefs.h> #include <ldsodefs.h>
#include <dl-machine.h> #include <dl-machine.h>
#include <bits/libc-lock.h> #include <bits/libc-lock.h>
#include <dl-cache.h>
#include <dl-librecon.h> #include <dl-librecon.h>
#include <unsecvars.h> #include <unsecvars.h>
#include <hp-timing.h> #include <hp-timing.h>
@ -119,6 +120,11 @@ struct r_search_path_elem *_dl_init_all_dirs;
/* The object to be initialized first. */ /* The object to be initialized first. */
struct link_map *_dl_initfirst; struct link_map *_dl_initfirst;
/* Descriptor to write debug messages to. */
int _dl_debug_fd = STDERR_FILENO;
int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
/* During the program run we must not modify the global data of /* During the program run we must not modify the global data of
loaded shared object simultanously in two threads. Therefore we loaded shared object simultanously in two threads. Therefore we
protect `_dl_open' and `_dl_close' in dl-close.c. protect `_dl_open' and `_dl_close' in dl-close.c.

View File

@ -160,7 +160,7 @@ FCT (const char *undef_name, unsigned long int hash, const ElfW(Sym) *ref,
{ {
case STB_WEAK: case STB_WEAK:
/* Weak definition. Use this value if we don't find another. */ /* Weak definition. Use this value if we don't find another. */
if (__builtin_expect (_dl_dynamic_weak, 0)) if (__builtin_expect (GL(dl_dynamic_weak), 0))
{ {
if (! result->s) if (! result->s)
{ {

View File

@ -33,6 +33,8 @@
#include "dynamic-link.h" #include "dynamic-link.h"
#include "dl-librecon.h" #include "dl-librecon.h"
#include <unsecvars.h> #include <unsecvars.h>
#include <dl-cache.h>
#include <dl-procinfo.h>
#include <assert.h> #include <assert.h>
@ -58,25 +60,6 @@ static void process_envvars (enum mode *modep);
int _dl_argc; int _dl_argc;
char **_dl_argv; char **_dl_argv;
unsigned int _dl_skip_args; /* Nonzero if we were run directly. */ unsigned int _dl_skip_args; /* Nonzero if we were run directly. */
fpu_control_t _dl_fpu_control = _FPU_DEFAULT;
int _dl_lazy = 1;
/* XXX I know about at least one case where we depend on the old weak
behavior (it has to do with librt). Until we get DSO groups implemented
we have to make this the default. Bummer. --drepper */
#if 0
int _dl_dynamic_weak;
#else
int _dl_dynamic_weak = 1;
#endif
/* During the program run we must not modify the global data of
loaded shared object simultanously in two threads. Therefore we
protect `_dl_open' and `_dl_close' in dl-close.c.
This must be a recursive lock since the initializer function of
the loaded object might as well require a call to this function.
At this time it is not anymore a problem to modify the tables. */
__libc_lock_define_initialized_recursive (, _dl_load_lock)
/* Set nonzero during loading and initialization of executable and /* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This libraries, cleared before the executable's entry point runs. This
@ -89,7 +72,26 @@ int _dl_starting_up;
/* This is the structure which defines all variables global to ld.so /* This is the structure which defines all variables global to ld.so
(except those which cannot be added for some reason). */ (except those which cannot be added for some reason). */
struct rtld_global _rtld_global; struct rtld_global _rtld_global =
{
._dl_debug_fd = STDERR_FILENO,
#if 1
/* XXX I know about at least one case where we depend on the old
weak behavior (it has to do with librt). Until we get DSO
groups implemented we have to make this the default.
Bummer. --drepper */
._dl_dynamic_weak = 1,
#endif
._dl_lazy = 1,
._dl_fpu_control = _FPU_DEFAULT,
._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
._dl_hwcap_mask = HWCAP_IMPORTANT,
._dl_load_lock = _LIBC_LOCK_RECURSIVE_INITIALIZER
};
/* There must only be the definition in ld.so itself. */
#ifdef HAVE_PROTECTED
asm (".protected _rtld_global");
#endif
static void dl_main (const ElfW(Phdr) *phdr, static void dl_main (const ElfW(Phdr) *phdr,
@ -418,7 +420,7 @@ dl_main (const ElfW(Phdr) *phdr,
if (! strcmp (_dl_argv[1], "--list")) if (! strcmp (_dl_argv[1], "--list"))
{ {
mode = list; mode = list;
_dl_lazy = -1; /* This means do no dependency analysis. */ GL(dl_lazy) = -1; /* This means do no dependency analysis. */
++_dl_skip_args; ++_dl_skip_args;
--_dl_argc; --_dl_argc;
@ -941,13 +943,13 @@ of this helper program; chances are you did not intend to run this program.\n\
else else
{ {
/* If LD_WARN is set warn about undefined symbols. */ /* If LD_WARN is set warn about undefined symbols. */
if (_dl_lazy >= 0 && GL(dl_verbose)) if (GL(dl_lazy) >= 0 && GL(dl_verbose))
{ {
/* We have to do symbol dependency testing. */ /* We have to do symbol dependency testing. */
struct relocate_args args; struct relocate_args args;
struct link_map *l; struct link_map *l;
args.lazy = _dl_lazy; args.lazy = GL(dl_lazy);
l = GL(dl_loaded); l = GL(dl_loaded);
while (l->l_next) while (l->l_next)
@ -1142,7 +1144,7 @@ of this helper program; chances are you did not intend to run this program.\n\
#endif #endif
/* If we are profiling we also must do lazy reloaction. */ /* If we are profiling we also must do lazy reloaction. */
_dl_lazy |= consider_profiling; GL(dl_lazy) |= consider_profiling;
l = GL(dl_loaded); l = GL(dl_loaded);
while (l->l_next) while (l->l_next)
@ -1163,7 +1165,7 @@ of this helper program; chances are you did not intend to run this program.\n\
} }
if (l != &GL(dl_rtld_map)) if (l != &GL(dl_rtld_map))
_dl_relocate_object (l, l->l_scope, _dl_lazy, consider_profiling); _dl_relocate_object (l, l->l_scope, GL(dl_lazy), consider_profiling);
l = l->l_prev; l = l->l_prev;
} }
@ -1327,6 +1329,7 @@ process_dl_debug (const char *dl_debug)
&& debopts[cnt].name[len] == '\0') && debopts[cnt].name[len] == '\0')
{ {
GL(dl_debug_mask) |= debopts[cnt].mask; GL(dl_debug_mask) |= debopts[cnt].mask;
any_debug = 1;
break; break;
} }
@ -1428,7 +1431,7 @@ process_envvars (enum mode *modep)
/* Do we bind early? */ /* Do we bind early? */
if (memcmp (envline, "BIND_NOW", 8) == 0) if (memcmp (envline, "BIND_NOW", 8) == 0)
{ {
_dl_lazy = envline[9] == '\0'; GL(dl_lazy) = envline[9] == '\0';
break; break;
} }
if (memcmp (envline, "BIND_NOT", 8) == 0) if (memcmp (envline, "BIND_NOT", 8) == 0)
@ -1471,7 +1474,7 @@ process_envvars (enum mode *modep)
} }
if (memcmp (envline, "DYNAMIC_WEAK", 12) == 0) if (memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
_dl_dynamic_weak = 1; GL(dl_dynamic_weak) = 1;
break; break;
case 14: case 14:
@ -1553,10 +1556,10 @@ process_envvars (enum mode *modep)
*--startp = '.'; *--startp = '.';
startp = memcpy (startp - name_len, debug_output, name_len); startp = memcpy (startp - name_len, debug_output, name_len);
_dl_debug_fd = __open (startp, flags, DEFFILEMODE); GL(dl_debug_fd) = __open (startp, flags, DEFFILEMODE);
if (_dl_debug_fd == -1) if (GL(dl_debug_fd) == -1)
/* We use standard output if opening the file failed. */ /* We use standard output if opening the file failed. */
_dl_debug_fd = STDOUT_FILENO; GL(dl_debug_fd) = STDOUT_FILENO;
} }
} }

View File

@ -1,3 +1,8 @@
2002-01-31 Ulrich Drepper <drepper@redhat.com>
* pthread.c: _dl_cpuclock_offset is not any longer a global variable
in SHARED code, use GL(dl_cpuclock_offset).
2002-01-28 Andreas Jaeger <aj@suse.de> 2002-01-28 Andreas Jaeger <aj@suse.de>
* sysdeps/mips/pspinlock.c (__pthread_spin_init): Clear *LOCK to * sysdeps/mips/pspinlock.c (__pthread_spin_init): Clear *LOCK to

View File

@ -30,6 +30,7 @@
#include "internals.h" #include "internals.h"
#include "spinlock.h" #include "spinlock.h"
#include "restart.h" #include "restart.h"
#include <ldsodefs.h>
/* We need the global/static resolver state here. */ /* We need the global/static resolver state here. */
#include <resolv.h> #include <resolv.h>
@ -225,11 +226,6 @@ static void pthread_handle_sigcancel(int sig);
static void pthread_handle_sigrestart(int sig); static void pthread_handle_sigrestart(int sig);
static void pthread_handle_sigdebug(int sig); static void pthread_handle_sigdebug(int sig);
/* CPU clock handling. */
#if HP_TIMING_AVAIL
extern hp_timing_t _dl_cpuclock_offset;
#endif
/* Signal numbers used for the communication. /* Signal numbers used for the communication.
In these variables we keep track of the used variables. If the In these variables we keep track of the used variables. If the
platform does not support any real-time signals we will define the platform does not support any real-time signals we will define the
@ -396,7 +392,7 @@ __pthread_initialize_minimal(void)
INIT_THREAD_SELF(&__pthread_initial_thread, 0); INIT_THREAD_SELF(&__pthread_initial_thread, 0);
#endif #endif
#if HP_TIMING_AVAIL #if HP_TIMING_AVAIL
__pthread_initial_thread.p_cpuclock_offset = _dl_cpuclock_offset; __pthread_initial_thread.p_cpuclock_offset = GL(dl_cpuclock_offset);
#endif #endif
} }

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. Alpha version. /* Machine-dependent ELF dynamic relocation inline functions. Alpha version.
Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Richard Henderson <rth@tamu.edu>. Contributed by Richard Henderson <rth@tamu.edu>.
@ -110,11 +110,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
*(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_profile; *(Elf64_Addr *)(plt + 16) = (Elf64_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
{ {
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
} }
@ -328,7 +328,7 @@ $fixup_stack_ret: \n\
" RTLD_START_SPECIAL_INIT " \n\ " RTLD_START_SPECIAL_INIT " \n\
/* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\ /* Call _dl_init(_dl_loaded, argc, argv, envp) to run \n\
initializers. */ \n\ initializers. */ \n\
ldq $16, _dl_loaded \n\ ldq $16, _rtld_global \n\
ldq $17, 0($sp) \n\ ldq $17, 0($sp) \n\
lda $18, 8($sp) \n\ lda $18, 8($sp) \n\
s8addq $17, 8, $19 \n\ s8addq $17, 8, $19 \n\
@ -498,7 +498,7 @@ elf_machine_rela (struct link_map *map,
{ {
unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info); unsigned long int const r_type = ELF64_R_TYPE (reloc->r_info);
#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC #if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED
/* This is defined in rtld.c, but nowhere in the static libc.a; make the /* This is defined in rtld.c, but nowhere in the static libc.a; make the
reference weak so static programs can still link. This declaration reference weak so static programs can still link. This declaration
cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP)
@ -515,7 +515,7 @@ elf_machine_rela (struct link_map *map,
{ {
# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC # if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC
/* Already done in dynamic linker. */ /* Already done in dynamic linker. */
if (map != &_dl_rtld_map) if (map != &GL(dl_rtld_map))
# endif # endif
{ {
/* XXX Make some timings. Maybe it's preverable to test for /* XXX Make some timings. Maybe it's preverable to test for

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. ARM version. /* Machine-dependent ELF dynamic relocation inline functions. ARM version.
Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -109,10 +109,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf32_Addr) &_dl_runtime_profile; got[2] = (Elf32_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
/* Say that we really want profiling and the timers are /* Say that we really want profiling and the timers are
started. */ started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
else else
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
@ -324,7 +324,7 @@ _dl_start_user:
.L_STACK_END: .L_STACK_END:
.word __libc_stack_end(GOT) .word __libc_stack_end(GOT)
.L_LOADED: .L_LOADED:
.word _dl_loaded(GOT) .word _rtld_global(GOT)
.previous\n\ .previous\n\
"); ");
@ -347,14 +347,12 @@ _dl_start_user:
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf32_Addr static inline Elf32_Addr
@ -452,7 +450,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size)) || (GL(dl_verbose) && sym->st_size < refsym->st_size))
{ {
const char *strtab; const char *strtab;
@ -484,7 +482,9 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
rtld.c contains the common defn for _dl_rtld_map, which rtld.c contains the common defn for _dl_rtld_map, which
is incompatible with a weak decl in the same file. */ is incompatible with a weak decl in the same file. */
# ifndef SHARED
weak_extern (_dl_rtld_map); weak_extern (_dl_rtld_map);
# endif
if (map == &_dl_rtld_map) if (map == &_dl_rtld_map)
/* Undo the relocation done here during bootstrapping. /* Undo the relocation done here during bootstrapping.
Now we will relocate it anew, possibly using a Now we will relocate it anew, possibly using a

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. CRIS version. /* Machine-dependent ELF dynamic relocation inline functions. CRIS version.
Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -106,11 +106,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf32_Addr) &_dl_runtime_profile; got[2] = (Elf32_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
{ {
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
} }
else else
@ -212,7 +212,7 @@ _dl_start_user:
move.d $sp,$r12 move.d $sp,$r12
addq 4,$r12 addq 4,$r12
; main_map: at _dl_loaded. ; main_map: at _dl_loaded.
move.d [$r0+_dl_loaded:GOT16],$r9 move.d [$r0+_rtld_global:GOT16],$r9
move.d [$r9],$r10 move.d [$r9],$r10
move.d _dl_init:PLTG,$r9 move.d _dl_init:PLTG,$r9
add.d $r0,$r9 add.d $r0,$r9
@ -246,14 +246,12 @@ _dl_start_user:
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf32_Addr static inline Elf32_Addr
@ -314,7 +312,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size)) || (GL(dl_verbose) && sym->st_size < refsym->st_size))
{ {
extern char **_dl_argv; extern char **_dl_argv;
const char *strtab; const char *strtab;

View File

@ -38,10 +38,6 @@ static size_t cachesize;
/* 1 if cache_data + PTR points into the cache. */ /* 1 if cache_data + PTR points into the cache. */
#define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size) #define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size)
/* This is the cache ID we expect. Normally it is 3 for glibc linked
binaries. */
int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
#define SEARCH_CACHE(cache) \ #define SEARCH_CACHE(cache) \
/* We use binary search since the table is sorted in the cache file. \ /* We use binary search since the table is sorted in the cache file. \
The first matching entry in the table is returned. \ The first matching entry in the table is returned. \
@ -111,12 +107,12 @@ do \
if (_dl_cache_check_flags (flags) \ if (_dl_cache_check_flags (flags) \
&& _dl_cache_verify_ptr (lib->value)) \ && _dl_cache_verify_ptr (lib->value)) \
{ \ { \
if (best == NULL || flags == _dl_correct_cache_id) \ if (best == NULL || flags == GL(dl_correct_cache_id)) \
{ \ { \
HWCAP_CHECK; \ HWCAP_CHECK; \
best = cache_data + lib->value; \ best = cache_data + lib->value; \
\ \
if (flags == _dl_correct_cache_id) \ if (flags == GL(dl_correct_cache_id)) \
/* We've found an exact match for the shared \ /* We've found an exact match for the shared \
object and no general `ELF' release. Stop \ object and no general `ELF' release. Stop \
searching. */ \ searching. */ \

View File

@ -1,5 +1,5 @@
/* Find path of executable. /* Find path of executable.
Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
@ -25,9 +25,6 @@
#include <dl-dst.h> #include <dl-dst.h>
/* Generally it is not possible to implement this. We have to fall
back on a solution where the user provides the information. */
extern const char *_dl_origin_path;
const char * const char *
_dl_get_origin (void) _dl_get_origin (void)
@ -35,15 +32,15 @@ _dl_get_origin (void)
char *result = (char *) -1; char *result = (char *) -1;
/* We use the environment variable LD_ORIGIN_PATH. If it is set make /* We use the environment variable LD_ORIGIN_PATH. If it is set make
a copy and strip out trailing slashes. */ a copy and strip out trailing slashes. */
if (_dl_origin_path != NULL) if (GL(dl_origin_path) != NULL)
{ {
size_t len = strlen (_dl_origin_path); size_t len = strlen (GL(dl_origin_path));
result = malloc (len + 1); result = (char *) malloc (len + 1);
if (result == NULL) if (result == NULL)
result = (char *) -1; result = (char *) -1;
else else
{ {
char *cp = __mempcpy (result, _dl_origin_path, len); char *cp = __mempcpy (result, GL(dl_origin_path), len);
while (cp > result + 1 && cp[-1] == '/') while (cp > result + 1 && cp[-1] == '/')
--cp; --cp;
*cp = '\0'; *cp = '\0';

View File

@ -39,7 +39,6 @@
#include <hp-timing.h> #include <hp-timing.h>
extern char **_environ; extern char **_environ;
extern fpu_control_t _dl_fpu_control;
extern void _end; extern void _end;
/* Protect SUID program against misuse of file descriptors. */ /* Protect SUID program against misuse of file descriptors. */
@ -54,10 +53,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
/* This variable contains the lowest stack address ever used. */ /* This variable contains the lowest stack address ever used. */
void *__libc_stack_end; void *__libc_stack_end;
static ElfW(auxv_t) *_dl_auxv; static ElfW(auxv_t) *_dl_auxv;
//Xunsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT;
#if HP_TIMING_AVAIL
hp_timing_t _dl_cpuclock_offset;
#endif
#ifndef DL_FIND_ARG_COMPONENTS #ifndef DL_FIND_ARG_COMPONENTS
# define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \ # define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
@ -95,7 +90,7 @@ _dl_sysdep_start (void **start_argptr,
#endif #endif
#if HP_TIMING_AVAIL #if HP_TIMING_AVAIL
HP_TIMING_NOW (_dl_cpuclock_offset); HP_TIMING_NOW (GL(dl_cpuclock_offset));
#endif #endif
DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ, DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ,
@ -146,7 +141,7 @@ _dl_sysdep_start (void **start_argptr,
GL(dl_clktck) = av->a_un.a_val; GL(dl_clktck) = av->a_un.a_val;
break; break;
case AT_FPUCW: case AT_FPUCW:
_dl_fpu_control = av->a_un.a_val; GL(dl_fpu_control) = av->a_un.a_val;
break; break;
} }

View File

@ -29,10 +29,12 @@
#include <elf.h> #include <elf.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <fpu_control.h>
#include <sys/mman.h> #include <sys/mman.h>
#include <link.h> #include <link.h>
#include <dl-lookupcfg.h> #include <dl-lookupcfg.h>
#include <bits/libc-lock.h> #include <bits/libc-lock.h>
#include <hp-timing.h>
__BEGIN_DECLS __BEGIN_DECLS
@ -234,6 +236,15 @@ struct rtld_global
/* Cached value of `getpagesize ()'. */ /* Cached value of `getpagesize ()'. */
EXTERN size_t _dl_pagesize; EXTERN size_t _dl_pagesize;
/* During the program run we must not modify the global data of
loaded shared object simultanously in two threads. Therefore we
protect `_dl_open' and `_dl_close' in dl-close.c.
This must be a recursive lock since the initializer function of
the loaded object might as well require a call to this function.
At this time it is not anymore a problem to modify the tables. */
__libc_lock_define_recursive (EXTERN, _dl_load_lock)
/* OS version. */ /* OS version. */
EXTERN unsigned int _dl_osversion; EXTERN unsigned int _dl_osversion;
/* Platform name. */ /* Platform name. */
@ -251,12 +262,27 @@ struct rtld_global
/* If nonzero print warnings messages. */ /* If nonzero print warnings messages. */
EXTERN int _dl_verbose; EXTERN int _dl_verbose;
/* Do we do lazy relocations? */
EXTERN int _dl_lazy;
/* Nonzero if runtime lookups should not update the .got/.plt. */ /* Nonzero if runtime lookups should not update the .got/.plt. */
EXTERN int _dl_bind_not; EXTERN int _dl_bind_not;
/* Nonzero if references should be treated as weak during runtime
linking. */
EXTERN int _dl_dynamic_weak;
/* Default floating-point control word. */
EXTERN fpu_control_t _dl_fpu_control;
/* The object to be initialized first. */ /* The object to be initialized first. */
EXTERN struct link_map *_dl_initfirst; EXTERN struct link_map *_dl_initfirst;
/* Start time on CPU clock. */
#if HP_TIMING_AVAIL
EXTERN hp_timing_t _dl_cpuclock_offset;
#endif
/* Name of the shared object to be profiled (if any). */ /* Name of the shared object to be profiled (if any). */
EXTERN const char *_dl_profile; EXTERN const char *_dl_profile;
/* Map of shared object to be profiled. */ /* Map of shared object to be profiled. */
@ -268,7 +294,7 @@ struct rtld_global
/* Name of the object we want to trace the prelinking. */ /* Name of the object we want to trace the prelinking. */
EXTERN const char *_dl_trace_prelink; EXTERN const char *_dl_trace_prelink;
/* Expect cache ID. */ /* Expected cache ID. */
EXTERN int _dl_correct_cache_id; EXTERN int _dl_correct_cache_id;
/* Counters for the number of relocations performed. */ /* Counters for the number of relocations performed. */
@ -291,6 +317,9 @@ struct rtld_global
EXTERN struct r_search_path_elem *_dl_all_dirs; EXTERN struct r_search_path_elem *_dl_all_dirs;
EXTERN struct r_search_path_elem *_dl_init_all_dirs; EXTERN struct r_search_path_elem *_dl_init_all_dirs;
/* File descriptor to write debug messages to. */
EXTERN int _dl_debug_fd;
/* Structure describing the dynamic linker itself. */ /* Structure describing the dynamic linker itself. */
EXTERN struct link_map _dl_rtld_map; EXTERN struct link_map _dl_rtld_map;
#ifdef SHARED #ifdef SHARED
@ -303,22 +332,9 @@ extern struct rtld_global _rtld_global;
extern int _dl_argc; extern int _dl_argc;
extern char **_dl_argv; extern char **_dl_argv;
/* Do we do lazy relocations? */
extern int _dl_lazy;
/* The array with message we print as a last resort. */ /* The array with message we print as a last resort. */
extern const char _dl_out_of_memory[]; extern const char _dl_out_of_memory[];
/* File descriptor to write debug messages to. */
extern int _dl_debug_fd;
/* Nonzero if references should be treated as weak during runtime
linking.
XXX Once we can set the default for this variable to zero move it
into _rtld_global. */
extern int _dl_dynamic_weak;
/* OS-dependent function to open the zero-fill device. */ /* OS-dependent function to open the zero-fill device. */
extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */ extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */

View File

@ -1,5 +1,5 @@
/* Make dynamic PLABELs for function pointers. HPPA version. /* Make dynamic PLABELs for function pointers. HPPA version.
Copyright (C) 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -44,10 +44,9 @@ static int __hppa_fptr_lock = 1;
#ifdef MAP_ANON #ifdef MAP_ANON
/* The fd is not examined when using MAP_ANON. */ /* The fd is not examined when using MAP_ANON. */
#define ANONFD -1 # define ANONFD -1
#else #else
extern int _dl_zerofd; # define ANONFD GL(dl_zerofd)
#define ANONFD _dl_zerofd
#endif #endif
struct hppa_fptr __boot_ldso_fptr[HPPA_BOOT_FPTR_SIZE]; struct hppa_fptr __boot_ldso_fptr[HPPA_BOOT_FPTR_SIZE];
@ -95,10 +94,10 @@ __hppa_make_fptr (const struct link_map *sym_map, Elf32_Addr value,
{ {
#ifndef MAP_ANON #ifndef MAP_ANON
# define MAP_ANON 0 # define MAP_ANON 0
if (_dl_zerofd == -1) if (GL(dl_zerofd) == -1)
{ {
_dl_zerofd = _dl_sysdep_open_zero_fill (); GL(dl_zerofd) = _dl_sysdep_open_zero_fill ();
if (_dl_zerofd == -1) if (GL(dl_zerofd) == -1)
{ {
__close (fd); __close (fd);
_dl_signal_error (errno, NULL, NULL, _dl_signal_error (errno, NULL, NULL,
@ -107,11 +106,11 @@ __hppa_make_fptr (const struct link_map *sym_map, Elf32_Addr value,
} }
#endif #endif
__fptr_next = __mmap (0, _dl_pagesize, PROT_READ | PROT_WRITE, __fptr_next = __mmap (0, GL(dl_pagesize), PROT_READ | PROT_WRITE,
MAP_ANON | MAP_PRIVATE, ANONFD, 0); MAP_ANON | MAP_PRIVATE, ANONFD, 0);
if (__fptr_next == MAP_FAILED) if (__fptr_next == MAP_FAILED)
_dl_signal_error(errno, NULL, NULL, "cannot map page for fptr"); _dl_signal_error(errno, NULL, NULL, "cannot map page for fptr");
__fptr_count = _dl_pagesize / sizeof (struct hppa_fptr); __fptr_count = GL(dl_pagesize) / sizeof (struct hppa_fptr);
} }
f = __fptr_next++; f = __fptr_next++;
__fptr_count--; __fptr_count--;

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version. /* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version.
Copyright (C) 1995,1996,1997,1999,2000,2001 Free Software Foundation, Inc. Copyright (C) 1995-1997,1999,2000,2001,2002 Free Software Foundation, Inc.
Contributed by David Huggins-Daines <dhd@debian.org> Contributed by David Huggins-Daines <dhd@debian.org>
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -227,12 +227,12 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
((unsigned long) &_dl_runtime_resolve & ~3))->func; ((unsigned long) &_dl_runtime_resolve & ~3))->func;
else else
{ {
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
{ {
/* This is the object we are looking for. Say that /* This is the object we are looking for. Say that
we really want profiling and the timers are we really want profiling and the timers are
started. */ started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
got[-2] = got[-2] =
(Elf32_Addr) ((struct hppa_fptr *) (Elf32_Addr) ((struct hppa_fptr *)
@ -362,8 +362,8 @@ asm ( \
" stw %r24,-44(%sp)\n" \ " stw %r24,-44(%sp)\n" \
\ \
".Lnofix:\n" \ ".Lnofix:\n" \
" addil LT'_dl_loaded,%r19\n" \ " addil LT'_rtld_global,%r19\n" \
" ldw RT'_dl_loaded(%r1),%r26\n" \ " ldw RT'_rtld_global(%r1),%r26\n" \
" bl set_dp, %r2\n" \ " bl set_dp, %r2\n" \
" ldw 0(%r26),%r26\n" \ " ldw 0(%r26),%r26\n" \
\ \
@ -488,13 +488,13 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
struct link_map *sym_map; struct link_map *sym_map;
Elf32_Addr value; Elf32_Addr value;
#ifndef RTLD_BOOTSTRAP #if !defined RTLD_BOOTSTRAP && !defined SHARED
/* This is defined in rtld.c, but nowhere in the static libc.a; make the /* This is defined in rtld.c, but nowhere in the static libc.a; make the
reference weak so static programs can still link. This declaration reference weak so static programs can still link. This declaration
cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP)
because rtld.c contains the common defn for _dl_rtld_map, which is because rtld.c contains the common defn for _dl_rtld_map, which is
incompatible with a weak decl in the same file. */ incompatible with a weak decl in the same file. */
weak_extern (_dl_rtld_map); weak_extern (GL(dl_rtld_map));
#endif #endif
/* RESOLVE_MAP will return a null value for undefined syms, and /* RESOLVE_MAP will return a null value for undefined syms, and
@ -527,7 +527,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
other ones will have their values reset. In particular, other ones will have their values reset. In particular,
__fptr_next will be reset, sometimes causing endless loops in __fptr_next will be reset, sometimes causing endless loops in
__hppa_make_fptr(). So don't do that. */ __hppa_make_fptr(). So don't do that. */
if (map == &_dl_rtld_map) if (map == &GL(dl_rtld_map))
return; return;
#endif #endif
/* .eh_frame can have unaligned relocs. */ /* .eh_frame can have unaligned relocs. */
@ -604,7 +604,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
break; break;
if (__builtin_expect (sym->st_size > refsym->st_size, 0) if (__builtin_expect (sym->st_size > refsym->st_size, 0)
|| (__builtin_expect (sym->st_size < refsym->st_size, 0) || (__builtin_expect (sym->st_size < refsym->st_size, 0)
&& __builtin_expect (_dl_verbose, 0))) && __builtin_expect (GL(dl_verbose), 0)))
{ {
const char *strtab; const char *strtab;

View File

@ -328,8 +328,10 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
(i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the
common defn for _dl_rtld_map, which is incompatible with a common defn for _dl_rtld_map, which is incompatible with a
weak decl in the same file. */ weak decl in the same file. */
# ifndef SHARED
weak_extern (_dl_rtld_map); weak_extern (_dl_rtld_map);
if (map != &_dl_rtld_map) /* Already done in rtld itself. */ # endif
if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
# endif # endif
*reloc_addr += map->l_addr; *reloc_addr += map->l_addr;
} }

View File

@ -1,5 +0,0 @@
ld {
GLIBC_2.2.3 {
_dl_cpuclock_offset;
}
}

View File

@ -4,7 +4,4 @@ ld {
_dl_symbol_address; _dl_unmap; _dl_lookup_address; _dl_symbol_address; _dl_unmap; _dl_lookup_address;
_dl_function_address; _dl_function_address;
} }
GLIBC_2.2.3 {
_dl_cpuclock_offset;
}
} }

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. IA-64 version. /* Machine-dependent ELF dynamic relocation inline functions. IA-64 version.
Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1995,1996,1997,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -508,7 +508,7 @@ elf_machine_rela (struct link_map *map,
const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info);
Elf64_Addr value; Elf64_Addr value;
#if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC #if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED
/* This is defined in rtld.c, but nowhere in the static libc.a; make the /* This is defined in rtld.c, but nowhere in the static libc.a; make the
reference weak so static programs can still link. This declaration reference weak so static programs can still link. This declaration
cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP)

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. m68k version. /* Machine-dependent ELF dynamic relocation inline functions. m68k version.
Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -85,11 +85,11 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf32_Addr) &_dl_runtime_profile; got[2] = (Elf32_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
{ {
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
} }
else else
@ -176,7 +176,7 @@ _dl_start_user:
pea 8(%sp, %d1*4) pea 8(%sp, %d1*4)
pea 8(%sp) pea 8(%sp)
move.l %d1, -(%sp) move.l %d1, -(%sp)
move.l ([_dl_loaded@GOT.w, %a5]), -(%sp) move.l ([_rtld_global@GOT.w, %a5]), -(%sp)
jbsr _dl_init@PLTPC jbsr _dl_init@PLTPC
addq.l #8, %sp addq.l #8, %sp
addq.l #8, %sp addq.l #8, %sp
@ -251,7 +251,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (sym->st_size < refsym->st_size && _dl_verbose)) || (sym->st_size < refsym->st_size && GL(dl_verbose)))
{ {
extern char **_dl_argv; extern char **_dl_argv;
const char *strtab; const char *strtab;

View File

@ -1,5 +1,5 @@
/* Operating system support for run-time dynamic linker. Hurd version. /* Operating system support for run-time dynamic linker. Hurd version.
Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. Copyright (C) 1995,96,97,98,99,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -52,7 +52,6 @@ int __libc_multiple_libcs = 0; /* Defining this here avoids the inclusion
of init-first. */ of init-first. */
/* This variable containts the lowest stack address ever used. */ /* This variable containts the lowest stack address ever used. */
void *__libc_stack_end; void *__libc_stack_end;
unsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT;
struct hurd_startup_data *_dl_hurd_data; struct hurd_startup_data *_dl_hurd_data;
@ -236,7 +235,7 @@ unfmh(); /* XXX */
__mach_init (); __mach_init ();
/* Initialize frequently used global variable. */ /* Initialize frequently used global variable. */
_dl_pagesize = __getpagesize (); GL(dl_pagesize) = __getpagesize ();
fmh(); /* XXX */ fmh(); /* XXX */

View File

@ -216,7 +216,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
} }
{ {
struct link_map *l = _dl_loaded; struct link_map *l = GL(dl_loaded);
while (l) while (l)
{ {
@ -441,7 +441,7 @@ _dl_start_user:\n\
# Save back the modified argument count.\n\ # Save back the modified argument count.\n\
sw $4, 0($29)\n\ sw $4, 0($29)\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\ 1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
lw $4, _dl_loaded\n\ lw $4, _rtld_global\n\
lw $5, 0($29)\n\ lw $5, 0($29)\n\
la $6, 4($29)\n\ la $6, 4($29)\n\
sll $7, $5, 2\n\ sll $7, $5, 2\n\
@ -477,14 +477,14 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
{ {
const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info);
#ifndef RTLD_BOOTSTRAP #if !defined RTLD_BOOTSTRAP && !defined SHARED
/* This is defined in rtld.c, but nowhere in the static libc.a; /* This is defined in rtld.c, but nowhere in the static libc.a;
make the reference weak so static programs can still link. This make the reference weak so static programs can still link. This
declaration cannot be done when compiling rtld.c (i.e. #ifdef declaration cannot be done when compiling rtld.c (i.e. #ifdef
RTLD_BOOTSTRAP) because rtld.c contains the common defn for RTLD_BOOTSTRAP) because rtld.c contains the common defn for
_dl_rtld_map, which is incompatible with a weak decl in the same _dl_rtld_map, which is incompatible with a weak decl in the same
file. */ file. */
weak_extern (_dl_rtld_map); weak_extern (GL(dl_rtld_map));
#endif #endif
switch (r_type) switch (r_type)
@ -501,7 +501,7 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
if (symidx < gotsym) if (symidx < gotsym)
{ {
#ifndef RTLD_BOOTSTRAP #ifndef RTLD_BOOTSTRAP
if (map != &_dl_rtld_map) if (map != &GL(dl_rtld_map))
#endif #endif
*reloc_addr += sym->st_value + map->l_addr; *reloc_addr += sym->st_value + map->l_addr;
} }
@ -520,7 +520,7 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
} }
else else
#ifndef RTLD_BOOTSTRAP #ifndef RTLD_BOOTSTRAP
if (map != &_dl_rtld_map) if (map != &GL(dl_rtld_map))
#endif #endif
*reloc_addr += map->l_addr; *reloc_addr += map->l_addr;
} }
@ -561,7 +561,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
({ \ ({ \
const ElfW(Sym) *ref = sym; \ const ElfW(Sym) *ref = sym; \
const struct r_found_version *version \ const struct r_found_version *version \
= vernum ? &map->l_versions [vernum [sym_index]] : NULL; \ = vernum ? &map->l_versions[vernum[sym_index]] : NULL; \
ElfW(Addr) value; \ ElfW(Addr) value; \
value = RESOLVE (&ref, version, R_MIPS_REL32); \ value = RESOLVE (&ref, version, R_MIPS_REL32); \
(ref)? value + ref->st_value: 0; \ (ref)? value + ref->st_value: 0; \
@ -576,7 +576,7 @@ elf_machine_got_rel (struct link_map *map, int lazy)
n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val; n = map->l_info[DT_MIPS (LOCAL_GOTNO)]->d_un.d_val;
/* The dynamic linker's local got entries have already been relocated. */ /* The dynamic linker's local got entries have already been relocated. */
if (map != &_dl_rtld_map) if (map != &GL(dl_rtld_map))
{ {
/* got[0] is reserved. got[1] is also reserved for the dynamic object /* got[0] is reserved. got[1] is also reserved for the dynamic object
generated by gnu ld. Skip these reserved entries from relocation. */ generated by gnu ld. Skip these reserved entries from relocation. */

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. MIPS64 version. /* Machine-dependent ELF dynamic relocation inline functions. MIPS64 version.
Copyright (C) 1996, 1997, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1996,1997,1999,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>. Contributed by Kazumoto Kojima <kkojima@info.kanagawa-u.ac.jp>.
@ -289,7 +289,7 @@ elf_machine_runtime_link_map (ElfW(Addr) gpreg, ElfW(Addr) stub_pc)
} }
{ {
struct link_map *l = _dl_loaded; struct link_map *l = GL(dl_loaded);
while (l) while (l)
{ {
@ -480,7 +480,7 @@ _dl_start_user:\n\
# Save back the modified argument count.\n\ # Save back the modified argument count.\n\
sd $4, 0($29)\n\ sd $4, 0($29)\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\ 1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
ld $4, _dl_loaded\n\ ld $4, _rtld_global\n\
ld $5, 0($29)\n\ ld $5, 0($29)\n\
dla $6, 4($29)\n\ dla $6, 4($29)\n\
dla $7, 8($29)\n\ dla $7, 8($29)\n\
@ -492,7 +492,7 @@ _dl_start_user:\n\
dla $31, _dl_fini\n\ dla $31, _dl_fini\n\
# Jump to the user entry point.\n\ # Jump to the user entry point.\n\
1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\ 1: # Call _dl_init (struct link_map *main_map, int argc, char **argv, char **env) \n\
lw $4, _dl_loaded\n\ lw $4, _rtld_global\n\
lw $5, 0($29)\n\ lw $5, 0($29)\n\
la $6, 4($29)\n\ la $6, 4($29)\n\
la $7, 8($29)\n\ la $7, 8($29)\n\
@ -553,8 +553,10 @@ elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc,
RTLD_BOOTSTRAP) because rtld.c contains the common defn for RTLD_BOOTSTRAP) because rtld.c contains the common defn for
_dl_rtld_map, which is incompatible with a weak decl in the same _dl_rtld_map, which is incompatible with a weak decl in the same
file. */ file. */
weak_extern (_dl_rtld_map); # ifndef SHARED
if (map == &_dl_rtld_map) weak_extern (GL(dl_rtld_map));
# endif
if (map == &GL(dl_rtld_map))
/* Undo the relocation done here during bootstrapping. Now we will /* Undo the relocation done here during bootstrapping. Now we will
relocate it anew, possibly using a binding found in the user relocate it anew, possibly using a binding found in the user
program or a loaded library rather than the dynamic linker's program or a loaded library rather than the dynamic linker's

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation functions. PowerPC version. /* Machine-dependent ELF dynamic relocation functions. PowerPC version.
Copyright (C) 1995,96,97,98,99,2000,2001 Free Software Foundation, Inc. Copyright (C) 1995-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -112,11 +112,11 @@ __elf_preferred_address(struct link_map *loader, size_t maplength,
be superceded by the program's load address). */ be superceded by the program's load address). */
low = 0x0003FFFF; low = 0x0003FFFF;
high = 0x70000000; high = 0x70000000;
for (l = _dl_loaded; l; l = l->l_next) for (l = GL(dl_loaded); l; l = l->l_next)
{ {
ElfW(Addr) mapstart, mapend; ElfW(Addr) mapstart, mapend;
mapstart = l->l_map_start & ~(_dl_pagesize - 1); mapstart = l->l_map_start & ~(GL(dl_pagesize) - 1);
mapend = l->l_map_end | (_dl_pagesize - 1); mapend = l->l_map_end | (GL(dl_pagesize) - 1);
assert (mapend > mapstart); assert (mapend > mapstart);
/* Prefer gaps below the main executable, note that l == /* Prefer gaps below the main executable, note that l ==
@ -137,7 +137,7 @@ __elf_preferred_address(struct link_map *loader, size_t maplength,
} }
high -= 0x10000; /* Allow some room between objects. */ high -= 0x10000; /* Allow some room between objects. */
maplength = (maplength | (_dl_pagesize-1)) + 1; maplength = (maplength | (GL(dl_pagesize) - 1)) + 1;
if (high <= low || high - low < maplength ) if (high <= low || high - low < maplength )
return 0; return 0;
return high - maplength; /* Both high and maplength are page-aligned. */ return high - maplength; /* Both high and maplength are page-aligned. */
@ -235,10 +235,10 @@ __elf_machine_runtime_setup (struct link_map *map, int lazy, int profile)
: _dl_runtime_resolve); : _dl_runtime_resolve);
Elf32_Word offset; Elf32_Word offset;
if (profile && _dl_name_match_p (_dl_profile, map)) if (profile && _dl_name_match_p (GL(dl_profile), map))
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = map; GL(dl_profile_map) = map;
/* For the long entries, subtract off data_words. */ /* For the long entries, subtract off data_words. */
tramp[0] = OPCODE_ADDIS_HI (11, 11, -data_words); tramp[0] = OPCODE_ADDIS_HI (11, 11, -data_words);
@ -467,7 +467,7 @@ __process_machine_rela (struct link_map *map,
found. */ found. */
return; return;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size)) || (GL(dl_verbose) && sym->st_size < refsym->st_size))
{ {
const char *strtab; const char *strtab;

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF startup code. PowerPC version. /* Machine-dependent ELF startup code. PowerPC version.
Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Copyright (C) 1995-2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -52,7 +52,7 @@ ENTRY(_dl_start_user)
/* the address of _start in r30, */ /* the address of _start in r30, */
mr r30,r3 mr r30,r3
/* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */ /* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28. */
lwz r28,_dl_loaded@got(r31) lwz r28,_rtld_global@got(r31)
lwz r29,_dl_argc@got(r31) lwz r29,_dl_argc@got(r31)
lwz r27,_dl_argv@got(r31) lwz r27,_dl_argv@got(r31)

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1998,2000,01,02 Free Software Foundation, Inc. /* Copyright (C) 1998,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -96,7 +96,7 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
/* Call the initializer of the libc. */ /* Call the initializer of the libc. */
#ifdef SHARED #ifdef SHARED
if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ninitialize libc\n\n"); _dl_debug_printf ("\ninitialize libc\n\n");
#endif #endif
__libc_init_first (argc, argv, __environ); __libc_init_first (argc, argv, __environ);
@ -107,14 +107,14 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
/* Call the initializer of the program, if any. */ /* Call the initializer of the program, if any. */
#ifdef SHARED #ifdef SHARED
if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]); _dl_debug_printf ("\ninitialize program: %s\n\n", argv[0]);
#endif #endif
if (stinfo->init) if (stinfo->init)
stinfo->init (argc, argv, __environ, auxvec); stinfo->init (argc, argv, __environ, auxvec);
#ifdef SHARED #ifdef SHARED
if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ntransferring control: %s\n\n", argv[0]); _dl_debug_printf ("\ntransferring control: %s\n\n", argv[0]);
#endif #endif

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. S390 Version. /* Machine-dependent ELF dynamic relocation inline functions. S390 Version.
Copyright (C) 2000, 2001 Free Software Foundation, Inc. Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Carl Pederson & Martin Schwidefsky. Contributed by Carl Pederson & Martin Schwidefsky.
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -112,10 +112,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf32_Addr) &_dl_runtime_profile; got[2] = (Elf32_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
else else
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
@ -287,7 +287,7 @@ _dl_start_user:\n\
# Call the function to run the initializers.\n\ # Call the function to run the initializers.\n\
# Load the parameters:\n\ # Load the parameters:\n\
# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
l %r2,_dl_loaded@GOT(%r12)\n\ l %r2,_rtld_global@GOT(%r12)\n\
l %r2,0(%r2)\n\ l %r2,0(%r2)\n\
l %r3,96(%r15)\n\ l %r3,96(%r15)\n\
la %r4,100(%r15)\n\ la %r4,100(%r15)\n\
@ -333,14 +333,12 @@ _dl_start_user:\n\
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf32_Addr static inline Elf32_Addr
@ -401,7 +399,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
break; break;
if (__builtin_expect (sym->st_size > refsym->st_size, 0) if (__builtin_expect (sym->st_size > refsym->st_size, 0)
|| (__builtin_expect (sym->st_size < refsym->st_size, 0) || (__builtin_expect (sym->st_size < refsym->st_size, 0)
&& __builtin_expect (_dl_verbose, 0))) && __builtin_expect (GL(dl_verbose), 0)))
{ {
const char *strtab; const char *strtab;

View File

@ -1,6 +1,6 @@
/* Machine-dependent ELF dynamic relocation inline functions. /* Machine-dependent ELF dynamic relocation inline functions.
64 bit S/390 Version. 64 bit S/390 Version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
This file is part of the GNU C Library. This file is part of the GNU C Library.
@ -105,10 +105,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf64_Addr) &_dl_runtime_profile; got[2] = (Elf64_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
else else
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
@ -262,7 +262,7 @@ _dl_start_user:\n\
# Call the function to run the initializers.\n\ # Call the function to run the initializers.\n\
# Load the parameters:\n\ # Load the parameters:\n\
# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\ # (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
lghi %r2,_dl_loaded@GOT lghi %r2,_rtld_global@GOT
lg %r2,0(%r2,%r12)\n\ lg %r2,0(%r2,%r12)\n\
lg %r2,0(%r2)\n\ lg %r2,0(%r2)\n\
lg %r3,160(%r15)\n\ lg %r3,160(%r15)\n\
@ -302,14 +302,12 @@ _dl_start_user:\n\
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf64_Addr static inline Elf64_Addr
@ -369,7 +367,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
break; break;
if (__builtin_expect (sym->st_size > refsym->st_size, 0) if (__builtin_expect (sym->st_size > refsym->st_size, 0)
|| (__builtin_expect (sym->st_size < refsym->st_size, 0) || (__builtin_expect (sym->st_size < refsym->st_size, 0)
&& __builtin_expect (_dl_verbose, 0))) && __builtin_expect (GL(dl_verbose), 0)))
{ {
const char *strtab; const char *strtab;

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. SH version. /* Machine-dependent ELF dynamic relocation inline functions. SH version.
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -105,7 +105,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf32_Addr) &_dl_runtime_profile; got[2] = (Elf32_Addr) &_dl_runtime_profile;
/* Say that we really want profiling and the timers are started. */ /* Say that we really want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
else else
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
@ -388,7 +388,7 @@ _dl_start_user:\n\
.L_dl_init:\n\ .L_dl_init:\n\
.long _dl_init@PLT\n\ .long _dl_init@PLT\n\
.L_dl_loaded:\n\ .L_dl_loaded:\n\
.long _dl_loaded@GOT\n\ .long _rtld_global@GOT\n\
.L_dl_starting_up:\n\ .L_dl_starting_up:\n\
.long _dl_starting_up@GOT\n\ .long _dl_starting_up@GOT\n\
.L_dl_fini:\n\ .L_dl_fini:\n\
@ -411,14 +411,12 @@ _dl_start_user:\n\
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf32_Addr static inline Elf32_Addr
@ -481,7 +479,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
if (__builtin_expect (r_type == R_SH_RELATIVE, 0)) if (__builtin_expect (r_type == R_SH_RELATIVE, 0))
{ {
#ifndef RTLD_BOOTSTRAP #ifndef RTLD_BOOTSTRAP
if (map != &_dl_rtld_map) /* Already done in rtld itself. */ if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
#endif #endif
{ {
if (reloc->r_addend) if (reloc->r_addend)
@ -515,7 +513,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (sym->st_size < refsym->st_size && _dl_verbose)) || (sym->st_size < erefsym->st_size && GL(dl_verbose)))
{ {
const char *strtab; const char *strtab;
@ -542,8 +540,10 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) because
rtld.c contains the common defn for _dl_rtld_map, which rtld.c contains the common defn for _dl_rtld_map, which
is incompatible with a weak decl in the same file. */ is incompatible with a weak decl in the same file. */
weak_extern (_dl_rtld_map); # ifndef SHARED
if (map == &_dl_rtld_map) weak_extern (GL(dl_rtld_map));
# endif
if (map == &GL(dl_rtld_map))
/* Undo the relocation done here during bootstrapping. /* Undo the relocation done here during bootstrapping.
Now we will relocate it anew, possibly using a Now we will relocate it anew, possibly using a
binding found in the user program or a loaded library binding found in the user program or a loaded library

View File

@ -1,6 +0,0 @@
ld {
GLIBC_2.2.3 {
# If this symbol is ever available on SPARC it was introduced in 2.2.3.
_dl_cpuclock_offset;
}
}

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. SPARC version. /* Machine-dependent ELF dynamic relocation inline functions. SPARC version.
Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Copyright (C) 1996-2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -44,7 +44,8 @@
/* Use a different preload file when running in 32-bit emulation mode /* Use a different preload file when running in 32-bit emulation mode
on a 64-bit host. */ on a 64-bit host. */
#define LD_SO_PRELOAD ((_dl_hwcap & HWCAP_SPARC_V9) ? "/etc/ld.so.preload32" \ #define LD_SO_PRELOAD ((GL(dl_hwcap) & HWCAP_SPARC_V9) \
? "/etc/ld.so.preload32" \
: "/etc/ld.so.preload") : "/etc/ld.so.preload")
@ -57,13 +58,15 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr)
else if (ehdr->e_machine == EM_SPARC32PLUS) else if (ehdr->e_machine == EM_SPARC32PLUS)
{ {
unsigned long *hwcap; unsigned long *hwcap;
#ifndef SHARED
weak_extern (_dl_hwcap); weak_extern (_dl_hwcap);
weak_extern (_dl_hwcap_mask); weak_extern (_dl_hwcap_mask);
#endif
hwcap = WEAKADDR(_dl_hwcap); hwcap = WEAKADDR (GL(dl_hwcap));
/* XXX The following is wrong! Dave Miller rejected to implement it /* XXX The following is wrong! Dave Miller rejected to implement it
correctly. If this causes problems shoot *him*! */ correctly. If this causes problems shoot *him*! */
return hwcap == NULL || (*hwcap & _dl_hwcap_mask & HWCAP_SPARC_V9); return hwcap == NULL || (*hwcap & GL(dl_hwcap_mask) & HWCAP_SPARC_V9);
} }
else else
return 0; return 0;
@ -124,8 +127,8 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
rfunc = (Elf32_Addr) &_dl_runtime_profile; rfunc = (Elf32_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
/* The beginning of the PLT does: /* The beginning of the PLT does:
@ -154,8 +157,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
Elf32_Rela *relaend Elf32_Rela *relaend
= (Elf32_Rela *) ((char *) rela = (Elf32_Rela *) ((char *) rela
+ l->l_info[DT_PLTRELSZ]->d_un.d_val); + l->l_info[DT_PLTRELSZ]->d_un.d_val);
#ifndef SHARED
weak_extern (_dl_hwcap); weak_extern (_dl_hwcap);
hwcap = WEAKADDR(_dl_hwcap); #endif
hwcap = WEAKADDR (GL(dl_hwcap));
do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH)); do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));
/* prelink must ensure there are no R_SPARC_NONE relocs left /* prelink must ensure there are no R_SPARC_NONE relocs left
@ -307,9 +312,9 @@ _dl_start_user:
bne 23b bne 23b
add %i1, 8, %i1 add %i1, 8, %i1
/* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */ /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */
3: sethi %hi(_dl_loaded), %o0 3: sethi %hi(_rtld_global), %o0
add %sp, 23*4, %o2 add %sp, 23*4, %o2
orcc %o0, %lo(_dl_loaded), %o0 orcc %o0, %lo(_rtld_global), %o0
sll %i5, 2, %o3 sll %i5, 2, %o3
ld [%l7+%o0], %o0 ld [%l7+%o0], %o0
add %o3, 4, %o3 add %o3, 4, %o3
@ -337,15 +342,17 @@ sparc_fixup_plt (const Elf32_Rela *reloc, Elf32_Addr *reloc_addr,
functionality on those cpu's that implement it. */ functionality on those cpu's that implement it. */
unsigned long *hwcap; unsigned long *hwcap;
int do_flush; int do_flush;
# ifndef SHARED
weak_extern (_dl_hwcap); weak_extern (_dl_hwcap);
hwcap = WEAKADDR(_dl_hwcap); # endif
hwcap = WEAKADDR (GL(dl_hwcap));
do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH)); do_flush = (!hwcap || (*hwcap & HWCAP_SPARC_FLUSH));
#else #else
/* Unfortunately, this is necessary, so that we can ensure /* Unfortunately, this is necessary, so that we can ensure
ld.so will not execute corrupt PLT entry instructions. */ ld.so will not execute corrupt PLT entry instructions. */
const int do_flush = 1; const int do_flush = 1;
#endif #endif
if (0 && disp >= -0x800000 && disp < 0x800000) if (0 && disp >= -0x800000 && disp < 0x800000)
{ {
/* Don't need to worry about thread safety. We're writing just one /* Don't need to worry about thread safety. We're writing just one
@ -451,7 +458,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size)) || (GL(dl_verbose) && sym->st_size < refsym->st_size))
{ {
extern char **_dl_argv; extern char **_dl_argv;
const char *strtab; const char *strtab;

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version. /* Machine-dependent ELF dynamic relocation inline functions. Sparc64 version.
Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -284,7 +284,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
found. */ found. */
break; break;
if (sym->st_size > refsym->st_size if (sym->st_size > refsym->st_size
|| (_dl_verbose && sym->st_size < refsym->st_size)) || (GL(dl_verbose) && sym->st_size < refsym->st_size))
{ {
extern char **_dl_argv; extern char **_dl_argv;
const char *strtab; const char *strtab;
@ -498,8 +498,8 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
res0_addr = (Elf64_Addr) &_dl_runtime_profile_0; res0_addr = (Elf64_Addr) &_dl_runtime_profile_0;
res1_addr = (Elf64_Addr) &_dl_runtime_profile_1; res1_addr = (Elf64_Addr) &_dl_runtime_profile_1;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
/* PLT0 looks like: /* PLT0 looks like:
@ -745,9 +745,9 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
" add %i1, 16, %i1\n" \ " add %i1, 16, %i1\n" \
" stx %l5, [%l4]\n" \ " stx %l5, [%l4]\n" \
" /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \ " /* %o0 = _dl_loaded, %o1 = argc, %o2 = argv, %o3 = envp. */\n" \
"2: sethi %hi(_dl_loaded), %o0\n" \ "2: sethi %hi(_rtld_global), %o0\n" \
" add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \ " add %sp, " __S(STACK_BIAS) " + 23*8, %o2\n" \
" orcc %o0, %lo(_dl_loaded), %o0\n" \ " orcc %o0, %lo(_rtld_global), %o0\n" \
" sllx %i5, 3, %o3\n" \ " sllx %i5, 3, %o3\n" \
" ldx [%l7 + %o0], %o0\n" \ " ldx [%l7 + %o0], %o0\n" \
" add %o3, 8, %o3\n" \ " add %o3, 8, %o3\n" \

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -21,7 +21,7 @@
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include <libc-internal.h> #include <libc-internal.h>
#include <hp-timing.h> #include <ldsodefs.h>
#if HP_TIMING_AVAIL #if HP_TIMING_AVAIL
@ -31,10 +31,6 @@
static hp_timing_t freq; static hp_timing_t freq;
/* We need the starting time for the process. */
extern hp_timing_t _dl_cpuclock_offset;
/* This function is defined in the thread library. */ /* This function is defined in the thread library. */
extern int __pthread_clock_gettime (hp_timing_t freq, struct timespec *tp) extern int __pthread_clock_gettime (hp_timing_t freq, struct timespec *tp)
__attribute__ ((__weak__)); __attribute__ ((__weak__));
@ -86,7 +82,7 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
HP_TIMING_NOW (tsc); HP_TIMING_NOW (tsc);
/* Compute the offset since the start time of the process. */ /* Compute the offset since the start time of the process. */
tsc -= _dl_cpuclock_offset; tsc -= GL(dl_cpuclock_offset);
/* Compute the seconds. */ /* Compute the seconds. */
tp->tv_sec = tsc / freq; tp->tv_sec = tsc / freq;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. /* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -20,6 +20,7 @@
#include <time.h> #include <time.h>
#include <sys/time.h> #include <sys/time.h>
#include <libc-internal.h> #include <libc-internal.h>
#include <ldsodefs.h>
#if HP_TIMING_AVAIL #if HP_TIMING_AVAIL
@ -29,10 +30,6 @@
static hp_timing_t freq; static hp_timing_t freq;
/* We need the starting time for the process. */
extern hp_timing_t _dl_cpuclock_offset;
/* This function is defined in the thread library. */ /* This function is defined in the thread library. */
extern void __pthread_clock_settime (hp_timing_t offset) extern void __pthread_clock_settime (hp_timing_t offset)
__attribute__ ((__weak__)); __attribute__ ((__weak__));
@ -92,7 +89,7 @@ clock_settime (clockid_t clock_id, const struct timespec *tp)
/* Determine the offset and use it as the new base value. */ /* Determine the offset and use it as the new base value. */
if (clock_id != CLOCK_THREAD_CPUTIME_ID if (clock_id != CLOCK_THREAD_CPUTIME_ID
|| __pthread_clock_settime == NULL) || __pthread_clock_settime == NULL)
_dl_cpuclock_offset = tsc - usertime; GL(dl_cpuclock_offset) = tsc - usertime;
else else
__pthread_clock_settime (tsc - usertime); __pthread_clock_settime (tsc - usertime);

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the XCOFF startup code. AIX version. /* Initialization code run first thing by the XCOFF startup code. AIX version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -73,10 +73,6 @@ extern int __loadx (int flag, void *module, void *arg1, void *arg2,
/* Needed by setenv */ /* Needed by setenv */
char **__environ; char **__environ;
/* Needed by dl-support.c */
/* XXX stubbing out dl-support.c for now..
size_t _dl_pagesize = 0; */
/* /*
* Find __rtinit symbol * Find __rtinit symbol
* *
@ -277,7 +273,7 @@ __libc_start_main (void)
/* Call the initializer of the program, if any. */ /* Call the initializer of the program, if any. */
#ifdef SHARED #ifdef SHARED
if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ninitialize program: %s\n\n", _dl_debug_printf ("\ninitialize program: %s\n\n",
__libc_start_data.argv[0]); __libc_start_data.argv[0]);
#endif #endif
@ -285,7 +281,7 @@ __libc_start_main (void)
(*__libc_start_data.init) (); (*__libc_start_data.init) ();
#ifdef SHARED #ifdef SHARED
if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GL(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ntransferring control: %s\n\n", _dl_debug_printf ("\ntransferring control: %s\n\n",
__libc_start_data.argv[0]); __libc_start_data.argv[0]);
#endif #endif

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the XCOFF startup code. AIX version. /* Initialization code run first thing by the XCOFF startup code. AIX version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -74,10 +74,6 @@ extern int __loadx (int flag, void *module, void *arg1, void *arg2,
/* Needed by setenv */ /* Needed by setenv */
char **__environ; char **__environ;
/* Needed by dl-support.c */
/* XXX stubbing out dl-support.c for now..
size_t _dl_pagesize = 0; */
/* /*
Find __rtinit symbol Find __rtinit symbol

View File

@ -1,5 +1,5 @@
/* Variable initialization. IA-64 version. /* Variable initialization. IA-64 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -19,8 +19,6 @@
#include <ldsodefs.h> #include <ldsodefs.h>
extern int _dl_clktck;
#ifdef SHARED #ifdef SHARED
void void
@ -44,8 +42,8 @@ __libc_lock_define_initialized_recursive (static, _dl_static_lock)
static void *variables[] = static void *variables[] =
{ {
&_dl_pagesize, &GL(dl_pagesize),
&_dl_clktck &GL(dl_clktck)
}; };
void void

View File

@ -1,5 +1,5 @@
/* Initialization code run first thing by the ELF startup code. Linux version. /* Initialization code run first thing by the ELF startup code. Linux version.
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -28,8 +28,8 @@
#include "kernel-features.h" #include "kernel-features.h"
#include <libc-internal.h> #include <libc-internal.h>
#include <ldsodefs.h>
#ifndef SHARED #ifndef SHARED
# include <ldsodefs.h>
# include "dl-osinfo.h" # include "dl-osinfo.h"
#endif #endif
@ -41,7 +41,6 @@ static void init (int, char **, char **) __attribute__ ((unused));
extern int _dl_starting_up; extern int _dl_starting_up;
weak_extern (_dl_starting_up) weak_extern (_dl_starting_up)
extern fpu_control_t _dl_fpu_control;
extern int _dl_fpu_control_set; extern int _dl_fpu_control_set;
/* Set nonzero if we have to be prepared for more then one libc being /* Set nonzero if we have to be prepared for more then one libc being
@ -78,7 +77,7 @@ init (int argc, char **argv, char **envp)
kernel would use a different value. (In a static program we kernel would use a different value. (In a static program we
don't have this information.) */ don't have this information.) */
#ifdef SHARED #ifdef SHARED
if (__fpu_control != _dl_fpu_control) if (__fpu_control != GL(dl_fpu_control))
#endif #endif
__setfpucw (__fpu_control); __setfpucw (__fpu_control);
} }

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2000 Free Software Foundation, Inc. /* Copyright (C) 2000, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Andreas Schwab <schwab@suse.de>. Contributed by Andreas Schwab <schwab@suse.de>.
@ -21,6 +21,7 @@
#include <sys/param.h> #include <sys/param.h>
#include <errno.h> #include <errno.h>
#include <ldsodefs.h>
#include <sysdep.h> #include <sysdep.h>
#include <sys/syscall.h> #include <sys/syscall.h>
@ -28,13 +29,12 @@
int int
__getpagesize () __getpagesize ()
{ {
extern size_t _dl_pagesize;
#ifdef __NR_getpagesize #ifdef __NR_getpagesize
int result; int result;
#endif #endif
if (_dl_pagesize != 0) if (GL(dl_pagesize) != 0)
return _dl_pagesize; return GL(dl_pagesize);
#ifdef __NR_getpagesize #ifdef __NR_getpagesize
result = INLINE_SYSCALL (getpagesize, 0); result = INLINE_SYSCALL (getpagesize, 0);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1997 Free Software Foundation, Inc. /* Copyright (C) 1997, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -18,6 +18,7 @@
#include <unistd.h> #include <unistd.h>
#include <sys/param.h> #include <sys/param.h>
#include <ldsodefs.h>
/* Return the system page size. This value will either be 4k or 8k depending /* Return the system page size. This value will either be 4k or 8k depending
on whether or not we are running on Sparc v9 machine. */ on whether or not we are running on Sparc v9 machine. */
@ -26,16 +27,14 @@
via the AT_PAGESZ auxiliary argument. If we are a static program, we via the AT_PAGESZ auxiliary argument. If we are a static program, we
use the getpagesize system call. */ use the getpagesize system call. */
size_t _dl_pagesize;
extern size_t __syscall_getpagesize(void); extern size_t __syscall_getpagesize(void);
int int
__getpagesize () __getpagesize ()
{ {
if (_dl_pagesize == 0) if (GL(dl_pagesize) == 0)
_dl_pagesize = __syscall_getpagesize(); GL(dl_pagesize) = __syscall_getpagesize();
return _dl_pagesize; return GL(dl_pagesize);
} }
weak_alias (__getpagesize, getpagesize) weak_alias (__getpagesize, getpagesize)

View File

@ -1,5 +0,0 @@
ld {
GLIBC_2.2.5 {
_dl_cpuclock_offset;
}
}

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF dynamic relocation inline functions. x86-64 version. /* Machine-dependent ELF dynamic relocation inline functions. x86-64 version.
Copyright (C) 2001 Free Software Foundation, Inc. Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>. Contributed by Andreas Jaeger <aj@suse.de>.
@ -96,10 +96,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
{ {
got[2] = (Elf64_Addr) &_dl_runtime_profile; got[2] = (Elf64_Addr) &_dl_runtime_profile;
if (_dl_name_match_p (_dl_profile, l)) if (_dl_name_match_p (GL(dl_profile), l))
/* This is the object we are looking for. Say that we really /* This is the object we are looking for. Say that we really
want profiling and the timers are started. */ want profiling and the timers are started. */
_dl_profile_map = l; GL(dl_profile_map) = l;
} }
else else
/* This function will get called to fix up the GOT entry indicated by /* This function will get called to fix up the GOT entry indicated by
@ -250,7 +250,7 @@ _dl_start_user:\n\
# argc -> rsi\n\ # argc -> rsi\n\
movq %rdx, %rsi\n\ movq %rdx, %rsi\n\
# _dl_loaded -> rdi\n\ # _dl_loaded -> rdi\n\
movq _dl_loaded@GOTPCREL(%rip), %rdi\n\ movq _rtld_global@GOTPCREL(%rip), %rdi\n\
movq (%rdi), %rdi\n\ movq (%rdi), %rdi\n\
# env -> rcx\n\ # env -> rcx\n\
leaq 16(%rsp,%rdx,8), %rcx\n\ leaq 16(%rsp,%rdx,8), %rcx\n\
@ -283,14 +283,12 @@ _dl_start_user:\n\
_dl_sysdep_start. */ _dl_sysdep_start. */
#define DL_PLATFORM_INIT dl_platform_init () #define DL_PLATFORM_INIT dl_platform_init ()
extern const char *_dl_platform;
static inline void __attribute__ ((unused)) static inline void __attribute__ ((unused))
dl_platform_init (void) dl_platform_init (void)
{ {
if (_dl_platform != NULL && *_dl_platform == '\0') if (GL(dl_platform) != NULL && *GL(dl_platform) == '\0')
/* Avoid an empty string which would disturb us. */ /* Avoid an empty string which would disturb us. */
_dl_platform = NULL; GL(dl_platform) = NULL;
} }
static inline Elf64_Addr static inline Elf64_Addr
@ -334,8 +332,10 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
(i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the (i.e. #ifdef RTLD_BOOTSTRAP) because rtld.c contains the
common defn for _dl_rtld_map, which is incompatible with a common defn for _dl_rtld_map, which is incompatible with a
weak decl in the same file. */ weak decl in the same file. */
weak_extern (_dl_rtld_map); # ifndef SHARED
if (map != &_dl_rtld_map) /* Already done in rtld itself. */ weak_extern (GL(dl_rtld_map));
# endif
if (map != &GL(dl_rtld_map)) /* Already done in rtld itself. */
# endif # endif
*reloc_addr = map->l_addr + reloc->r_addend; *reloc_addr = map->l_addr + reloc->r_addend;
} }
@ -379,7 +379,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
break; break;
if (__builtin_expect (sym->st_size > refsym->st_size, 0) if (__builtin_expect (sym->st_size > refsym->st_size, 0)
|| (__builtin_expect (sym->st_size < refsym->st_size, 0) || (__builtin_expect (sym->st_size < refsym->st_size, 0)
&& _dl_verbose)) && GL(dl_verbose)))
{ {
const char *strtab; const char *strtab;