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/elfxx-mips.c | |
parent | 8278e7cec35536046caf596f4e55c7c037d06cf0 (diff) |
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/elfxx-mips.c')
-rw-r--r-- | bfd/elfxx-mips.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index ab65894e92..246d51c9cc 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) |