blob: 57bd3bf2af547c7f5a7eb502132f5163a0b59627 [file] [log] [blame]
Reid Kleckner94ee0722018-12-17 21:49:35 +00001# RUN: llvm-mc -triple x86_64-windows-msvc %s -filetype=obj -o %t.o
2# RUN: llvm-pdbutil dump -symbols %t.o | FileCheck %s
3
4# We used to have a label flushing bug down below by the "BUG" comments that
5# would cause the S_DEFRANGE_FRAMEPOINTER_REL records to appear missing. In
6# practice, the label would extend past the def range, so it would appear that
7# every local was optimized out or had no def ranges.
8
9# CHECK: S_GPROC32_ID {{.*}} `max`
10# CHECK: S_LOCAL [size = {{.*}}] `a`
11# CHECK: S_DEFRANGE_FRAMEPOINTER_REL
12# CHECK: S_LOCAL [size = {{.*}}] `b`
13# CHECK: S_DEFRANGE_FRAMEPOINTER_REL
14
15 .text
16 .def @feat.00;
17 .scl 3;
18 .type 0;
19 .endef
20 .globl @feat.00
21.set @feat.00, 0
22 .def max;
23 .scl 2;
24 .type 32;
25 .endef
26 .globl max # -- Begin function max
27 .p2align 4, 0x90
28max: # @max
29.Lfunc_begin0:
30 .cv_func_id 0
31 .cv_file 1 "C:\\src\\llvm-project\\build\\t.c" "44649E6EBC4FC8880991A1AF1F2D2990" 1
32 .cv_loc 0 1 1 0 # t.c:1:0
33.seh_proc max
34# %bb.0: # %entry
35 pushq %rax
36 .seh_stackalloc 8
37 .seh_endprologue
38 movl %edx, 4(%rsp)
39 movl %ecx, (%rsp)
40.Ltmp0:
41 .cv_loc 0 1 2 0 # t.c:2:0
42 movl (%rsp), %eax
43 cmpl 4(%rsp), %eax
44 jle .LBB0_2
45# %bb.1: # %cond.true
46 movl (%rsp), %eax
47 jmp .LBB0_3
48.LBB0_2: # %cond.false
49 movl 4(%rsp), %eax
50.LBB0_3: # %cond.end
51 popq %rcx
52 retq
53.Ltmp1:
54.Lfunc_end0:
55 .seh_handlerdata
56 .text
57 .seh_endproc
58 # -- End function
59 .section .debug$S,"dr"
60 .p2align 2
61 .long 4
62 .long 241 # Symbol subsection for max
63 .long .Ltmp7-.Ltmp6 # Subsection size
64.Ltmp6:
65 .short .Ltmp9-.Ltmp8 # Record length
66.Ltmp8:
67 .short 4423 # Record kind: S_GPROC32_ID
68 .long 0 # PtrParent
69 .long 0 # PtrEnd
70 .long 0 # PtrNext
71 .long .Lfunc_end0-max # Code size
72 .long 0 # Offset after prologue
73 .long 0 # Offset before epilogue
74 .long 4098 # Function type index
75 .secrel32 max # Function section relative address
76 .secidx max # Function section index
77 .byte 0 # Flags
78 .asciz "max" # Function name
79.Ltmp9:
80 .short .Ltmp11-.Ltmp10 # Record length
81.Ltmp10:
82 .short 4114 # Record kind: S_FRAMEPROC
83 .long 8 # FrameSize
84 .long 0 # Padding
85 .long 0 # Offset of padding
86 .long 0 # Bytes of callee saved registers
87 .long 0 # Exception handler offset
88 .short 0 # Exception handler section
89 .long 81920 # Flags (defines frame register)
90.Ltmp11:
91 .short .Ltmp13-.Ltmp12 # Record length
92.Ltmp12:
93 .short 4414 # Record kind: S_LOCAL
94 .long 18 # TypeIndex
95 .short 1 # Flags
96 .asciz "a"
97 # BUG
98 .p2align 2
99.Ltmp13:
100 .cv_def_range .Ltmp0 .Ltmp1, "B\021\000\000\000\000"
101 .short .Ltmp15-.Ltmp14 # Record length
102.Ltmp14:
103 .short 4414 # Record kind: S_LOCAL
104 .long 18 # TypeIndex
105 .short 1 # Flags
106 .asciz "b"
107 # BUG
108 .p2align 2
109.Ltmp15:
110 .cv_def_range .Ltmp0 .Ltmp1, "B\021\004\000\000\000"
111 .short 2 # Record length
112 .short 4431 # Record kind: S_PROC_ID_END
113.Ltmp7:
114 .p2align 2
115 .cv_linetable 0, max, .Lfunc_end0
116 .cv_filechecksums # File index to string table offset subsection
117 .cv_stringtable # String table
118 .long 241
119 .long .Ltmp17-.Ltmp16 # Subsection size
120.Ltmp16:
121.Ltmp17:
122 .p2align 2
123 .section .debug$T,"dr"
124 .p2align 2
125 .long 4 # Debug section magic
126 # ArgList (0x1000) {
127 # TypeLeafKind: LF_ARGLIST (0x1201)
128 # NumArgs: 2
129 # Arguments [
130 # ArgType: long (0x12)
131 # ArgType: long (0x12)
132 # ]
133 # }
134 .byte 0x0e, 0x00, 0x01, 0x12
135 .byte 0x02, 0x00, 0x00, 0x00
136 .byte 0x12, 0x00, 0x00, 0x00
137 .byte 0x12, 0x00, 0x00, 0x00
138 # Procedure (0x1001) {
139 # TypeLeafKind: LF_PROCEDURE (0x1008)
140 # ReturnType: long (0x12)
141 # CallingConvention: NearC (0x0)
142 # FunctionOptions [ (0x0)
143 # ]
144 # NumParameters: 2
145 # ArgListType: (long, long) (0x1000)
146 # }
147 .byte 0x0e, 0x00, 0x08, 0x10
148 .byte 0x12, 0x00, 0x00, 0x00
149 .byte 0x00, 0x00, 0x02, 0x00
150 .byte 0x00, 0x10, 0x00, 0x00
151 # FuncId (0x1002) {
152 # TypeLeafKind: LF_FUNC_ID (0x1601)
153 # ParentScope: 0x0
154 # FunctionType: long (long, long) (0x1001)
155 # Name: max
156 # }
157 .byte 0x0e, 0x00, 0x01, 0x16
158 .byte 0x00, 0x00, 0x00, 0x00
159 .byte 0x01, 0x10, 0x00, 0x00
160 .byte 0x6d, 0x61, 0x78, 0x00
161