+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.
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
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;
#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);
#ifndef __ASSEMBLY__
-extern void _start (void);
+extern void _start (void) attribute_hidden;
#endif
#define ENTRY_POINT _start
#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;
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)
{
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\
# 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\