Update MIPS dl-lookup.c.

This commit is contained in:
Joseph Myers 2011-05-13 10:11:25 +00:00
parent a32d0d808b
commit f1d4d4beaf
2 changed files with 24 additions and 27 deletions

View File

@ -1,3 +1,7 @@
2011-05-13 Joseph Myers <joseph@codesourcery.com>
* sysdeps/mips/dl-lookup.c: Update from generic version.
2011-05-10 Joseph Myers <joseph@codesourcery.com> 2011-05-10 Joseph Myers <joseph@codesourcery.com>
* sysdeps/mips/dl-lookup.c: Update from generic version. * sysdeps/mips/dl-lookup.c: Update from generic version.

View File

@ -329,39 +329,21 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
definition we have to use it. */ definition we have to use it. */
void enter (struct unique_sym *table, size_t size, void enter (struct unique_sym *table, size_t size,
unsigned int hash, const char *name, unsigned int hash, const char *name,
const ElfW(Sym) *sym, struct link_map *map) const ElfW(Sym) *sym, const struct link_map *map)
{ {
size_t idx = hash % size; size_t idx = hash % size;
size_t hash2 = 1 + hash % (size - 2); size_t hash2 = 1 + hash % (size - 2);
while (1) while (table[idx].name != NULL)
{ {
if (table[idx].name == NULL)
{
table[idx].hashval = hash;
table[idx].name = name;
if ((type_class & ELF_RTYPE_CLASS_COPY) != 0)
{
table[idx].sym = ref;
table[idx].map = undef_map;
}
else
{
table[idx].sym = sym;
table[idx].map = map;
if (map->l_type == lt_loaded)
/* Make sure we don't unload this object by
setting the appropriate flag. */
map->l_flags_1 |= DF_1_NODELETE;
}
return;
}
idx += hash2; idx += hash2;
if (idx >= size) if (idx >= size)
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
@ -467,8 +449,19 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
tab->free = free; tab->free = free;
} }
enter (entries, size, new_hash, strtab + sym->st_name, sym, if ((type_class & ELF_RTYPE_CLASS_COPY) != 0)
(struct link_map *) map); enter (entries, size, new_hash, strtab + sym->st_name, ref,
undef_map);
else
{
enter (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
setting the appropriate flag. */
((struct link_map *) map)->l_flags_1 |= DF_1_NODELETE;
}
++tab->n_elements; ++tab->n_elements;
__rtld_lock_unlock_recursive (tab->lock); __rtld_lock_unlock_recursive (tab->lock);