diff options
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | elf/rtld.c | 9 | ||||
-rw-r--r-- | sysdeps/generic/dl-sysdep.c | 2 | ||||
-rw-r--r-- | sysdeps/generic/entry.h | 2 | ||||
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 2 | ||||
-rw-r--r-- | sysdeps/i386/dl-machine.h | 9 |
6 files changed, 27 insertions, 11 deletions
@@ -1,3 +1,17 @@ +2002-03-14 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-minimal.c (malloc): Declare _end as hidden. + (__errno_location): New function. Declare errno as hidden. + * elf/rtld.c (_dl_argc): Define as hidden. + (_dl_skip_args): Define as hidden. + (_begin, _end): Declare as hidden. + * sysdeps/generic/dl-sysdep.c (_end): Declare as hidden. + * sysdeps/generic/entry.h (_start): Declare as hidden. + * sysdeps/generic/ldsodefs.h (_dl_argc): Declare as hidden. + * sysdeps/i386/dl-machine.h (elf_machine_runtime_setup): Declare + _dl_runtime_resolve and _dl_runtime_profile as hidden. + (RTLD_START): Use GOTOFF to access _dl_skip_args and _dl_fini. + 2002-03-14 Roland McGrath <roland@frob.com> * Makerules ($(common-objpfx)Versions.v.i): Depend on abi-versions.h. diff --git a/elf/rtld.c b/elf/rtld.c index 97acf20b60..57b9e5ff03 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -58,10 +58,12 @@ enum mode { normal, list, verify, trace }; all the entries. */ static void process_envvars (enum mode *modep); -int _dl_argc; +int _dl_argc attribute_hidden; char **_dl_argv = NULL; INTDEF(_dl_argv) -unsigned int _dl_skip_args; /* Nonzero if we were run directly. */ + +/* Nonzero if we were run directly. */ +unsigned int _dl_skip_args attribute_hidden; /* Set nonzero during loading and initialization of executable and libraries, cleared before the executable's entry point runs. This @@ -216,7 +218,8 @@ _dl_start_final (void *arg, struct link_map *bootstrap_map_p, way to do this so we use this trick. gcc never inlines functions which use `alloca'. */ ElfW(Addr) *start_addr = alloca (sizeof (ElfW(Addr))); - extern char _begin[], _end[]; + extern char _begin[] attribute_hidden; + extern char _end[] attribute_hidden; #ifdef USE_TLS ElfW(Ehdr) *ehdr; ElfW(Phdr) *phdr; diff --git a/sysdeps/generic/dl-sysdep.c b/sysdeps/generic/dl-sysdep.c index 45980ee974..36b1150ff7 100644 --- a/sysdeps/generic/dl-sysdep.c +++ b/sysdeps/generic/dl-sysdep.c @@ -39,7 +39,7 @@ #include <hp-timing.h> extern char **_environ; -extern void _end; +extern void _end attribute_hidden; /* Protect SUID program against misuse of file descriptors. */ extern void __libc_check_standard_fds (void); diff --git a/sysdeps/generic/entry.h b/sysdeps/generic/entry.h index 2f17ce8a4b..16d3e3045e 100644 --- a/sysdeps/generic/entry.h +++ b/sysdeps/generic/entry.h @@ -1,5 +1,5 @@ #ifndef __ASSEMBLY__ -extern void _start (void); +extern void _start (void) attribute_hidden; #endif #define ENTRY_POINT _start diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 4aa5621c19..d2dd3e60ec 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -392,7 +392,7 @@ extern struct rtld_global _rtld_local __rtld_local_attribute__; #undef EXTERN /* Parameters passed to the dynamic linker. */ -extern int _dl_argc; +extern int _dl_argc attribute_hidden; extern char **_dl_argv; #ifdef _RTLD_LOCAL extern char **_dl_argv_internal attribute_hidden; diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 3edfb00c0a..37ec7283be 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -79,8 +79,8 @@ static inline int __attribute__ ((unused)) elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) { Elf32_Addr *got; - extern void _dl_runtime_resolve (Elf32_Word); - extern void _dl_runtime_profile (Elf32_Word); + extern void _dl_runtime_resolve (Elf32_Word) attribute_hidden; + extern void _dl_runtime_profile (Elf32_Word) attribute_hidden; if (l->l_info[DT_JMPREL] && lazy) { @@ -223,8 +223,7 @@ _dl_start_user:\n\ movl %esp, (%eax)\n\ # See if we were run as a command with the executable file\n\ # name as an extra leading argument.\n\ - movl _dl_skip_args@GOT(%ebx), %eax\n\ - movl (%eax), %eax\n\ + movl _dl_skip_args@GOTOFF(%ebx), %eax\n\ # Pop the original argument count.\n\ popl %edx\n\ # Adjust the stack pointer to skip _dl_skip_args words.\n\ @@ -246,7 +245,7 @@ _dl_start_user:\n\ # Call the function to run the initializers.\n\ call _dl_init_internal@PLT\n\ # Pass our finalizer function to the user in %edx, as per ELF ABI.\n\ - movl _dl_fini@GOT(%ebx), %edx\n\ + leal _dl_fini@GOTOFF(%ebx), %edx\n\ # Jump to the user's entry point.\n\ jmp *%edi\n\ .previous\n\ |