xref: /llvm-project/llvm/test/MC/COFF/cv-inline-linetable.s (revision 75cdab6dc2453a508157a9c383b93373a93078d6)
1# RUN: llvm-mc -triple=i686-pc-win32 -filetype=obj %s -o %t.o
2# RUN: llvm-readobj --codeview %t.o | FileCheck %s
3# RUN: llvm-objdump --no-print-imm-hex -d %t.o | FileCheck %s --check-prefix=ASM
4# RUN: llvm-pdbutil dump -symbols %t.o | FileCheck %s --check-prefix=PDB
5	.text
6	.def	 @feat.00;
7	.scl	3;
8	.type	0;
9	.endef
10	.globl	@feat.00
11@feat.00 = 1
12	.def	 "?baz@@YAXXZ";
13	.scl	2;
14	.type	32;
15	.endef
16	.globl	"?baz@@YAXXZ"
17	.p2align	4, 0x90
18"?baz@@YAXXZ":                          # @"\01?baz@@YAXXZ"
19Lfunc_begin0:
20	.cv_file	1 "D:\\src\\llvm\\build\\t.cpp"
21	.cv_func_id 0
22	.cv_inline_site_id 1 within 0 inlined_at 1 15 3
23	.cv_inline_site_id 2 within 1 inlined_at 1 10 3
24	.cv_loc	0 1 13 0 is_stmt 0      # t.cpp:13:0
25# %bb.0:                                # %entry
26	pushl	%eax
27	.cv_loc	0 1 14 5                # t.cpp:14:5
28	addl	$6, "?x@@3HC"
29	.cv_loc	1 1 9 5                 # t.cpp:9:5
30	addl	$4, "?x@@3HC"
31	.cv_loc	2 1 3 7                 # t.cpp:3:7
32	movl	$1, (%esp)
33	leal	(%esp), %eax
34	.cv_loc	2 1 4 5                 # t.cpp:4:5
35	addl	%eax, "?x@@3HC"
36	.cv_loc	2 1 5 5                 # t.cpp:5:5
37	addl	$2, "?x@@3HC"
38	.cv_loc	2 1 6 5                 # t.cpp:6:5
39	addl	$3, "?x@@3HC"
40	.cv_loc	1 1 11 5                # t.cpp:11:5
41	addl	$5, "?x@@3HC"
42	.cv_loc	0 1 16 5                # t.cpp:16:5
43	addl	$7, "?x@@3HC"
44	.cv_loc	0 1 17 1                # t.cpp:17:1
45	popl	%eax
46	retl
47Lfunc_end0:
48
49# Check the disassembly so we have accurate instruction offsets in hex.
50# ASM-LABEL: <?baz@@YAXXZ>:
51# ASM-NEXT:       0: {{.*}} pushl   %eax
52# ASM-NEXT:       1: {{.*}} addl    $6, 0
53# ASM-NEXT:       8: {{.*}} addl    $4, 0
54# ASM-NEXT:       f: {{.*}} movl    $1, (%esp)
55# ASM-NEXT:      16: {{.*}} leal    (%esp), %eax
56# ASM-NEXT:      19: {{.*}} addl    %eax, 0
57# ASM-NEXT:      1f: {{.*}} addl    $2, 0
58# ASM-NEXT:      26: {{.*}} addl    $3, 0
59# ASM-NEXT:      2d: {{.*}} addl    $5, 0
60# ASM-NEXT:      34: {{.*}} addl    $7, 0
61# ASM-NEXT:      3b: {{.*}} popl    %eax
62# ASM-NEXT:      3c: {{.*}} retl
63
64# PDB: S_GPROC32_ID {{.*}} `baz`
65# PDB: S_INLINESITE
66# PDB-NEXT: inlinee = 0x1003 (bar), parent = 0, end = 0
67# PDB-NEXT:   0B08      code 0x8 (+0x8) line 0 (-0)
68# PDB-NEXT:   0B27      code 0xF (+0x7) line 1 (+1)
69# PDB-NEXT:   0602      line 2 (+1)
70# PDB-NEXT:   031E      code 0x2D (+0x1E)
71# PDB-NEXT:   0407      code end 0x34 (+0x7)
72# PDB: S_INLINESITE
73# PDB-NEXT: inlinee = 0x1004 (foo), parent = 0, end = 0
74# PDB-NEXT:    0B0F      code 0xF (+0xF) line 0 (-0)
75# PDB-NEXT:    0B2A      code 0x19 (+0xA) line 1 (+1)
76# PDB-NEXT:    0B26      code 0x1F (+0x6) line 2 (+1)
77# PDB-NEXT:    0B27      code 0x26 (+0x7) line 3 (+1)
78# PDB-NEXT:    0407      code end 0x2D (+0x7)
79# PEB: S_INLINESITE_END
80# PEB: S_INLINESITE_END
81# PEB: S_PROC_ID_END
82
83	.section	.debug$T,"dr"
84	.long	4
85	.short	6
86	.short	4609
87	.long	0
88	.short	14
89	.short	4104
90	.asciz	"\003\000\000\000\000\000\000\000\000\020\000"
91	.short	14
92	.short	5633
93	.asciz	"\000\000\000\000\001\020\000"
94	.ascii	"baz"
95	.byte	0
96	.short	14
97	.short	5633
98	.asciz	"\000\000\000\000\001\020\000"
99	.ascii	"bar"
100	.byte	0
101	.short	14
102	.short	5633
103	.asciz	"\000\000\000\000\001\020\000"
104	.ascii	"foo"
105	.byte	0
106	.section	.debug$S,"dr"
107	.long	4
108	.long	241                     # Symbol subsection for baz
109	.long	Ltmp1-Ltmp0
110Ltmp0:
111	.short	Ltmp3-Ltmp2
112Ltmp2:
113	.short	4423
114	.zero	12
115	.long	Lfunc_end0-"?baz@@YAXXZ"
116	.zero	12
117	.secrel32	"?baz@@YAXXZ"
118	.secidx	"?baz@@YAXXZ"
119	.byte	0
120	.ascii	"baz"
121	.byte	0
122Ltmp3:
123	.short	Ltmp5-Ltmp4
124Ltmp4:
125	.short	4429
126	.long 0 # parent
127	.long 0 # end
128	.long 0x1003 # inlinee, bar
129	.cv_inline_linetable	1 1 9 Lfunc_begin0 Lfunc_end0
130# CHECK:    InlineSiteSym {
131# CHECK:      PtrParent: 0x0
132# CHECK:      PtrEnd: 0x0
133# CHECK:      Inlinee: bar (0x1003)
134# CHECK:      BinaryAnnotations [
135# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0x8, LineOffset: 0}
136# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0x7, LineOffset: 1}
137# CHECK-NEXT:   ChangeLineOffset: 1
138# CHECK-NEXT:   ChangeCodeOffset: 0x1E
139# CHECK-NEXT:   ChangeCodeLength: 0x7
140# CHECK-NEXT: ]
141# CHECK:    }
142Ltmp5:
143	.short	Ltmp7-Ltmp6
144Ltmp6:
145	.short	4429
146	.asciz	"\000\000\000\000\000\000\000\000\004\020\000"
147	.cv_inline_linetable	2 1 3 Lfunc_begin0 Lfunc_end0
148# CHECK:    InlineSiteSym {
149# CHECK:      PtrParent: 0x0
150# CHECK:      PtrEnd: 0x0
151# CHECK:      Inlinee: foo (0x1004)
152# CHECK:      BinaryAnnotations [
153# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0xF, LineOffset: 0}
154# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0xA, LineOffset: 1}
155# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0x6, LineOffset: 1}
156# CHECK-NEXT:   ChangeCodeOffsetAndLineOffset: {CodeOffset: 0x7, LineOffset: 1}
157# CHECK-NEXT:   ChangeCodeLength: 0x7
158# CHECK-NEXT: ]
159# CHECK:    }
160Ltmp7:
161	.short	2
162	.short	4430
163# CHECK:    InlineSiteEnd {
164# CHECK:    }
165	.short	2
166	.short	4430
167# CHECK:    InlineSiteEnd {
168# CHECK:    }
169	.short	2
170	.short	4431
171Ltmp1:
172	.p2align 2
173	.cv_linetable	0, "?baz@@YAXXZ", Lfunc_end0
174	.cv_filechecksums               # File index to string table offset subsection
175	.cv_stringtable                 # String table
176
177# CHECK-LABEL:  FunctionLineTable [
178# CHECK:    LinkageName: ?baz@@YAXXZ
179# CHECK:    Flags: 0x1
180# CHECK:    CodeSize: 0x3D
181# CHECK:    FilenameSegment [
182# CHECK:      Filename: D:\src\llvm\build\t.cpp (0x0)
183# CHECK:      +0x0 [
184# CHECK:        LineNumberStart: 13
185# CHECK:      ]
186# CHECK:      +0x1 [
187# CHECK:        LineNumberStart: 14
188# CHECK:      ]
189# CHECK:      +0x8 [
190# CHECK:        LineNumberStart: 15
191# CHECK:      ]
192#	There shouldn't be any other line number entries because all the other
193#	.cv_locs are on line 15 where the top-level inline call site is.
194# CHECK-NOT: LineNumberStart
195# CHECK:      +0x34 [
196# CHECK:        LineNumberStart: 16
197# CHECK:      ]
198# CHECK:      +0x3B [
199# CHECK:        LineNumberStart: 17
200# CHECK:      ]
201# CHECK:    ]
202# CHECK:  ]
203