[LLVMdev] DWARF not being generated for local variable, though MD looks right(?)
Devang Patel
dpatel at apple.com
Mon May 2 09:36:34 PDT 2011
On Apr 29, 2011, at 5:49 PM, Matt Pharr wrote:
> I'm running into a problem with generating debugging information that I'm not sure how to debug; I'd be happy to have some suggestions about where to start digging in.
>
> In short, I believe that I'm correctly generating debug info (with DIBuilder, which has so far been quite nice!), and a scan of the meta-data in the IR looks generally right. However, if I run dwarfdump on my object file, I'm not seeing any DIE information for the local variables. I'm wondering what might be going wrong along the way.
>
> More specifically, given a program that is equivalent to the following in C:
>
> float foo() {
> float y = 1234;
> return y;
> }
>
> My compiler generates the following IR (pay no attention to the ___ at the end of "foo"..):
>
> define i32 @foo___(<4 x i32>) nounwind readnone alwaysinline {
> entry:
> tail call void @llvm.dbg.value(metadata !6, i64 0, metadata !4), !dbg !7
> ret i32 1234
> }
>
Here there is not any instruction (ignoring dbg intrinsics) with line number information. If you add !dbg !7 at the end of 'ret' then it'll work.
-
Devang
> declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone
>
> !llvm.dbg.sp = !{!0}
> !llvm.dbg.lv.foo___ = !{!4}
>
> !0 = metadata !{i32 589870, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"foo___", metadata !1, i32 4, metadata !3, i1 false, i1 true, i32 0, i32 0, i32 0, i32 0, i1 true, i32 (<4 x i32>)* @foo___, null, null} ; [ DW_TAG_subprogram ]
> !1 = metadata !{i32 589865, metadata !"a.c", metadata !"/Users/mmp/foo/", metadata !2} ; [ DW_TAG_file_type ]
> !2 = metadata !{i32 589841, i32 0, i32 12, metadata !"a.c", metadata !"/Users/mmp/foo", metadata !"foo", i1 true, i1 true, metadata !"-g", i32 0} ; [ DW_TAG_compile_unit ]
> !3 = metadata !{i32 589860, metadata !2, metadata !"int32", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
> !4 = metadata !{i32 590080, metadata !5, metadata !"y", metadata !1, i32 5, metadata !3, i32 0} ; [ DW_TAG_auto_variable ]
> !5 = metadata !{i32 589835, metadata !0, i32 4, i32 0, metadata !1, i32 0} ; [ DW_TAG_lexical_block ]
> !6 = metadata !{i32 1234}
> !7 = metadata !{i32 5, i32 0, metadata !5, null}
>
> However, if I run dwarfdump on the object file, there's nothing there for the variable 'y' (see below). Note that I am able to get correct DWARF output for global variables, so presumably the rest of my infrastructure isn't totally broken.
>
> Any guidance about how best to proceed would be greatly appreciated!
>
> Thanks,
> -matt
>
>
> ----------------------------------------------------------------------
> File: a.o (x86_64)
> ----------------------------------------------------------------------
> .debug_info contents:
>
> 0x00000000: Compile Unit: length = 0x00000043 version = 0x0002 abbr_offset = 0x00000000 addr_size = 0x08 (next CU at 0x00000047)
>
> 0x0000000b: TAG_compile_unit [1] *
> AT_producer( "volta" )
> AT_language( DW_LANG_C99 )
> AT_name( "a.c" )
> AT_entry_pc( 0x0000000000000000 )
> AT_stmt_list( 0x00000000 )
> AT_comp_dir( "/Users/mmp/foo" )
> AT_APPLE_optimized( 0x01 )
> AT_APPLE_flags( "-g" )
>
> 0x00000039: TAG_subprogram [2]
> AT_name( "foo" )
> AT_MIPS_linkage_name( "foo___" )
> AT_external( 0x01 )
>
> 0x00000046: NULL
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110502/f6157c66/attachment.html>
More information about the llvm-dev
mailing list