Remove unnecessarily nested function in do_lookup_unique.

This commit is contained in:
Roland McGrath 2014-10-08 15:18:02 -07:00
parent f7b425175c
commit 7b8fb2b8db
2 changed files with 36 additions and 27 deletions

View File

@ -1,3 +1,9 @@
2014-10-08 Kostya Serebryany <konstantin.s.serebryany@gmail.com>
Roland McGrath <roland@hack.frob.com>
* elf/dl-lookup.c (enter_unique_sym): New function, broken out of ...
(do_lookup_unique): ... local function 'enter' here; update callers.
2014-10-06 Joseph Myers <joseph@codesourcery.com> 2014-10-06 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Condition * sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Condition

View File

@ -182,6 +182,27 @@ check_match (const char *const undef_name,
return sym; return sym;
} }
/* Utility function for do_lookup_unique. Add a symbol to TABLE. */
static void
enter_unique_sym (struct unique_sym *table, size_t size,
unsigned int hash, const char *name,
const ElfW(Sym) *sym, const struct link_map *map)
{
size_t idx = hash % size;
size_t hash2 = 1 + hash % (size - 2);
while (table[idx].name != NULL)
{
idx += hash2;
if (idx >= size)
idx -= size;
}
table[idx].hashval = hash;
table[idx].name = name;
table[idx].sym = sym;
table[idx].map = map;
}
/* Utility function for do_lookup_x. Lookup an STB_GNU_UNIQUE symbol /* Utility function for do_lookup_x. Lookup an STB_GNU_UNIQUE symbol
in the unique symbol table, creating a new entry if necessary. in the unique symbol table, creating a new entry if necessary.
Return the matching symbol in RESULT. */ Return the matching symbol in RESULT. */
@ -191,28 +212,9 @@ do_lookup_unique (const char *undef_name, uint_fast32_t new_hash,
int type_class, const ElfW(Sym) *sym, const char *strtab, int type_class, const ElfW(Sym) *sym, const char *strtab,
const ElfW(Sym) *ref, const struct link_map *undef_map) const ElfW(Sym) *ref, const struct link_map *undef_map)
{ {
/* We have to determine whether we already found a /* We have to determine whether we already found a symbol with this
symbol with this name before. If not then we have to name before. If not then we have to add it to the search table.
add it to the search table. If we already found a If we already found a definition we have to use it. */
definition we have to use it. */
void enter (struct unique_sym *table, size_t size,
unsigned int hash, const char *name,
const ElfW(Sym) *sym, const struct link_map *map)
{
size_t idx = hash % size;
size_t hash2 = 1 + hash % (size - 2);
while (table[idx].name != NULL)
{
idx += hash2;
if (idx >= size)
idx -= size;
}
table[idx].hashval = hash;
table[idx].name = name;
table[idx].sym = sym;
table[idx].map = map;
}
struct unique_sym_table *tab struct unique_sym_table *tab
= &GL(dl_ns)[map->l_ns]._ns_unique_sym_table; = &GL(dl_ns)[map->l_ns]._ns_unique_sym_table;
@ -274,9 +276,9 @@ do_lookup_unique (const char *undef_name, uint_fast32_t new_hash,
for (idx = 0; idx < size; ++idx) for (idx = 0; idx < size; ++idx)
if (entries[idx].name != NULL) if (entries[idx].name != NULL)
enter (newentries, newsize, entries[idx].hashval, enter_unique_sym (newentries, newsize, entries[idx].hashval,
entries[idx].name, entries[idx].sym, entries[idx].name, entries[idx].sym,
entries[idx].map); entries[idx].map);
tab->free (entries); tab->free (entries);
tab->size = newsize; tab->size = newsize;
@ -317,11 +319,12 @@ do_lookup_unique (const char *undef_name, uint_fast32_t new_hash,
} }
if ((type_class & ELF_RTYPE_CLASS_COPY) != 0) if ((type_class & ELF_RTYPE_CLASS_COPY) != 0)
enter (entries, size, new_hash, strtab + sym->st_name, ref, enter_unique_sym (entries, size, new_hash, strtab + sym->st_name, ref,
undef_map); undef_map);
else else
{ {
enter (entries, size, new_hash, strtab + sym->st_name, sym, map); enter_unique_sym (entries, size,
new_hash, strtab + sym->st_name, sym, map);
if (map->l_type == lt_loaded) if (map->l_type == lt_loaded)
/* Make sure we don't unload this object by /* Make sure we don't unload this object by