[binutils-gdb] nm: don't try to print line numbers for symbols without names
Alan Modra
amodra@sourceware.org
Thu Oct 3 04:37:33 GMT 2024
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d2ea1a941173223907ef8a91d674af3417ba9dbc
commit d2ea1a941173223907ef8a91d674af3417ba9dbc
Author: Alan Modra <amodra@gmail.com>
Date: Wed Oct 2 09:02:16 2024 +0930
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:
---
binutils/nm.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
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,
More information about the Binutils-cvs
mailing list