about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-08-26 10:50:26 +0000
committerUlrich Drepper <drepper@redhat.com>2001-08-26 10:50:26 +0000
commit680254fe22215c1f41f247d085c5cac5783b73f5 (patch)
treeb91211374166ef246d63137e39f7e1968cfb53c8 /sysdeps
parenta711b01d34ca5de9857ca5d19235812674fccee6 (diff)
downloadglibc-680254fe22215c1f41f247d085c5cac5783b73f5.tar.gz
glibc-680254fe22215c1f41f247d085c5cac5783b73f5.tar.xz
glibc-680254fe22215c1f41f247d085c5cac5783b73f5.zip
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.h15
-rw-r--r--sysdeps/i386/dl-machine.h7
2 files changed, 5 insertions, 17 deletions
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 5e093fcdd5..6d196c7379 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 53d802203a..e7a1b104ef 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
     }
 }