libdyld: fix dyld_lookup algorithm.
This commit is contained in:
parent
d43e470e3c
commit
3f7f0a3151
|
@ -154,13 +154,11 @@ static unsigned long elf_hash(const unsigned char *name)
|
||||||
void *dyld_lookup(const char *symbol, struct dyld_info *info) {
|
void *dyld_lookup(const char *symbol, struct dyld_info *info) {
|
||||||
unsigned hash = elf_hash((const unsigned char*) symbol);
|
unsigned hash = elf_hash((const unsigned char*) symbol);
|
||||||
unsigned index = info->hash.bucket[hash % info->hash.nbucket];
|
unsigned index = info->hash.bucket[hash % info->hash.nbucket];
|
||||||
while(strcmp(&info->strtab[info->symtab[index].st_name], symbol) &&
|
while(strcmp(&info->strtab[info->symtab[index].st_name], symbol)) {
|
||||||
info->hash.chain[index] != STN_UNDEF)
|
if(index == STN_UNDEF)
|
||||||
index = info->hash.chain[index];
|
|
||||||
|
|
||||||
if(info->hash.chain[index] != STN_UNDEF) {
|
|
||||||
return (void*)(info->base + info->symtab[index].st_value);
|
|
||||||
} else {
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
index = info->hash.chain[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (void*)(info->base + info->symtab[index].st_value);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue