From 1b0714c81de473ad3a5ca88bd1c593d93a6ebcdd Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 6 Jul 2006 23:58:40 +0000 Subject: Updated support for new hash table format. Fix handling of discarded COMDAT symbols in ld. --- src/readelf.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/readelf.c') 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; -- cgit v1.2.3