mirror of git://sourceware.org/git/glibc.git
Update MIPS dl-lookup.c.
This commit is contained in:
parent
a32d0d808b
commit
f1d4d4beaf
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue