diff options
author | Nick Clifton <nickc@redhat.com> | 2018-02-06 17:00:25 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2018-02-06 17:00:25 +0000 |
commit | 46d09186d340407fdcf066fea25444682e989512 (patch) | |
tree | dcdecd6921be7fc411ea4acfd150ba86dd74b748 /bfd | |
parent | 8278e7cec35536046caf596f4e55c7c037d06cf0 (diff) | |
download | gdb-46d09186d340407fdcf066fea25444682e989512.zip gdb-46d09186d340407fdcf066fea25444682e989512.tar.gz gdb-46d09186d340407fdcf066fea25444682e989512.tar.bz2 |
Improve the find_nearest_line function for the MIPS target so that it tries harder to find a function name.
PR 22789
* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): If the dwarf
functions failed to find the function name, try the generic elf
find function instead.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elfxx-mips.c | 28 |
2 files changed, 29 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 14ed147..4ce4fc0 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2018-02-06 Miloš Stojanović <milos.stojanovic@rt-rk.com> + + PR 22789 + * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): If the dwarf + functions failed to find the function name, try the generic elf + find function instead. + 2018-02-06 Sergio Durigan Junior <sergiodj@redhat.com> * coff-rs6000.c (xcoff_write_archive_contents_old): Use diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index ab65894..246d51c 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -12666,13 +12666,29 @@ _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols, line_ptr, discriminator_ptr, dwarf_debug_sections, ABI_64_P (abfd) ? 8 : 0, - &elf_tdata (abfd)->dwarf2_find_line_info)) - return TRUE; + &elf_tdata (abfd)->dwarf2_find_line_info) + || _bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset, + filename_ptr, functionname_ptr, + line_ptr)) + { + /* PR 22789: If the function name or filename was not found through + the debug information, then try an ordinary lookup instead. */ + if ((functionname_ptr != NULL && *functionname_ptr == NULL) + || (filename_ptr != NULL && *filename_ptr == NULL)) + { + /* Do not override already discovered names. */ + if (functionname_ptr != NULL && *functionname_ptr != NULL) + functionname_ptr = NULL; - if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset, - filename_ptr, functionname_ptr, - line_ptr)) - return TRUE; + if (filename_ptr != NULL && *filename_ptr != NULL) + filename_ptr = NULL; + + _bfd_elf_find_function (abfd, symbols, section, offset, + filename_ptr, functionname_ptr); + } + + return TRUE; + } msec = bfd_get_section_by_name (abfd, ".mdebug"); if (msec != NULL) |