PR23652, Use symbols from debug bfd for _bfd_elf_find_function
authorAlan Modra <amodra@gmail.com>
Tue, 26 Nov 2019 12:02:51 +0000 (22:32 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 27 Nov 2019 01:36:29 +0000 (12:06 +1030)
commite76790600aeba4939225eda32e59642ed2813ac8
treee94950e51c433cfe5c73ab0dd3224f40451f0c8d
parent96e2dbda089775359b130e16a337c169d67abc6b
PR23652, Use symbols from debug bfd for _bfd_elf_find_function

Sometimes DWARF info for a function is incomplete, and the function
can be retrieved by examining symbols.  However, when separate debug
files are used it may be that the original file is completely
stripped of symbols.  This patch teaches BFD to look at symbols from
the debug file in that case.

The patch also removes arm_elf_find_function, instead implementing
elf_backend_maybe_function_sym.  arm_elf_find_function was written
before the generic _bfd_elf_find_function called maybe_function_sym.
aarch64 copied arm, so that file gets the same treatment.  There is
some chance this will speed up arm and aarch64 lookup of function/line.

PR 23652
* dwarf2.c (_bfd_dwarf2_stash_syms): New function.
(_bfd_dwarf2_find_nearest_line): Use it here, passing syms to
_bfd_elf_find_function.  Call _bfd_elf_find_function in cases
where _bfd_elf_find_nearest_line would do so.
* elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function
for dwarf2.
* elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly.  Tidy.
* elf32-arm.c (elf32_arm_maybe_function_sym): New function.
(elf_backend_maybe_function_sym): Define.
(arm_elf_find_function, elf32_arm_find_nearest_line): Delete.
(bfd_elf32_find_nearest_line): Don't define.
* elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function.
(elf_backend_maybe_function_sym): Define.
(aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete.
(bfd_elfNN_find_nearest_line): Don't define.
bfd/ChangeLog
bfd/dwarf2.c
bfd/elf.c
bfd/elf32-arm.c
bfd/elfnn-aarch64.c
bfd/elfxx-mips.c