bfd_elf_sym_name_raw

Message ID Zv-lubPry_G2f18i@squeak.grove.modra.org
State New
Headers
Series bfd_elf_sym_name_raw |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_binutils_build--master-arm warning Patch is already merged
linaro-tcwg-bot/tcwg_binutils_build--master-aarch64 warning Patch is already merged

Commit Message

Alan Modra Oct. 4, 2024, 8:22 a.m. UTC
  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.
  

Patch

diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index b89d3dda05d..cb147b4eb84 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 *);
 
diff --git a/bfd/elf.c b/bfd/elf.c
index 7d3d2063130..38bfb1c2064 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -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 f27c0621a93..2e8d59518ac 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 3dcba4c4fd7..6aebcc6e602 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)