diff options
author | Alan Modra <amodra@gmail.com> | 2013-02-18 10:40:19 +0000 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2013-02-18 10:40:19 +0000 |
commit | d45f8bdadc6f438c13db38f5f92dd1517f240f5a (patch) | |
tree | 296f2bbf70b5a80a716875f11511714ee7867577 /bfd/elf-strtab.c | |
parent | 53c3509d86cf36d7277a3974cd55b7e3edb09fa2 (diff) | |
download | gdb-d45f8bdadc6f438c13db38f5f92dd1517f240f5a.zip gdb-d45f8bdadc6f438c13db38f5f92dd1517f240f5a.tar.gz gdb-d45f8bdadc6f438c13db38f5f92dd1517f240f5a.tar.bz2 |
PR ld/12549
* elf-bfd.h (_bfd_elf_strtab_clear_refs): Delete.
(_bfd_elf_strtab_clear_all_refs): Declare.
(_bfd_elf_strtab_resize): Declare.
* elf-strtab.c (_bfd_elf_strtab_clear_refs): Delete.
(_bfd_elf_strtab_clear_all_refs): New function.
(_bfd_elf_strtab_resize): Likewise.
* elflink.c (elf_link_add_object_symbols): Use _bfd_elf_strtab_resize.
Diffstat (limited to 'bfd/elf-strtab.c')
-rw-r--r-- | bfd/elf-strtab.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/bfd/elf-strtab.c b/bfd/elf-strtab.c index 45743f6..61cedae 100644 --- a/bfd/elf-strtab.c +++ b/bfd/elf-strtab.c @@ -208,10 +208,32 @@ _bfd_elf_strtab_refcount (struct elf_strtab_hash *tab, bfd_size_type idx) } void -_bfd_elf_strtab_clear_refs (struct elf_strtab_hash *tab, bfd_size_type idx) +_bfd_elf_strtab_clear_all_refs (struct elf_strtab_hash *tab) { - while (idx < tab->size) - tab->array[idx++]->refcount = 0; + bfd_size_type idx; + + for (idx = 1; idx < tab->size; idx++) + tab->array[idx]->refcount = 0; +} + +/* Downsizes strtab. Entries from IDX up to the current size are + removed from the array. */ +void +_bfd_elf_strtab_restore_size (struct elf_strtab_hash *tab, bfd_size_type idx) +{ + bfd_size_type curr_size = tab->size; + + BFD_ASSERT (tab->sec_size == 0); + BFD_ASSERT (idx <= curr_size); + tab->size = idx; + for (; idx < curr_size; ++idx) + { + /* We don't remove entries from the hash table, just set their + REFCOUNT to zero. Setting LEN zero will result in the size + growing if the entry is added again. See _bfd_elf_strtab_add. */ + tab->array[idx]->refcount = 0; + tab->array[idx]->len = 0; + } } bfd_size_type |