mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-25 04:35:32 -04:00
45b741c841
This patch adds dumping of line table instructions as well as the final state at each specified pc value in verbose mode. This is essentially the same as the default in Darwin's dwarfdump. Dumping the actual line table opcodes can be particularly useful for something like debugging a bad `.debug_line` section. Differential revision: https://reviews.llvm.org/D37971 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313910 91177308-0d34-0410-b5e6-96231b3b80d8
122 lines
5.0 KiB
YAML
122 lines
5.0 KiB
YAML
# RUN: llc -filetype=obj -o - %s | llvm-dwarfdump -a - | FileCheck %s
|
|
#
|
|
# This testcase has an implicit def pseudo-iunstruction with a debug location.
|
|
#
|
|
# CHECK: .debug_info contents:
|
|
# CHECK: DW_TAG_subprogram
|
|
# CHECK: DW_AT_low_pc (0x0000000000000000)
|
|
# CHECK-NOT: DW_TAG
|
|
# CHECK: DW_AT_specification {{.*}} "_ZN1C5m_fn3Ev"
|
|
# CHECK-NOT: DW_TAG
|
|
# Here should not be an inlined subroutine with 0 length.
|
|
# CHECK: NULL
|
|
#
|
|
# CHECK: Address Line Column File ISA Discriminator Flags
|
|
# CHECK-NEXT: ---
|
|
# CHECK-NEXT: 25 0 1 0 0 is_stmt
|
|
# CHECK-NEXT: 29 28 1 0 0 is_stmt prologue_end
|
|
# CHECK-NEXT: 29 28 1 0 0 is_stmt end_sequence
|
|
--- |
|
|
source_filename = "t.ll"
|
|
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-apple-macosx"
|
|
|
|
%class.E = type { %class.D }
|
|
%class.D = type { %class.B }
|
|
%class.B = type { %class.A, %class.A }
|
|
%class.A = type { i8 }
|
|
%class.C = type <{ %class.E*, %class.B, [2 x i8] }>
|
|
|
|
@a = local_unnamed_addr global %class.E* null, align 4
|
|
|
|
define i32 @_ZN1C5m_fn3Ev(%class.C* nocapture) local_unnamed_addr align 2 !dbg !6 {
|
|
%2 = alloca %class.B, align 1
|
|
%3 = load %class.E*, %class.E** @a, align 4
|
|
%4 = icmp eq %class.E* %3, null
|
|
br i1 %4, label %10, label %5
|
|
|
|
; <label>:5: ; preds = %1
|
|
%6 = bitcast %class.C* %0 to %class.D**
|
|
%7 = load %class.D*, %class.D** %6, align 4
|
|
%8 = bitcast %class.D* %7 to i8*
|
|
%9 = load i8, i8* %8, align 1
|
|
br label %10
|
|
|
|
; <label>:10: ; preds = %5, %1
|
|
%11 = phi i8 [ %9, %5 ], [ undef, %1 ], !dbg !10
|
|
%12 = getelementptr inbounds %class.C, %class.C* %0, i32 0, i32 1, i32 0, i32 0
|
|
store i8 %11, i8* %12, align 1, !dbg !14
|
|
ret i32 undef
|
|
}
|
|
|
|
!llvm.dbg.cu = !{!0}
|
|
!llvm.module.flags = !{!3, !4, !5}
|
|
|
|
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "Apple LLVM version 8.1.0 (clang-802.0.30.3)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, globals: !2)
|
|
!1 = !DIFile(filename: "test.ii", directory: "/")
|
|
!2 = !{}
|
|
!3 = !{i32 2, !"Dwarf Version", i32 4}
|
|
!4 = !{i32 2, !"Debug Info Version", i32 3}
|
|
!5 = !{i32 1, !"PIC Level", i32 2}
|
|
!6 = distinct !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", scope: !7, file: !1, line: 25, type: !8, isLocal: false, isDefinition: true, scopeLine: 25, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !9, variables: !2)
|
|
!7 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "C", file: !1, line: 14, size: 64, align: 32, elements: !2, identifier: "_ZTS1C")
|
|
!8 = !DISubroutineType(types: !2)
|
|
!9 = !DISubprogram(name: "m_fn3", linkageName: "_ZN1C5m_fn3Ev", scope: !7, file: !1, line: 15, type: !8, isLocal: false, isDefinition: false, scopeLine: 15, flags: DIFlagPrototyped, isOptimized: true)
|
|
!10 = !DILocation(line: 99, column: 9, scope: !11, inlinedAt: !14)
|
|
!11 = distinct !DISubprogram(name: "m_fn1", linkageName: "_ZN1A5m_fn1Ev", scope: !12, file: !1, line: 5, type: !8, isLocal: false, isDefinition: true, scopeLine: 5, flags: DIFlagPrototyped, isOptimized: true, unit: !0, declaration: !13, variables: !2)
|
|
!12 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "A", file: !1, line: 1, size: 8, align: 8, elements: !2, identifier: "_ZTS1A")
|
|
!13 = !DISubprogram(name: "m_fn1", linkageName: "_ZN1A5m_fn1Ev", scope: !12, file: !1, line: 5, type: !8, isLocal: false, isDefinition: false, scopeLine: 5, flags: DIFlagPublic | DIFlagPrototyped, isOptimized: true)
|
|
!14 = !DILocation(line: 29, column: 28, scope: !6)
|
|
|
|
...
|
|
---
|
|
name: _ZN1C5m_fn3Ev
|
|
alignment: 4
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
tracksRegLiveness: true
|
|
liveins:
|
|
- { reg: '%rdi' }
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 8
|
|
adjustsStack: false
|
|
hasCalls: false
|
|
maxCallFrameSize: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
#stack:
|
|
# - { id: 0, name: '<unnamed alloca>', offset: -16, size: 2, alignment: 8 }
|
|
body: |
|
|
bb.0 (%ir-block.1):
|
|
successors: %bb.1(0x30000000), %bb.2(0x50000000)
|
|
liveins: %rdi
|
|
|
|
CMP64mi8 %rip, 1, _, @a, _, 0, implicit-def %eflags :: (dereferenceable load 8 from @a, align 4)
|
|
JE_1 %bb.1, implicit %eflags
|
|
|
|
bb.2 (%ir-block.5):
|
|
liveins: %rdi
|
|
|
|
%rax = MOV64rm %rdi, 1, _, 0, _ :: (load 8 from %ir.6, align 4)
|
|
%al = MOV8rm killed %rax, 1, _, 0, _ :: (load 1 from %ir.8)
|
|
MOV8mr killed %rdi, 1, _, 8, _, killed %al, debug-location !14 :: (store 1 into %ir.12)
|
|
RETQ undef %eax
|
|
|
|
bb.1:
|
|
liveins: %rdi
|
|
|
|
%al = IMPLICIT_DEF debug-location !10
|
|
MOV8mr killed %rdi, 1, _, 8, _, killed %al, debug-location !14 :: (store 1 into %ir.12)
|
|
RETQ undef %eax
|
|
|
|
...
|