diff options
author | Nick Kralevich <nnk@google.com> | 2012-04-09 12:50:17 -0700 |
---|---|---|
committer | Nick Kralevich <nnk@google.com> | 2012-04-09 12:50:17 -0700 |
commit | 61ff83475c6f3a3bb05a01ac89d668a331bfe9e9 (patch) | |
tree | bcd5da23d32a73c9fe88b054e14cbd597db19690 /linker | |
parent | 048822d6afa12683e693a459e6efa558a1f39d33 (diff) | |
download | bionic-61ff83475c6f3a3bb05a01ac89d668a331bfe9e9.zip bionic-61ff83475c6f3a3bb05a01ac89d668a331bfe9e9.tar.gz bionic-61ff83475c6f3a3bb05a01ac89d668a331bfe9e9.tar.bz2 |
linker: remove STB_LOCAL hack
The ARM static linker wasn't properly handling __exidx_start
and __exidx_end symbols. Now that the static linker has been fixed,
we don't need the dynamic linker to work around this problem.
Change-Id: Ic567122b6c7746cc016795e2befba2c6bd7c0478
Diffstat (limited to 'linker')
-rw-r--r-- | linker/linker.c | 37 |
1 files changed, 0 insertions, 37 deletions
diff --git a/linker/linker.c b/linker/linker.c index 9805b35..ac183fd 100644 --- a/linker/linker.c +++ b/linker/linker.c @@ -408,33 +408,6 @@ static Elf32_Sym *_elf_lookup(soinfo *si, unsigned hash, const char *name) return NULL; } -/* - * Essentially the same method as _elf_lookup() above, but only - * searches for LOCAL symbols - */ -static Elf32_Sym *_elf_lookup_local(soinfo *si, unsigned hash, const char *name) -{ - Elf32_Sym *symtab = si->symtab; - const char *strtab = si->strtab; - unsigned n = hash % si->nbucket;; - - TRACE_TYPE(LOOKUP, "%5d LOCAL SEARCH %s in %s@0x%08x %08x %d\n", pid, - name, si->name, si->base, hash, hash % si->nbucket); - for(n = si->bucket[hash % si->nbucket]; n != 0; n = si->chain[n]){ - Elf32_Sym *s = symtab + n; - if (strcmp(strtab + s->st_name, name)) continue; - if (ELF32_ST_BIND(s->st_info) != STB_LOCAL) continue; - /* no section == undefined */ - if(s->st_shndx == 0) continue; - - TRACE_TYPE(LOOKUP, "%5d FOUND LOCAL %s in %s (%08x) %d\n", pid, - name, si->name, s->st_value, s->st_size); - return s; - } - - return NULL; -} - static unsigned elfhash(const char *_name) { const unsigned char *name = (const unsigned char *) _name; @@ -458,16 +431,6 @@ _do_lookup(soinfo *si, const char *name, unsigned *base) soinfo *lsi = si; int i; - /* If we are trying to find a symbol for the linker itself, look - * for LOCAL symbols first. Avoid using LOCAL symbols for other - * shared libraries until we have a better understanding of what - * might break by doing so. */ - if (si->flags & FLAG_LINKER) { - s = _elf_lookup_local(si, elf_hash, name); - if(s != NULL) - goto done; - } - /* Look for symbols in the local scope (the object who is * searching). This happens with C++ templates on i386 for some * reason. |