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>
* sysdeps/unix/make-syscalls.sh (emit_weak_aliases): Condition

View File

@ -182,6 +182,27 @@ check_match (const char *const undef_name,
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
in the unique symbol table, creating a new entry if necessary.
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,
const ElfW(Sym) *ref, const struct link_map *undef_map)
{
/* We have to determine whether we already found a
symbol with this name before. If not then we have to
add it to the search table. If we already found a
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;
}
/* We have to determine whether we already found a symbol with this
name before. If not then we have to add it to the search table.
If we already found a definition we have to use it. */
struct unique_sym_table *tab
= &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)
if (entries[idx].name != NULL)
enter (newentries, newsize, entries[idx].hashval,
entries[idx].name, entries[idx].sym,
entries[idx].map);
enter_unique_sym (newentries, newsize, entries[idx].hashval,
entries[idx].name, entries[idx].sym,
entries[idx].map);
tab->free (entries);
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)
enter (entries, size, new_hash, strtab + sym->st_name, ref,
enter_unique_sym (entries, size, new_hash, strtab + sym->st_name, ref,
undef_map);
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)
/* Make sure we don't unload this object by