From: Alan Modra Date: Tue, 1 Oct 2024 23:32:16 +0000 (+0930) Subject: nm: don't try to print line numbers for symbols without names X-Git-Tag: gdb-16-branchpoint~756 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2ea1a941173223907ef8a91d674af3417ba9dbc;p=thirdparty%2Fbinutils-gdb.git nm: don't try to print line numbers for symbols without names 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. --- 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,