aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2022-03-29 08:18:49 +0200
committerJan Beulich <jbeulich@suse.com>2022-03-29 08:18:49 +0200
commitf3bbd5c389404eb4cc19d136886190d65fefde44 (patch)
tree33239213db4ad6edff9b7997da2bc3e8dd893208
parentbe13be5b687ff0c31eacb0bdd0ab90c329476ed1 (diff)
downloadgdb-f3bbd5c389404eb4cc19d136886190d65fefde44.zip
gdb-f3bbd5c389404eb4cc19d136886190d65fefde44.tar.gz
gdb-f3bbd5c389404eb4cc19d136886190d65fefde44.tar.bz2
bfd/Dwarf2: make find-nearest-line returned function name consistent
Prior to entering the enclosing "else if()" the earlier associated if() checks function->is_linkage and, if set, uses function->name. The comment in patch context precedes (and explains) the setting function->is_linkage. Yet with the flag set, we should then also return the function name, just like said earlier if() would do when we came here a 2nd time for the same "addr". And indeed passing the same address twice on addr2line's command line would resolve the function for the 2nd instance, but not for the 1st (if this code path is taken). (This, obviously, is particularly relevant when there's no ELF symbol table in the first place, like would be the case - naturally - in PE/COFF binaries, for example.)
-rw-r--r--bfd/dwarf2.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index 8b5ac60..8cd0ce9 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -5295,8 +5295,9 @@ _bfd_dwarf2_find_nearest_line (bfd *abfd,
sec_vma = section->vma;
if (section->output_section != NULL)
sec_vma = section->output_section->vma + section->output_offset;
- if (fun != NULL
- && fun->value + sec_vma == function->arange.low)
+ if (fun == NULL)
+ *functionname_ptr = function->name;
+ else if (fun->value + sec_vma == function->arange.low)
function->name = *functionname_ptr;
/* Even if we didn't find a linkage name, say that we have
to stop a repeated search of symbols. */