diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | config.h.in | 4 | ||||
-rw-r--r-- | elf/rtld.c | 4 | ||||
-rwxr-xr-x | sysdeps/i386/elf/configure | 5 | ||||
-rw-r--r-- | sysdeps/i386/elf/configure.in | 4 |
5 files changed, 24 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 06ac25d389..7b21893b79 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2002-08-25 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/i386/elf/configure.in: Unconditionally define + PI_STATIC_AND_HIDDEN. + * elf/rtld.c (DONT_USE_BOOTSTRAP_MAP): Define only if + PI_STATIC_AND_HIDDEN is defined as well. + * config.h.in: Add PI_STATIC_AND_HIDDEN entry. + 2002-08-24 Ulrich Drepper <drepper@redhat.com> * sysdeps/ia64/bzero.S: Define __bzero as well. @@ -37,6 +45,7 @@ * elf/dl-load.c: Likewise. * iconv/iconvconfig.c: Likewise. * iconv/iconv_prog.c (process_block): Likewise. + * elf/rtld.c (dl_main): Likewise. * sysdeps/unix/sysv/linux/ia64/Makefile: Define _ASM_IA64_CURRENT_H macro to calm down the compiler. diff --git a/config.h.in b/config.h.in index 70d805b4f8..014d841187 100644 --- a/config.h.in +++ b/config.h.in @@ -135,6 +135,10 @@ sections. */ #undef HAVE_INITFINI_ARRAY +/* Define if the access to static and hidden variables is position independent + and does not need relocations. */ +#undef PI_STATIC_AND_HIDDEN + /* Defined to some form of __attribute__ ((...)) if the compiler supports a different, more efficient calling convention. */ diff --git a/elf/rtld.c b/elf/rtld.c index e74da5438c..69075053a7 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -129,7 +129,7 @@ TLS_INIT_HELPER is fine, too. The latter is impotant here. We can avoid setting up a temporary link map for ld.so if we can mark _rtld_global as hidden. */ -#ifdef HAVE_HIDDEN +#if defined PI_STATIC_AND_HIDDEN && defined HAVE_HIDDEN # define DONT_USE_BOOTSTRAP_MAP 1 #endif @@ -1215,7 +1215,7 @@ cannot allocate TLS data structures for initial thread"); } if (__builtin_expect (mode, trace) != trace) - for (i = 1; i < _dl_argc; ++i) + for (i = 1; i < (unsigned int) _dl_argc; ++i) { const ElfW(Sym) *ref = NULL; ElfW(Addr) loadbase; diff --git a/sysdeps/i386/elf/configure b/sysdeps/i386/elf/configure index 0e8003e236..b9e5d7e79e 100755 --- a/sysdeps/i386/elf/configure +++ b/sysdeps/i386/elf/configure @@ -37,3 +37,8 @@ EOF fi fi + +cat >> confdefs.h <<\EOF +#define PI_STATIC_AND_HIDDEN 1 +EOF + diff --git a/sysdeps/i386/elf/configure.in b/sysdeps/i386/elf/configure.in index e83555e92b..3c27d0171f 100644 --- a/sysdeps/i386/elf/configure.in +++ b/sysdeps/i386/elf/configure.in @@ -30,3 +30,7 @@ if test $libc_cv_386_tls = yes; then AC_DEFINE(HAVE_TLS_SUPPORT) fi fi + +dnl It is always possible to access static and hidden symbols in an +dnl position independent way. +AC_DEFINE(PI_STATIC_AND_HIDDEN) |