diff options
author | Alan Modra <amodra@gmail.com> | 2024-10-04 16:37:35 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2024-10-04 17:47:21 +0930 |
commit | 265757dc6e4d011a1b33ef1b3bfcd7f100f12f64 (patch) | |
tree | db66ff4c177d3169f82d6e46c628772848001a22 | |
parent | 85ef4a5ed82fb5f71c78505acfac2104767f908d (diff) | |
download | gdb-265757dc6e4d011a1b33ef1b3bfcd7f100f12f64.zip gdb-265757dc6e4d011a1b33ef1b3bfcd7f100f12f64.tar.gz gdb-265757dc6e4d011a1b33ef1b3bfcd7f100f12f64.tar.bz2 |
bfd_elf_sym_name_raw
Many uses of bfd_elf_sym_name report errors. They ought to not return
a NULL, as was the case prior to commit 68bbe1183379. Introduce a new
function for cases where we'd like to know there is a problem with a
symbol st_name.
* elf-bfd.h (bfd_elf_sym_name_raw): Declare.
* elf.c (bfd_elf_sym_name_raw): New function.
(bfd_elf_sym_name): Revert to behaviour prior to 68bbe1183379,
but returning "<null>" rather than "(null)" for st_name errors.
(group_signature): Use bfd_elf_sym_name_raw.
* elfcode.h (elf_slurp_symbol_table): Likewise.
* elf32-i386.c (elf_i386_scan_relocs): Whitespace.
-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) |