https://sourceware.org/bugzilla/show_bug.cgi?id=23425
Bug ID: 23425 Summary: unresolved symbol diagnostic ends up calling find_abstract_instance with relocations applied causing spurious 'DWARF error: invalid abstract instance DIE ref' Product: binutils Version: 2.30 Status: NEW Severity: normal Priority: P2 Component: ld Assignee: unassigned at sourceware dot org Reporter: rguenth at gcc dot gnu.org Target Milestone: --- Backtrace from the 2.31 branch: #0 _bfd_error_handler ( fmt=0x690150 "DWARF error: invalid abstract instance DIE ref") at /space/rguenther/src/binutils-gdb/bfd/bfd.c:1177 #1 0x00000000004c6214 in find_abstract_instance (unit=0x7056d8, orig_info_ptr=0x76df90 "\004> ", attr_ptr=0x7fffffffcd10, pname=0x770f18, is_linkage=0x770f14, filename_ptr=0x770f00, linenumber_ptr=0x770f0c) at /space/rguenther/src/binutils-gdb/bfd/dwarf2.c:2843 #2 0x00000000004c6cbe in scan_unit_for_symbols (unit=0x7056d8) at /space/rguenther/src/binutils-gdb/bfd/dwarf2.c:3169 #3 0x00000000004c789f in comp_unit_find_nearest_line (unit=0x7056d8, addr=4198435, filename_ptr=0x7fffffffd018, function_ptr=0x7fffffffce70, linenumber_ptr=0x7fffffffd00c, discriminator_ptr=0x0, stash=0x7054a0) at /space/rguenther/src/binutils-gdb/bfd/dwarf2.c:3616 #4 0x00000000004c9975 in _bfd_dwarf2_find_nearest_line (abfd=0x6fe880, symbols=0x705270, symbol=0x0, section=0x700dd0, offset=35, filename_ptr=0x7fffffffd018, functionname_ptr=0x7fffffffd010, linenumber_ptr=0x7fffffffd00c, discriminator_ptr=0x0, debug_sections=0x68f9a0 <dwarf_debug_sections>, addr_size=4, pinfo=0x700090) at /space/rguenther/src/binutils-gdb/bfd/dwarf2.c:4807 #5 0x0000000000491807 in _bfd_elf_find_nearest_line (abfd=0x6fe880, symbols=0x705270, section=0x700dd0, offset=35, filename_ptr=0x7fffffffd018, functionname_ptr=0x7fffffffd010, line_ptr=0x7fffffffd00c, discriminator_ptr=0x0) at /space/rguenther/src/binutils-gdb/bfd/elf.c:8752 #6 0x000000000042574f in vfinfo (fp=0x7ffff7bd2080 <_IO_2_1_stderr_>, fmt=0x555b18 ": undefined reference to `%pT'\n", ap=0x7fffffffd208, is_warning=1) at /space/rguenther/src/binutils-gdb/ld/ldmisc.c:350 #7 0x000000000042643f in einfo ( fmt=0x555b10 "%X%P: %C: undefined reference to `%pT'\n") at /space/rguenther/src/binutils-gdb/ld/ldmisc.c:626 #8 0x000000000041fd50 in undefined_symbol (info=0x6ced80 <link_info>, name=0x70506c "_ZNSsC1Ev", abfd=0x6fe880, section=0x700dd0, address=35, error=1) at /space/rguenther/src/binutils-gdb/ld/ldmain.c:1346 #9 0x000000000046ad3d in elf_x86_64_relocate_section (output_bfd=0x6e7210, info=0x6ced80 <link_info>, input_bfd=0x6fe880, input_section=0x700dd0, contents=0x701f60 "UH\211", <incomplete sequence \345\270>, relocs=0x7050f8, local_syms=0x6f32b0, local_sections=0x76dd60) at /space/rguenther/src/binutils-gdb/bfd/elf64-x86-64.c:2483 The code says it only handles refs within the same file but the guard for this, a zero die_ref, doesn't work after applying relocations to .debug_info and this function ends up being called from the unresolved symbol diagnostic causing a spurious DWARF error to be reported. /* We only support DW_FORM_ref_addr within the same file, so any relocations should be resolved already. Check this by testing for a zero die_ref; There can't be a valid reference to the header of a .debug_info section. DW_FORM_ref_addr is an offset relative to .debug_info. Normally when using the GNU linker this is accomplished by emitting a symbolic reference to a label, because .debug_info sections are linked at zero. When there are multiple section groups containing .debug_info, as there might be in a relocatable object file, it would be reasonable to assume that a symbolic reference to a label in any .debug_info section might be used. Since we lay out multiple .debug_info sections at non-zero VMAs (see place_sections), and read them contiguously into stash->info_ptr_memory, that means the reference is relative to stash->info_ptr_memory. */ size_t total; info_ptr = unit->stash->info_ptr_memory; info_ptr_end = unit->stash->info_ptr_end; total = info_ptr_end - info_ptr; if (!die_ref || die_ref >= total) { _bfd_error_handler (_("DWARF error: invalid abstract instance DIE ref")); bfd_set_error (bfd_error_bad_value); return FALSE; -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils