[LLVMdev] Dwarf debug info misses while clang codegen
Eric Christopher
echristo at apple.com
Wed Aug 22 15:55:58 PDT 2012
On Aug 21, 2012, at 2:16 AM, Kevin <keigi1203 at gmail.com> wrote:
> I'm trying to write a llvm pass to add debug info into a non-debug-info bitcode
> file. I have been read http://llvm.org/docs/SourceLevelDebugging.html. And I use
> DIBuilder to produce the debug metadata. I know I can't get all information form
> ir code . So I add some manual info as test data. After executing my pass, I can
> find debug info metadata in my generated bitcode. Those metadata include
> "DICompileUnit" , "DIFile", "DIVariable" ,"DISubprogram", "DILexicalBlock".
>
> Just like
> ------------------------------------------------------------------------------
> 84 !0 = metadata !{i32 786449, i32 0, i32 4, metadata !"hello.cpp", metadata
> !"/proj/mtk04456", metadata !"clang version", i1 true, i1 true, metadata
> !"flag", i32 0, metadata !1, metadata !1, metadata !1, metadata !1} ; [
> DW_TAG_compile_unit ] [/p roj/mtk04456/hello.cpp] [DW_LANG_C_plus_plus]
>
> ------------------------------------------------------------------------------
>
> First problem happen : DICompileUnit doesn't find the last four metadata (i.e.
> enums types, retained types, subprograms, global variables). But
> DIBuilder::CreateCompileUnit(...) doesn't need any MDNode* arg. It will find
> those four metadata in the function. I don't know why it can't point to right
> reference. So I use MDNode::getOperand(..)->replaceAllUseWith(...) to replace
> those four metadata with right MDNode.
>
> But when I compile my new bitcode to elf file. ( clang++ -g hello.bc -o exec)
> I can't find my debug info when I use readelf. ( readelf -w exec > log )
> There just have one TAG .
>
> Number TAG
> 1 DW_TAG_compile_unit [no children]
> DW_AT_producer DW_FORM_strp
> DW_AT_language DW_FORM_data2
> DW_AT_name DW_FORM_strp
> DW_AT_low_pc DW_FORM_addr
> DW_AT_stmt_list DW_FORM_data4
> DW_AT_comp_dir DW_FORM_strp
> Unknown AT value: 3fe1 DW_FORM_flag
> Unknown AT value: 3fe2 DW_FORM_strp
>
> I can't find other dwarf TAG in my object file.
>
> Is the metadata wrong? Or I loss some step when I generate metadata?
> If you need my pass's source. Please give me your mail. I will mail it for you.
> Thanks!!
Likely your metadata is incorrect. You should also use replaceOperand not RAUW
with metadata. Metadata as defined is to be write once, read many. Also, as I've
stated in the past, I have no idea what you're doing or what you're trying
to accomplish with it though.
-eric
More information about the llvm-dev
mailing list