[llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to false for X86ELFMCAsmInfo.
Jan Sjodin
jan_sjodin at yahoo.com
Tue Mar 8 08:46:52 PST 2011
Ping!
- Jan
----- Original Message ----
> From: Jan Sjodin <jan_sjodin at yahoo.com>
> To: Anton Korobeynikov <anton at korobeynikov.info>
> Cc: llvm-commits at cs.uiuc.edu
> Sent: Sat, February 26, 2011 9:40:31 AM
> Subject: Re: [llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to false
>for X86ELFMCAsmInfo.
>
>
>
>
> ----- Original Message ----
> > From: Anton Korobeynikov <anton at korobeynikov.info>
> > To: Jan Sjodin <jan_sjodin at yahoo.com>
> > Cc: llvm-commits at cs.uiuc.edu
> > Sent: Sat, February 26, 2011 7:36:00 AM
> > Subject: Re: [llvm-commits] Change DwarfUsesAbsoluteLabelForStmtList to
>false
>
> >for X86ELFMCAsmInfo.
> >
> > Hello Jan,
> >
> > > Dwarfdump gives an error and gdb fails when generating code in memory
>(but
> > > happens to accept it in a .o file) in Linux when
> > > DwarfUsesAbsoluteLabelForStmtList = true, this patch sets it to false to
> fix
> > > this issue. I don't know if this is true for other targets, but the
>change
>
> >is
> > > limited to X86ELFMCAsmInfo.
> > How the patch was tested? How we might be sure this won't break non JIT
>case?
> >
> > --
> > With best regards, Anton Korobeynikov
> > Faculty of Mathematics and Mechanics, Saint Petersburg State University
> >
>
> The question you are really asking is if there is a bug in dwarfdump or a bug
>in
>
> llvm, because dwarfdump always complains. I tried this on Linux 64-bit with
> clang and llvm trunk:
>
> file empty.c:
> ---------------------------------------------------------------
>
> int main()
> {
> return 42;
> }
> ---------------------------------------------------------------
>
> Compile and run dwarfdump:
> ---------------------------------------------------------------
> > clang -c -g -emit-llvm -o empty.bc empty.c
> > llc -filetype=obj empty.bc
> > dwarfdump empty.o
>
> .debug_info
>
> COMPILE_UNIT<header overall offset = 0>:
> <0>< 11> DW_TAG_compile_unit
> DW_AT_producer clang version 2.9 (trunk 126545)
> DW_AT_language DW_LANG_C99
> DW_AT_name empty.c
> DW_AT_entry_pc 0x0
> DW_AT_stmt_list 0x0
> DW_AT_comp_dir
>/home/jsjodin/Work/LLVM/Sandboxes/TOT/test
>
> LOCAL_SYMBOLS:
> <1>< 114> DW_TAG_base_type
> DW_AT_encoding DW_ATE_signed
> DW_AT_name int
> DW_AT_byte_size 4
> <1>< 121> DW_TAG_subprogram
> DW_AT_name main
> DW_AT_decl_file 1
> DW_AT_decl_line 2
> DW_AT_type <114>
> DW_AT_external yes(1)
> DW_AT_low_pc 0x0
> DW_AT_high_pc 0xe
> DW_AT_frame_base DW_OP_reg7
> AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing.
> <Unknown AT value 0x3fe7> yes(1)
>
> .debug_line: line number info for a single cu
> dwarfdump ERROR: dwarf_srclines: DW_DLE_ATTR_FORM_BAD (114)
> ---------------------------------------------------------------
>
> dwarfdump cleary doesn't like what llc has produced. With the patch applied we
>
> try again:
>
> ---------------------------------------------------------------
> .debug_info
>
> COMPILE_UNIT<header overall offset = 0>:
> <0>< 11> DW_TAG_compile_unit
> DW_AT_producer clang version 2.9 (trunk 126545)
> DW_AT_language DW_LANG_C99
> DW_AT_name empty.c
> DW_AT_entry_pc 0x0
> DW_AT_stmt_list 0
> DW_AT_comp_dir
>/home/jsjodin/Work/LLVM/Sandboxes/TOT/test
>
> LOCAL_SYMBOLS:
> <1>< 110> DW_TAG_base_type
> DW_AT_encoding DW_ATE_signed
> DW_AT_name int
> DW_AT_byte_size 4
> <1>< 117> DW_TAG_subprogram
> DW_AT_name main
> DW_AT_decl_file 1
> /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c
> DW_AT_decl_line 2
> DW_AT_type <110>
> DW_AT_external yes(1)
> DW_AT_low_pc 0x0
> DW_AT_high_pc 0xe
> DW_AT_frame_base DW_OP_reg7
> AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing.
> <Unknown AT value 0x3fe7> yes(1)
>
> .debug_line: line number info for a single cu
> Source lines (from CU-DIE at .debug_info offset 11):
> <source> [row,column] <pc> //<new statement or basic block
> /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 2,-1] 0x0 //
>new
>
> statement
> /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 3, 3] 0xd //
>new
>
> statement
> /home/jsjodin/Work/LLVM/Sandboxes/TOT/test/empty.c: [ 3, 3] 0xe //
>new
>
> statement // end of text sequence
>
> .debug_pubnames
> global main die-in-sect 117, cu-in-sect 11, die-in-cu 117,
> cu-header-in-sect 0
>
> .debug_macinfo
>
> .debug_loc format <i o b e l> means index section-offset begin-addr end-addr
> length-of-block-entry
>
> .debug_abbrev
> < 1>< 0><code: 1> DW_TAG_compile_unit DW_children_yes
> < 3> DW_AT_producer DW_FORM_string
> < 5> DW_AT_language DW_FORM_data2
> < 7> DW_AT_name DW_FORM_string
> < 9> DW_AT_entry_pc DW_FORM_addr
> < 11> DW_AT_stmt_list DW_FORM_data4
> < 13> DW_AT_comp_dir DW_FORM_string
> < 2>< 17><code: 2> DW_TAG_base_type DW_children_no
> < 20> DW_AT_encoding DW_FORM_data1
> < 22> DW_AT_name DW_FORM_string
> < 24> DW_AT_byte_size DW_FORM_data1
> < 3>< 28><code: 3> DW_TAG_subprogram DW_children_no
> < 31> DW_AT_name DW_FORM_string
> < 33> DW_AT_decl_file DW_FORM_data1
> < 35> DW_AT_decl_line DW_FORM_data1
> < 37> DW_AT_type DW_FORM_ref4
> < 39> DW_AT_external DW_FORM_flag
> < 41> DW_AT_low_pc DW_FORM_addr
> < 43> DW_AT_high_pc DW_FORM_addr
> < 45> DW_AT_frame_base DW_FORM_block1
> < 47> AT of 16359 (0x3fe7) is unknown to dwarfdump. Continuing.
> <Unknown AT value 0x3fe7> DW_FORM_flag
> < 4>< 52><code: 0> null .debug_abbrev entry
>
> .debug_string
>
> .debug_aranges
>
> .debug_frame
>
> fde:
> < 0><0x0:0xe><main><fde offset 0x14 length: 0x14><eh offset none>
> 0x00000000: <off cfa=08(r7) > <off r16=-8(cfa) >
>
> .debug_static_func
>
> .debug_static_vars
>
> .debug_pubtypes
>
> .debug_weaknames
> ---------------------------------------------------------------
>
More information about the llvm-commits
mailing list