]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
nm: don't try to print line numbers for symbols without names
authorAlan Modra <amodra@gmail.com>
Tue, 1 Oct 2024 23:32:16 +0000 (09:02 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 3 Oct 2024 03:01:45 +0000 (12:31 +0930)
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.

binutils/nm.c

index faf27c59b4d31585d81379ea8b052ff26459543e..7acf9a26333599462c483016a72f912a3951c6a6 100644 (file)
@@ -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,