<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Mar 6, 2012, at 5:31 AM, Seb <<a href="mailto:babslachem@gmail.com">babslachem@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hi all,<br><br>Anyone have ideas/info on this topic ?<br>Thanks<br>Seb<br><br><div class="gmail_quote">2012/3/2 Seb <span dir="ltr"><<a href="mailto:babslachem@gmail.com">babslachem@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex; position: static; z-index: auto; ">
<font><font>Hi all,<br>
<br>
I'm using my own front-end to generate following code .ll file targeting x86 32-bit:<br>
<br>
; ModuleID = 'check.c'<br>
target datalayout = 
"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"<br>
target triple = "i386-pc-linux-gnu"<br>
@.str581 = internal constant [52 x i8] c"---- test number %d failed. result %d  expected %d\0a\00"<br>
@.str584 = internal constant [61 x i8] c"---- %3d tests completed. %d tests PASSED. %d tests failed.\0a\00"<br>
@.str587 = internal constant [61 x i8] c"---- %3d tests completed. %d tests passed. %d tests FAILED.\0a\00"<br>
define void @check(i32* %result, i32* %expect, i32 %n) {<br>
L.entry:<br>
        %tests_passed = alloca i32<br>
        %tests_failed = alloca i32<br>
        %i = alloca i32<br>
        call void @llvm.dbg.value (metadata !{i32* %result}, i64 0, metadata !9), !dbg !4<br>
        call void @llvm.dbg.value (metadata !{i32* %expect}, i64 0, metadata !10), !dbg !4<br>
        call void @llvm.dbg.value (metadata !{i32 %n}, i64 0, metadata !11), !dbg !4<br>
        call void @llvm.dbg.declare (metadata !{i32* %tests_passed}, metadata !13), !dbg !4<br>
        store i32 0, i32* %tests_passed, !dbg !12<br>
        call void @llvm.dbg.declare (metadata !{i32* %tests_failed}, metadata !15), !dbg !4<br>
        store i32 0, i32* %tests_failed, !dbg !14<br>
        call void @llvm.dbg.declare (metadata !{i32* %i}, metadata !17), !dbg !4<br>
        store i32 0, i32* %i, !dbg !16<br>
        br label %L.B0000<br>
L.B0000:<br>
        %0 = load i32* %i, !dbg !16<br>
        %1 = icmp sge i32 %0,  %n, !dbg !16<br>
        br i1 %1, label %L.B0001, label %L.B0008, !dbg !16<br>
L.B0008:<br>
        %2 = bitcast i32* %expect to i8*, !dbg !18<br>
        %3 = load i32* %i, !dbg !18<br>
        %4 = mul i32 %3, 4, !dbg !18<br>
        %5 = getelementptr i8* %2, i32 %4, !dbg !18<br>
        %6 = bitcast i8* %5 to i32*, !dbg !18<br>
        %7 = load i32* %6, !dbg !18<br>
        %8 = bitcast i32* %result to i8*, !dbg !18<br>
        %9 = load i32* %i, !dbg !18<br>
        %10 = mul i32 %9, 4, !dbg !18<br>
        %11 = getelementptr i8* %8, i32 %10, !dbg !18<br>
        %12 = bitcast i8* %11 to i32*, !dbg !18<br>
        %13 = load i32* %12, !dbg !18<br>
        %14 = icmp ne i32 %7, %13, !dbg !18<br>
        br i1 %14, label %L.B0003, label %L.B0009, !dbg !18<br>
L.B0009:<br>
        %15 = load i32* %tests_passed, !dbg !18<br>
<br>
        %16 = add i32 %15, 1, !dbg !18<br>
        store i32 %16, i32* %tests_passed, !dbg !18<br>
        br label %L.B0004, !dbg !19<br>
L.B0003:<br>
        %17 = load i32* %tests_failed, !dbg !20<br>
<br>
        %18 = add i32 %17, 1, !dbg !20<br>
        store i32 %18, i32* %tests_failed, !dbg !20<br>
        %19 = bitcast [52 x i8]* @.str581 to i8*, !dbg !21<br>
        %20 = load i32* %i, !dbg !21<br>
        %21 = bitcast i32* %result to i8*, !dbg !21<br>
        %22 = load i32* %i, !dbg !21<br>
        %23 = mul i32 %22, 4, !dbg !21<br>
        %24 = getelementptr i8* %21, i32 %23, !dbg !21<br>
        %25 = bitcast i8* %24 to i32*, !dbg !21<br>
        %26 = load i32* %25, !dbg !21<br>
        %27 = bitcast i32* %expect to i8*, !dbg !21<br>
        %28 = load i32* %i, !dbg !21<br>
        %29 = mul i32 %28, 4, !dbg !21<br>
        %30 = getelementptr i8* %27, i32 %29, !dbg !21<br>
        %31 = bitcast i8* %30 to i32*, !dbg !21<br>
        %32 = load i32* %31, !dbg !21<br>
        %33 = call i32 (i8*, ...)*  @printf (i8* %19, i32 %20, i32 %26, i32 %32), !dbg !21<br>
        br label %L.B0004<br>
L.B0004:<br>
        %34 = load i32* %i, !dbg !22<br>
<br>
        %35 = add i32 %34, 1, !dbg !22<br>
        store i32 %35, i32* %i, !dbg !22<br>
        br label %L.B0000, !dbg !22<br>
L.B0001:<br>
        %36 = load i32* %tests_failed, !dbg !23<br>
        %37 = icmp ne i32 %36, 0, !dbg !23<br>
        br i1 %37, label %L.B0006, label %L.B0010, !dbg !23<br>
L.B0010:<br>
        %38 = bitcast [61 x i8]* @.str584 to i8*, !dbg !24<br>
        %39 = load i32* %tests_passed, !dbg !24<br>
        %40 = load i32* %tests_failed, !dbg !24<br>
        %41 = call i32 (i8*, ...)*  @printf (i8* %38, i32 %n, i32 %39, i32 %40), !dbg !24<br>
        br label %L.B0007, !dbg !25<br>
L.B0006:<br>
        %42 = bitcast [61 x i8]* @.str587 to i8*, !dbg !26<br>
        %43 = load i32* %tests_passed, !dbg !26<br>
        %44 = load i32* %tests_failed, !dbg !26<br>
        %45 = call i32 (i8*, ...)*  @printf (i8* %42, i32 %n, i32 %43, i32 %44), !dbg !26<br>
        br label %L.B0007<br>
L.B0007:<br>
        ret void, !dbg !27<br>
}<br>
<br>
declare void @llvm.dbg.value(metadata, i64, metadata)<br>
declare void @llvm.dbg.declare(metadata, metadata)<br>
declare i32 @printf(i8*,...)<br>
<br>
!llvm.dbg.sp =  !{!3} <br>
<br>
!llvm.dbg.lv.check =  !{!9, !10, !11} <br>
<br>
!0 =  metadata !{i32 589841, i32 0, i32 2, metadata !"check.c", metadata
 !".", metadata !" Seb Rel Dev-r02.27", i1 1, i1 0, metadata !"", i32 0}
 ; DW_TAG_compile_unit<br>
!1 =  metadata !{i32 589865, metadata !"check.c", metadata !".", metadata !0} ; DW_TAG_file_type<br>
!2 =  metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32
 0, i64 0, i64 0, i32 0, i32 0, i32 0, null, i32 0, i32 0} ; 
DW_TAG_subroutine_type<br>
!3 =  metadata !{i32 589870, i32 0, metadata !1, metadata !"check", 
metadata !"check", metadata !"", metadata !1, i32 7, metadata !2, i1 0, 
i1 1, i32 0, i32 0, i32 0, i32 0, i1 0, void (i32*, i32*, i32)* @check} ;
 DW_TAG_subprogram<br>
!4 =  metadata !{i32 0, i32 0, metadata !3, null} <br>
!5 =  metadata !{i32 589835, metadata !3, i32 7, i32 0, metadata !1, i32 0} ; DW_TAG_lexical_block<br>
!6 =  metadata !{i32 0, i32 0, metadata !5, null} <br>
!7 =  metadata !{i32 589860, metadata !0, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; DW_TAG_base_type<br>
!8 =  metadata !{i32 589839, metadata !0, metadata !"", null, i32 0, i64
 32, i64 32, i64 0, i32 0, metadata !7} ; DW_TAG_pointer_type<br>
!9 =  metadata !{i32 590081, metadata !3, metadata !"result", metadata 
!1, i32 16777216, metadata !8, i32 0} ; DW_TAG_arg_variable<br>
!10 =  metadata !{i32 590081, metadata !3, metadata !"expect", metadata 
!1, i32 33554432, metadata !8, i32 0} ; DW_TAG_arg_variable<br>
!11 =  metadata !{i32 590081, metadata !3, metadata !"n", metadata !1, i32 50331648, metadata !7, i32 0} ; DW_TAG_arg_variable<br>
!12 =  metadata !{i32 9, i32 0, metadata !5, null} <br>
!13 =  metadata !{i32 590080, metadata !5, metadata !"tests_passed", 
metadata !1, i32 0, metadata !7, i32 0} ; DW_TAG_auto_variable<br>
!14 =  metadata !{i32 10, i32 0, metadata !5, null} <br>
!15 =  metadata !{i32 590080, metadata !5, metadata !"tests_failed", 
metadata !1, i32 0, metadata !7, i32 0} ; DW_TAG_auto_variable<br>
!16 =  metadata !{i32 12, i32 0, metadata !5, null} <br>
!17 =  metadata !{i32 590080, metadata !5, metadata !"i", metadata !1, i32 0, metadata !7, i32 0} ; DW_TAG_auto_variable<br>
!18 =  metadata !{i32 13, i32 0, metadata !5, null} <br>
!19 =  metadata !{i32 14, i32 0, metadata !5, null} <br>
!20 =  metadata !{i32 15, i32 0, metadata !5, null} <br>
!21 =  metadata !{i32 17, i32 0, metadata !5, null} <br>
!22 =  metadata !{i32 19, i32 0, metadata !5, null} <br>
!23 =  metadata !{i32 20, i32 0, metadata !5, null} <br>
!24 =  metadata !{i32 22, i32 0, metadata !5, null} <br>
!25 =  metadata !{i32 23, i32 0, metadata !5, null} <br>
!26 =  metadata !{i32 25, i32 0, metadata !5, null} <br>
!27 =  metadata !{i32 26, i32 0, metadata !5, null} <br>
<br>
When I use llc 2.9 as follows:<br></font></font></blockquote></div></blockquote><div><br></div><div>Try using current trunk LLVM. There have been a *lot* of debug info improvements since 2.9.</div><div><br></div><div>-Jim</div><br><blockquote type="cite"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0.8ex; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); padding-left: 1ex; position: static; z-index: auto; "><font><font>
llc check.ll -march=x86 -o check.s<br>
and <br>
gcc -m32 -c check.s<br>
<br>
I've got a check.o file generated that targets x86 32-bit.<br>
Reading dwarf symbol using<br>
readelf --debug-dump check.o<br>
<br>
I've got for 'n' parameter:<br>
<br>
<2><71>: Abbrev Number: 3 (DW_TAG_formal_parameter)<br>
    <72>   DW_AT_name        : n        <br>
    <74>   DW_AT_type        : <0xb3>   <br>
    <78>   DW_AT_location    : 0x0      (location list)<br>
<br>
I would have expected a DW_AT_location that is FP related and not 0x0.<br>
Is my LL file incorrect ?<br>
Is there something I can use in metadata to enforce a FP relative DW_AT_location to be generated ?<br>
<br>
Thanks for your answers<br>
Best Regards<span class="HOEnZb"><font color="#888888"><br>
Seb</font></span></font></font>
</blockquote></div><br>
_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br></blockquote></div><br></body></html>