mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
* 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:
59
ChangeLog
59
ChangeLog
@ -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
|
||||||
|
@ -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
112
configure
vendored
@ -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
|
||||||
|
@ -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
|
||||||
|
10
elf/Versions
10
elf/Versions
@ -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;
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
{
|
{
|
||||||
|
63
elf/rtld.c
63
elf/rtld.c
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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. */ \
|
||||||
|
@ -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';
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
@ -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
|
||||||
@ -46,8 +46,7 @@ static int __hppa_fptr_lock = 1;
|
|||||||
/* 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--;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
ld {
|
|
||||||
GLIBC_2.2.3 {
|
|
||||||
_dl_cpuclock_offset;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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 */
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
@ -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. */
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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,8 +342,10 @@ 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
|
||||||
@ -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;
|
||||||
|
@ -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" \
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
|
||||||
#ifndef SHARED
|
|
||||||
#include <ldsodefs.h>
|
#include <ldsodefs.h>
|
||||||
|
#ifndef SHARED
|
||||||
# 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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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)
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
ld {
|
|
||||||
GLIBC_2.2.5 {
|
|
||||||
_dl_cpuclock_offset;
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user