nm: don't try to print line numbers for symbols without names

Message ID Zv4db_egJNDzx3Ap@squeak.grove.modra.org
State New
Headers
Series nm: don't try to print line numbers for symbols without names |

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. 3, 2024, 4:28 a.m. UTC
  It doesn't make much sense trying to print line numbers for what are
usually broken symbols, and there is a possibility of a segfault if
we pass strcmp a NULL.
  

Patch

diff --git a/binutils/nm.c b/binutils/nm.c
index faf27c59b4d..7acf9a26333 100644
--- a/binutils/nm.c
+++ b/binutils/nm.c
@@ -1227,7 +1227,8 @@  print_symbol (bfd *        abfd,
 
   format->print_symbol_info (&info, abfd);
 
-  if (line_numbers)
+  const char *symname = bfd_asymbol_name (sym);
+  if (line_numbers && symname != NULL && symname[0] != 0)
     {
       struct lineno_cache *lc = bfd_usrdata (abfd);
       const char *filename, *functionname;
@@ -1258,7 +1259,6 @@  print_symbol (bfd *        abfd,
       else if (bfd_is_und_section (bfd_asymbol_section (sym)))
 	{
 	  unsigned int i;
-	  const char *symname;
 
 	  /* For an undefined symbol, we try to find a reloc for the
              symbol, and print the line number of the reloc.  */
@@ -1274,7 +1274,6 @@  print_symbol (bfd *        abfd,
 	      bfd_map_over_sections (abfd, get_relocs, &rinfo);
 	    }
 
-	  symname = bfd_asymbol_name (sym);
 	  for (i = 0; i < lc->seccount; i++)
 	    {
 	      long j;
@@ -1287,6 +1286,7 @@  print_symbol (bfd *        abfd,
 		  if (r->sym_ptr_ptr != NULL
 		      && (*r->sym_ptr_ptr)->section == sym->section
 		      && (*r->sym_ptr_ptr)->value == sym->value
+		      && bfd_asymbol_name (*r->sym_ptr_ptr) != NULL
 		      && strcmp (symname,
 				 bfd_asymbol_name (*r->sym_ptr_ptr)) == 0
 		      && bfd_find_nearest_line (abfd, lc->secs[i], lc->syms,