summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--config.h.in4
-rw-r--r--elf/rtld.c4
-rwxr-xr-xsysdeps/i386/elf/configure5
-rw-r--r--sysdeps/i386/elf/configure.in4
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)