diff options
Diffstat (limited to 'bfd/elf.c')
-rw-r--r-- | bfd/elf.c | 25 |
1 files changed, 17 insertions, 8 deletions
@@ -531,12 +531,10 @@ bfd_elf_get_elf_syms (bfd *ibfd, /* Look up a symbol name. */ const char * -bfd_elf_sym_name (bfd *abfd, - Elf_Internal_Shdr *symtab_hdr, - Elf_Internal_Sym *isym, - asection *sym_sec) +bfd_elf_sym_name_raw (bfd *abfd, + Elf_Internal_Shdr *symtab_hdr, + Elf_Internal_Sym *isym) { - const char *name; unsigned int iname = isym->st_name; unsigned int shindex = symtab_hdr->sh_link; @@ -548,8 +546,19 @@ bfd_elf_sym_name (bfd *abfd, shindex = elf_elfheader (abfd)->e_shstrndx; } - name = bfd_elf_string_from_elf_section (abfd, shindex, iname); - if (sym_sec && name && *name == '\0') + return bfd_elf_string_from_elf_section (abfd, shindex, iname); +} + +const char * +bfd_elf_sym_name (bfd *abfd, + Elf_Internal_Shdr *symtab_hdr, + Elf_Internal_Sym *isym, + asection *sym_sec) +{ + const char *name = bfd_elf_sym_name_raw (abfd, symtab_hdr, isym); + if (name == NULL) + name = "<null>"; + else if (sym_sec && *name == '\0') name = bfd_section_name (sym_sec); return name; @@ -581,7 +590,7 @@ group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr) &isym, esym, &eshndx) == NULL) return NULL; - return bfd_elf_sym_name (abfd, hdr, &isym, NULL); + return bfd_elf_sym_name_raw (abfd, hdr, &isym); } static bool |