Dwarf Error: Cannot find DIE at 0x191d5 referenced from DIE at 0x1e9ab

Denis Feklushkin feklushkin.denis at gmail.com
Sun Oct 11 04:46:45 UTC 2020


Hi!

I compile in C and D sources by clang-11, ldc2 
(1.24.0-git-e8f331c), LLD 11.0.0 into one Cortex M3 static 
binary. And looks like it produces binary with broken debug info.

When I start this binary and connect to it by GDB at some debug 
step it calls D symbol from initial C code. Then GDB immediately 
says:
Dwarf Error: Cannot find DIE at 0x191d5 referenced from DIE at 
0x1e9ab [in module 
/home/denizzz/Dev/d_c_arm_test/builddir/firmware.elf]
Dwarf Error: Cannot find DIE at 0x191d5 referenced from DIE at 
0x1e9ab [in module 
/home/denizzz/Dev/d_c_arm_test/builddir/firmware.elf]

and debugging session stalls (but execution flow works ok)

I unsucessfully tried to find what is going wrong by 
llvm-dwarfdump:

llvm-dwarfdump --verify firmware.elf
Verifying firmware.elf:	file format elf32-littlearm
Verifying .debug_abbrev...
Verifying .debug_info Unit Header Chain...
(here is llvm-dwarfdump goes into infinity loop and eats 100% CPU)

llvm-dwarfdump --all firmware.elf shows:
[...]
0x0001e9ab:           DW_TAG_inlined_subroutine
                         DW_AT_abstract_origin	(0x000191d5)
                         DW_AT_low_pc	(0x0000000021025ba6)
                         DW_AT_high_pc	(0x0000000021025bbe)
                         
DW_AT_call_file	("/home/denizzz/Dev/d_c_arm_test/builddir/../subprojects/druntime/src/gc/bits.d")
                         DW_AT_call_line	(1965)
                         DW_AT_call_column	(0x0d)
[...]

191d5 value in llvm-dwarfdump output actually can be found only 
in "DW_AT_abstract_origin	(0x000191d5)" form.

DW_AT_call_line 1965 in druntime/src/gc/bits.d is missing, this 
file contains only 484 lines.

Tell me what else can I do to investigate this issue?



More information about the digitalmars-d-ldc mailing list