diff options
-rw-r--r-- | bfd/elf-bfd.h | 2 | ||||
-rw-r--r-- | bfd/elf.c | 25 | ||||
-rw-r--r-- | bfd/elf32-i386.c | 2 | ||||
-rw-r--r-- | bfd/elfcode.h | 2 |
4 files changed, 21 insertions, 10 deletions
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index b89d3dd..cb147b4e 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -2277,6 +2277,8 @@ extern Elf_Internal_Sym *bfd_elf_get_elf_syms (bfd *, Elf_Internal_Shdr *, size_t, size_t, Elf_Internal_Sym *, void *, Elf_External_Sym_Shndx *); extern char * bfd_elf_get_str_section (bfd *, unsigned int); +extern const char *bfd_elf_sym_name_raw + (bfd *, Elf_Internal_Shdr *, Elf_Internal_Sym *); extern const char *bfd_elf_sym_name (bfd *, Elf_Internal_Shdr *, Elf_Internal_Sym *, asection *); @@ -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 diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index f27c062..2e8d595 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1723,7 +1723,7 @@ elf_i386_scan_relocs (bfd *abfd, name = h->root.root.string; else name = bfd_elf_sym_name (abfd, symtab_hdr, isym, - NULL); + NULL); _bfd_error_handler /* xgettext:c-format */ (_("%pB: `%s' accessed both as normal and " diff --git a/bfd/elfcode.h b/bfd/elfcode.h index 3dcba4c..6aebcc6 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -1355,7 +1355,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bool dynamic) sym->symbol.name = (elf_tdata (abfd)->dt_strtab + isym->st_name); else - sym->symbol.name = bfd_elf_sym_name (abfd, hdr, isym, NULL); + sym->symbol.name = bfd_elf_sym_name_raw (abfd, hdr, isym); sym->symbol.value = isym->st_value; if (isym->st_shndx == SHN_UNDEF) |