diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-08-26 10:50:26 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-08-26 10:50:26 +0000 |
commit | 680254fe22215c1f41f247d085c5cac5783b73f5 (patch) | |
tree | b91211374166ef246d63137e39f7e1968cfb53c8 /sysdeps | |
parent | a711b01d34ca5de9857ca5d19235812674fccee6 (diff) | |
download | glibc-680254fe22215c1f41f247d085c5cac5783b73f5.zip glibc-680254fe22215c1f41f247d085c5cac5783b73f5.tar.gz glibc-680254fe22215c1f41f247d085c5cac5783b73f5.tar.bz2 |
Update.
* include/link.h (struct link_map): Add l_lookup_cache element.
* elf/dl-reloc.c (RESOLVE): Add symbol caching here.
(RESOLVE_MAP): Likewise.
(_dl_relocate_object): Remove cache initialization.
* elf/dl-lookup.c: Rip out cache handling code.
* sysdeps/generic/ldsodefs.h: Remove lookup_cache struct and variable
declarations.
* elf/dl-lookup.c (_dl_lookup_symbol): Reorder some conditions and
remove some __builtin_expect.
(_dl_lookup_versioned_symbol): Likewise.
R_386_RELATIVE handling for ld.so startup. Reduce RTLD_BOOTSTRAP
case to almost no code.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/ldsodefs.h | 15 | ||||
-rw-r--r-- | sysdeps/i386/dl-machine.h | 7 |
2 files changed, 5 insertions, 17 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h index 5e093fc..6d196c7 100644 --- a/sysdeps/generic/ldsodefs.h +++ b/sysdeps/generic/ldsodefs.h @@ -327,21 +327,6 @@ extern void _dl_map_object_deps (struct link_map *map, /* Cache the locations of MAP's hash table. */ extern void _dl_setup_hash (struct link_map *map) internal_function; -/* This holds symbol lookup cache. */ -struct lookup_cache - { - const ElfW(Sym) *sym; - struct link_map *map; - const struct r_found_version *version; - int noexec; - int noplt; - lookup_t value; - const ElfW(Sym) *ret; - }; - -extern struct lookup_cache _dl_lookup_cache; -extern struct lookup_cache _dl_lookup_cache_versioned; - /* Search loaded objects' symbol tables for a definition of the symbol referred to by UNDEF. *SYM is the symbol table entry containing the diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 53d8022..e7a1b10 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -334,13 +334,16 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, if (sym) value += sym->st_value; +#ifdef RTLD_BOOTSTRAP + assert (r_type == R_386_GLOB_DAT || r_type == R_386_JMP_SLOT); + *reloc_addr = value; +#else switch (r_type) { case R_386_GLOB_DAT: case R_386_JMP_SLOT: *reloc_addr = value; break; -#ifndef RTLD_BOOTSTRAP case R_386_32: *reloc_addr += value; break; @@ -372,8 +375,8 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, if we are still debugging. */ _dl_reloc_bad_type (map, r_type, 0); break; -#endif } +#endif } } |