diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 42300c111a6..420b13dd101 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-07-13 Nick Alcock + + * elf-strtab.c (_bfd_elf_strtab_len): New. + (_bfd_elf_strtab_str): Likewise. + * bfd-elf.h: Declare them. + 2019-07-13 Nick Alcock * elf-bfd.h (bfd_elf_get_str_section): Add. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index a9e2d3eeaf1..4240d97a429 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2252,8 +2252,12 @@ extern void _bfd_elf_strtab_restore (struct elf_strtab_hash *, void *); extern bfd_size_type _bfd_elf_strtab_size (struct elf_strtab_hash *); +extern bfd_size_type _bfd_elf_strtab_len + (struct elf_strtab_hash *); extern bfd_size_type _bfd_elf_strtab_offset (struct elf_strtab_hash *, size_t); +extern const char * _bfd_elf_strtab_str + (struct elf_strtab_hash *, size_t idx, size_t *offset); extern bfd_boolean _bfd_elf_strtab_emit (bfd *, struct elf_strtab_hash *); extern void _bfd_elf_strtab_finalize diff --git a/bfd/elf-strtab.c b/bfd/elf-strtab.c index ec9002fae7b..cc1dcb3f50a 100644 --- a/bfd/elf-strtab.c +++ b/bfd/elf-strtab.c @@ -270,6 +270,12 @@ _bfd_elf_strtab_size (struct elf_strtab_hash *tab) return tab->sec_size ? tab->sec_size : tab->size; } +bfd_size_type +_bfd_elf_strtab_len (struct elf_strtab_hash *tab) +{ + return tab->size; +} + bfd_size_type _bfd_elf_strtab_offset (struct elf_strtab_hash *tab, size_t idx) { @@ -285,6 +291,19 @@ _bfd_elf_strtab_offset (struct elf_strtab_hash *tab, size_t idx) return tab->array[idx]->u.index; } +const char * +_bfd_elf_strtab_str (struct elf_strtab_hash *tab, size_t idx, + bfd_size_type *offset) +{ + if (idx == 0) + return 0; + BFD_ASSERT (idx < tab->size); + BFD_ASSERT (tab->sec_size); + if (offset) + *offset = tab->array[idx]->u.index; + return tab->array[idx]->root.string; +} + bfd_boolean _bfd_elf_strtab_emit (register bfd *abfd, struct elf_strtab_hash *tab) {