From 8d6468d0c8aa55b319ba70a83d3b092c292ef0b1 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 12 Jun 1996 01:54:21 +0000 Subject: Tue Jun 11 19:13:04 1996 Richard Henderson * elf/dl-close.c: Include for memcpy. * elf/dl-lookup.c: Same. * elf/elf.h: Add Elfxx_Symndx for symbol indices. * elf/dl-lookup.c (_dl_lookup_symbol): Use it. (_dl_setup_hash): Use it. * elf/link.h (struct link_map): Use it. * elf/rtld.c (_dl_start): Don't rely on pointer-to-first-arg hack for getting the argc/argv/envp block. Instead, make it the argument. sysdeps/i386/dl-machine.h (RTLD_START): Do that. sysdeps/m68k/dl-machine.h (RTLD_START): Same. * shlib-versions: Add version numbers for alpha-linux. To avoid user confusion, make them the same as i386-linux. * sysdeps/alpha/Makefile [subdir elf]: Add -mno-fp-regs to sysdep-CFLAGS so that _dl_runtime_resolve doesn't have to save them. Add -mbuild-constants to CFLAGS-rtld.c to that we can bootstrap without using literal data. * sysdeps/generic/dl-sysdep.c: Include for memcpy. Finish Elf32 -> ElfW migration. --- elf/dl-close.c | 1 + elf/dl-lookup.c | 7 ++++--- elf/elf.h | 4 ++++ elf/link.h | 4 ++-- elf/rtld.c | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) (limited to 'elf') diff --git a/elf/dl-close.c b/elf/dl-close.c index 69fdefac95..70d7ab4083 100644 --- a/elf/dl-close.c +++ b/elf/dl-close.c @@ -20,6 +20,7 @@ Cambridge, MA 02139, USA. */ #include #include #include +#include #include #include diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 5f1e6d03d9..bbccbc01ef 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -20,6 +20,7 @@ Cambridge, MA 02139, USA. */ #include #include #include +#include /* This is the hashing function specified by the ELF ABI. */ @@ -70,7 +71,7 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref, { const ElfW(Sym) *symtab; const char *strtab; - ElfW(Word) symidx; + ElfW(Symndx) symidx; map = (*scope)->l_searchlist[i]; @@ -149,8 +150,8 @@ _dl_lookup_symbol (const char *undef_name, const ElfW(Sym) **ref, void _dl_setup_hash (struct link_map *map) { - ElfW(Word) *hash = (void *) map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr; - ElfW(Word) nchain; + ElfW(Symndx) *hash = (void *)(map->l_addr + map->l_info[DT_HASH]->d_un.d_ptr); + ElfW(Symndx) nchain; map->l_nbuckets = *hash++; nchain = *hash++; map->l_buckets = hash; diff --git a/elf/elf.h b/elf/elf.h index f6d023d207..0a4ec55cc8 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -54,6 +54,10 @@ typedef unsigned int Elf64_Off __attribute__ ((mode (DI))); typedef unsigned int Elf32_Section __attribute__ ((mode (HI))); typedef unsigned int Elf64_Section __attribute__ ((mode (HI))); +/* Type of symbol indices. */ +typedef unsigned int Elf32_Symndx __attribute__ ((mode (SI))); +typedef unsigned int Elf64_Symndx __attribute__ ((mode (DI))); + /* The ELF file header. This appears at the start of every ELF file. */ diff --git a/elf/link.h b/elf/link.h index 89dfa2087f..6910445095 100644 --- a/elf/link.h +++ b/elf/link.h @@ -110,8 +110,8 @@ struct link_map struct link_map *l_loader; /* Symbol hash table. */ - ElfW(Word) l_nbuckets; - const ElfW(Word) *l_buckets, *l_chain; + ElfW(Symndx) l_nbuckets; + const ElfW(Symndx) *l_buckets, *l_chain; unsigned int l_opencount; /* Reference count for dlopen/dlclose. */ enum /* Where this object came from. */ diff --git a/elf/rtld.c b/elf/rtld.c index 66477274e5..c9ddfb5c63 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -101,7 +101,7 @@ _dl_start (void *arg) file access. It will call `dl_main' (below) to do all the real work of the dynamic linker, and then unwind our frame and run the user entry point on the same stack we entered on. */ - return _dl_sysdep_start (&arg, &dl_main); + return _dl_sysdep_start (arg, &dl_main); } -- cgit v1.2.3