[PATCH] D19522: Read discriminators correctly from object file.
Eric Christopher via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 25 23:18:00 PDT 2016
Formatting, a comment about the discriminator in the comment there and
lgtm.
On Mon, Apr 25, 2016, 9:48 PM Dehao Chen <danielcdh at gmail.com> wrote:
> danielcdh created this revision.
> danielcdh added reviewers: dblaikie, dnovillo, echristo.
> danielcdh added a subscriber: llvm-commits.
> Herald added a subscriber: joker.eph.
>
> This is the follow-up patch for http://reviews.llvm.org/D19436
> * Update the discriminator reading algorithm to match the assignment
> algorithm.
> * Add test to cover the new algorithm.
>
> http://reviews.llvm.org/D19522
>
> Files:
> lib/DebugInfo/DWARF/DWARFDebugLine.cpp
> test/DebugInfo/X86/discriminator2.ll
>
> Index: test/DebugInfo/X86/discriminator2.ll
> ===================================================================
> --- /dev/null
> +++ test/DebugInfo/X86/discriminator2.ll
> @@ -0,0 +1,43 @@
> +; RUN: llc -mtriple=i386-unknown-unknown -mcpu=core2 %s -o %t
> -filetype=obj
> +; RUN: llvm-dwarfdump -debug-dump=line %t | FileCheck %s
> +
> +; Function Attrs: uwtable
> +define void @_Z3bazv() #0 !dbg !6 {
> + %1 = call i32 @_Z3barv(), !dbg !9
> + %2 = call i32 @_Z3barv(), !dbg !10
> + call void @_Z3fooii(i32 %1, i32 %2), !dbg !11
> + %3 = call i32 @_Z3barv(), !dbg !13
> + ret void, !dbg !14
> +}
> +
> +declare void @_Z3fooii(i32, i32) #1
> +
> +declare i32 @_Z3barv() #1
> +
> +attributes #0 = { uwtable "disable-tail-calls"="false"
> "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
> "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
> "no-jump-tables"="false" "no-nans-fp-math"="false"
> "stack-protector-buffer-size"="8" "target-cpu"="x86-64"
> "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false"
> "use-soft-float"="false" }
> +attributes #1 = { "disable-tail-calls"="false"
> "less-precise-fpmad"="false" "no-frame-pointer-elim"="true"
> "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false"
> "no-nans-fp-math"="false" "stack-protector-buffer-size"="8"
> "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87"
> "unsafe-fp-math"="false" "use-soft-float"="false" }
> +
> +!llvm.dbg.cu = !{!0}
> +!llvm.module.flags = !{!3, !4}
> +!llvm.ident = !{!5}
> +
> +!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1,
> producer: "clang version 3.9.0 (trunk 267219)", isOptimized: false,
> runtimeVersion: 0, emissionKind: FullDebug, enums: !2)
> +!1 = !DIFile(filename: "test.cc", directory: ".")
> +!2 = !{}
> +!3 = !{i32 2, !"Dwarf Version", i32 4}
> +!4 = !{i32 2, !"Debug Info Version", i32 3}
> +!5 = !{!"clang version 3.9.0 (trunk 267219)"}
> +!6 = distinct !DISubprogram(name: "baz", linkageName: "_Z3bazv", scope:
> !1, file: !1, line: 3, type: !7, isLocal: false, isDefinition: true,
> scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false, unit: !0,
> variables: !2)
> +!7 = !DISubroutineType(types: !8)
> +!8 = !{null}
> +!9 = !DILocation(line: 4, column: 7, scope: !6)
> +!10 = !DILocation(line: 5, column: 14, scope: !6)
> +!11 = !DILocation(line: 4, column: 3, scope: !12)
> +!12 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 1)
> +!13 = !DILocation(line: 5, column: 21, scope: !12)
> +!14 = !DILocation(line: 6, column: 1, scope: !6)
> +
> +; CHECK: Address Line Column File ISA Discriminator Flags
> +; CHECK: ------------------ ------ ------ ------ --- -------------
> -------------
> +; CHECK: {{.*}} 4 3 1 0 1 {{.*}}
> +; CHECK: {{.*}} 5 21 1 0 1 {{.*}}
> Index: lib/DebugInfo/DWARF/DWARFDebugLine.cpp
> ===================================================================
> --- lib/DebugInfo/DWARF/DWARFDebugLine.cpp
> +++ lib/DebugInfo/DWARF/DWARFDebugLine.cpp
> @@ -375,10 +375,15 @@
> break;
>
> case DW_LNS_advance_line:
> - // Takes a single signed LEB128 operand and adds that value to
> - // the line register of the state machine.
> - State.Row.Line += debug_line_data.getSLEB128(offset_ptr);
> - break;
> + {
> + // Takes a single signed LEB128 operand and adds that value to
> + // the line register of the state machine.
> + int32_t line_offset = debug_line_data.getSLEB128(offset_ptr);
> + State.Row.Line += line_offset;
> + if (line_offset != 0)
> + State.Row.Discriminator = 0;
> + break;
> + }
>
> case DW_LNS_set_file:
> // Takes a single unsigned LEB128 operand and stores it in the
> file
> @@ -509,6 +514,8 @@
> State.Row.Line += line_offset;
> State.Row.Address += addr_offset;
> State.appendRowToMatrix(*offset_ptr);
> + if (line_offset != 0)
> + State.Row.Discriminator = 0;
> }
> }
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160426/7ccefaa3/attachment.html>
More information about the llvm-commits
mailing list