[llvm-dev] Finding a Compile Unit for Address segfaults for Macho File when calling DwarfContext::getDIEsForAddress

Scott Densmore via llvm-dev llvm-dev at lists.llvm.org
Sun Sep 2 18:53:27 PDT 2018


I am using llvm 6.0.1 and trying to find an an address in llvm. I tried llvm-dwarfdump -lookup and it fails. If I loop through the compile units in parsed macho file, I find the address using the DWARFCompileUnit::getSubroutineForAddress. Is there a way to find the address?  For the Compile Unit I find when looping through for address 0x00000001000dd174:

(I am removing identifying info)

0x002112d0: Compile Unit: length = 0x00002928 version = 0x0004 abbr_offset = 0x0000 addr_size = 0x08 (next unit at 0x00213bfc)

0x002112db: DW_TAG_compile_unit
              DW_AT_producer	("Apple Swift version 4.1 (swiftlang-902.0.48 clang-902.0.37.1) -emit-object -filelist <temporary-file> <removed-rest>")
              DW_AT_language	(DW_LANG_Swift)
              DW_AT_name	(“<filename>")
              DW_AT_stmt_list	(0x0010c54b)
              DW_AT_comp_dir	("/Users/build/bamboo-agent-home/xml-data/build-dir/ID-RAX9-JOB1")
              DW_AT_APPLE_optimized	(true)
              DW_AT_APPLE_flags	("-emit-object -filelist <temporary-file> ")
              DW_AT_APPLE_major_runtime_vers	(0x04)
              DW_AT_low_pc	(0x00000001000d957c)
              DW_AT_ranges	(0x00007100
                 [0x00000001000d957c - 0x00000001000dabb4)
                 [0x00000001000dabc0 - 0x00000001000dad40)
                 [0x00000001000dadac - 0x00000001000dbd60)
                 [0x00000001000dbd84 - 0x00000001000dbdbc)
                 [0x00000001000dbde0 - 0x00000001000dbf90)
                 [0x00000001000dbff8 - 0x00000001000e069c)
                 [0x00000001000e0708 - 0x00000001000e070c)
                 [0x00000001000e0a28 - 0x00000001000e0c8c)
                 [0x00000001000e0ce4 - 0x00000001000e1118)
                 [0x00000001000e113c - 0x00000001000e1888))

The DIE is:

0x0021237a: DW_TAG_inlined_subroutine
              DW_AT_abstract_origin	(cu + 0x14eb "_T0IeyB_Ieg_TR")
              DW_AT_low_pc	(0x00000001000dd174)
              DW_AT_high_pc	(0x00000001000dd190)
              DW_AT_call_file	(“<removed>")
              DW_AT_call_line	(118)

Looks like the address should be in range so not sure why it can’t find it. Any help is appreciated.

I did debug the SEGFAULT and getting an assert. It fines a Compile Unit, then the FunctionDIE is not value (NULL). The die in the worklist is invalid and asserts. 


More information about the llvm-dev mailing list