diff options
| author | Ulrich Drepper <[email protected]> | 2006-07-06 23:58:40 +0000 |
|---|---|---|
| committer | Ulrich Drepper <[email protected]> | 2006-07-06 23:58:40 +0000 |
| commit | 1b0714c81de473ad3a5ca88bd1c593d93a6ebcdd (patch) | |
| tree | 152b48dddb7a07fbe0a534242457277e60ab2199 /src/readelf.c | |
| parent | 7df97c777c3c8a688774882a1dd7d1701a127560 (diff) | |
Updated support for new hash table format.
Fix handling of discarded COMDAT symbols in ld.
Diffstat (limited to 'src/readelf.c')
| -rw-r--r-- | src/readelf.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/readelf.c b/src/readelf.c index b4b6a5aa..9fbc24d6 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -2480,17 +2480,18 @@ handle_gnu_hash (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr, size_t shstrndx) } Elf32_Word nbucket = ((Elf32_Word *) data->d_buf)[0]; + Elf32_Word symbias = ((Elf32_Word *) data->d_buf)[1]; Elf32_Word *bucket = &((Elf32_Word *) data->d_buf)[2]; - Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + nbucket]; + Elf32_Word *chain = &((Elf32_Word *) data->d_buf)[2 + 2 * nbucket]; uint32_t *lengths = (uint32_t *) xcalloc (nbucket, sizeof (uint32_t)); uint_fast32_t maxlength = 0; uint_fast32_t nsyms = 0; for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt) - if (bucket[cnt] != ~0u) + if (bucket[2 * cnt + 1] != 0) { - Elf32_Word inner = bucket[cnt]; + Elf32_Word inner = bucket[2 * cnt + 1] - symbias; do { ++nsyms; |
