blob: 9f1a61426516744c67c90885842555f30e00a57d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#include <common.h>
#include <debug.h>
#include <libelf.h>
#include <hash.h>
#include <string.h>
int hash_lookup(Elf *elf,
Elf_Data *hash,
Elf_Data *symtab,
Elf_Data *symstr,
const char *symname) {
Elf32_Word *hash_data = (Elf32_Word *)hash->d_buf;
Elf32_Word index;
Elf32_Word nbuckets = *hash_data++;
Elf32_Word *buckets = ++hash_data;
Elf32_Word *chains = hash_data + nbuckets;
index = buckets[elf_hash(symname) % nbuckets];
while (index != STN_UNDEF &&
strcmp((char *)symstr->d_buf +
((Elf32_Sym *)symtab->d_buf)[index].st_name,
symname)) {
index = chains[index];
}
return index;
}
|