1; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -O0 < %s | FileCheck --check-prefix=X86 %s
2; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -o - -O0 < %s | llvm-mc -triple=i686-pc-win32 -filetype=obj | llvm-readobj -S --sr --codeview --section-symbols - | FileCheck --check-prefix=OBJ32 %s
3; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -O0 < %s | FileCheck --check-prefix=X64 %s
4; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -o - -O0 < %s | llvm-mc -triple=x86_64-pc-win32 -filetype=obj | llvm-readobj -S --sr --codeview --section-symbols - | FileCheck --check-prefix=OBJ64 %s
5
6; This LL file was generated by running clang on the following code:
7; D:\source.c:
8;  1 void z(void);
9;  2
10;  3 void x(void) {
11;  4   z();
12;  5 }
13;  6
14;  7 void y(void) {
15;  8   z();
16;  9 }
17; 10
18; 11 void f(void) {
19; 12   x();
20; 13   y();
21; 14   z();
22; 15 }
23
24
25; X86-LABEL: _x:
26; X86:      # %bb.
27; X86:      .cv_file 1 "D:\\source.c"
28; X86:      .cv_loc 0 1 4 42 # source.c:4:42
29; X86:      calll   _z
30; X86:      .cv_loc 0 1 5 43 # source.c:5:43
31; X86:      ret
32; X86:      [[END_OF_X:.?Lfunc_end.*]]:
33;
34; X86-LABEL: _y:
35; X86:      # %bb.
36; X86:      .cv_loc 1 1 8 52 # source.c:8:52
37; X86:      calll   _z
38; X86:      .cv_loc 1 1 9 53 # source.c:9:53
39; X86:      ret
40; X86:      [[END_OF_Y:.?Lfunc_end.*]]:
41;
42; X86-LABEL: _f:
43; X86:      # %bb.
44; X86:      .cv_loc 2 1 12 62 # source.c:12:62
45; X86:      calll   _x
46; X86:      .cv_loc 2 1 13 63 # source.c:13:63
47; X86:      calll   _y
48; X86:      .cv_loc 2 1 14 72 # source.c:14:72
49; X86:      calll   _z
50; X86:      .cv_loc 2 1 15 73 # source.c:15:73
51; X86:      ret
52; X86:      [[END_OF_F:.?Lfunc_end.*]]:
53;
54; X86-LABEL: .section        .debug$S,"dr"
55; X86-NEXT: .p2align 2
56; X86-NEXT: .long   4
57; X86-NEXT: .long   241
58; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
59; Compiler information record
60; X86-NEXT: [[COMPILE_START]]:
61; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
62; X86:      [[COMPILE_END]]:
63; X86-NEXT: .p2align 2
64; X86-NEXT: .cv_fpo_data _x
65; Symbol subsection for x
66; X86-NEXT: .long   241
67; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]] #
68; X86-NEXT: [[F1_START]]:
69; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
70; X86-NEXT: [[PROC_SEGMENT_START]]:
71; X86-NEXT: .short  4422
72; X86-NEXT: .long   0
73; X86-NEXT: .long   0
74; X86-NEXT: .long   0
75; X86-NEXT: .long [[END_OF_X]]-_x
76; X86-NEXT: .long   0
77; X86-NEXT: .long   0
78; X86-NEXT: .long   4098
79; X86-NEXT: .secrel32 _x
80; X86-NEXT: .secidx _x
81; X86-NEXT: .byte   0
82; X86-NEXT: .asciz "x"
83; X86-NEXT: .p2align 2
84; X86-NEXT: [[PROC_SEGMENT_END]]:
85; X86-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
86; X86-NEXT: [[FPROC_BEG]]:
87; X86-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
88; X86-NEXT: .long   0                       # FrameSize
89; X86-NEXT: .long   0                       # Padding
90; X86-NEXT: .long   0                       # Offset of padding
91; X86-NEXT: .long   0                       # Bytes of callee saved registers
92; X86-NEXT: .long   0                       # Exception handler offset
93; X86-NEXT: .short  0                       # Exception handler section
94; X86-NEXT: .long   0                       # Flags (defines frame register)
95; X86-NEXT: .p2align 2
96; X86-NEXT: [[FPROC_END]]:
97; X86-NEXT: .short  2
98; X86-NEXT: .short  4431
99; X86-NEXT: [[F1_END]]:
100; X86-NEXT: .p2align 2
101; Line table subsection for x
102; X86: .cv_linetable 0, _x, [[END_OF_X]]
103; Symbol subsection for y
104; X86-NEXT: .cv_fpo_data _y
105; X86-NEXT: .long   241
106; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
107; X86-NEXT: [[COMPILE_START]]:
108; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
109; X86-NEXT: [[PROC_SEGMENT_START]]:
110; X86-NEXT: .short  4423
111; X86-NEXT: .long   0
112; X86-NEXT: .long   0
113; X86-NEXT: .long   0
114; X86-NEXT: .long [[END_OF_Y]]-_y
115; X86-NEXT: .long   0
116; X86-NEXT: .long   0
117; X86-NEXT: .long   4099
118; X86-NEXT: .secrel32 _y
119; X86-NEXT: .secidx _y
120; X86-NEXT: .byte   0
121; X86-NEXT: .asciz "y"
122; X86-NEXT: .p2align 2
123; X86-NEXT: [[PROC_SEGMENT_END]]:
124; X86-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
125; X86-NEXT: [[FPROC_BEG]]:
126; X86-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
127; X86-NEXT: .long   0                       # FrameSize
128; X86-NEXT: .long   0                       # Padding
129; X86-NEXT: .long   0                       # Offset of padding
130; X86-NEXT: .long   0                       # Bytes of callee saved registers
131; X86-NEXT: .long   0                       # Exception handler offset
132; X86-NEXT: .short  0                       # Exception handler section
133; X86-NEXT: .long   0                       # Flags (defines frame register)
134; X86-NEXT: .p2align 2
135; X86-NEXT: [[FPROC_END]]:
136; X86-NEXT: .short  2
137; X86-NEXT: .short  4431
138; X86-NEXT: [[COMPILE_END]]:
139; X86-NEXT: .p2align 2
140; Line table subsection for y
141; X86: .cv_linetable 1, _y, [[END_OF_Y]]
142; Symbol subsection for f
143; X86-NEXT: .cv_fpo_data _f
144; X86-NEXT: .long   241
145; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
146; X86-NEXT: [[COMPILE_START]]:
147; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
148; X86-NEXT: [[PROC_SEGMENT_START]]:
149; X86-NEXT: .short  4423
150; X86-NEXT: .long   0
151; X86-NEXT: .long   0
152; X86-NEXT: .long   0
153; X86-NEXT: .long [[END_OF_F]]-_f
154; X86-NEXT: .long   0
155; X86-NEXT: .long   0
156; X86-NEXT: .long   4100
157; X86-NEXT: .secrel32 _f
158; X86-NEXT: .secidx _f
159; X86-NEXT: .byte   0
160; X86-NEXT: .asciz "f"
161; X86-NEXT: .p2align 2
162; X86-NEXT: [[PROC_SEGMENT_END]]:
163; X86-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
164; X86-NEXT: [[FPROC_BEG]]:
165; X86-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
166; X86-NEXT: .long   0                       # FrameSize
167; X86-NEXT: .long   0                       # Padding
168; X86-NEXT: .long   0                       # Offset of padding
169; X86-NEXT: .long   0                       # Bytes of callee saved registers
170; X86-NEXT: .long   0                       # Exception handler offset
171; X86-NEXT: .short  0                       # Exception handler section
172; X86-NEXT: .long   0                       # Flags (defines frame register)
173; X86-NEXT: .p2align 2
174; X86-NEXT: [[FPROC_END]]:
175; X86-NEXT: .short  2
176; X86-NEXT: .short  4431
177; X86-NEXT: [[COMPILE_END]]:
178; X86-NEXT: .p2align 2
179; Line table subsection for f
180; X86: .cv_linetable 2, _f, [[END_OF_F]]
181; X86: .cv_filechecksums
182; X86: .cv_stringtable
183
184; OBJ32:    Section {
185; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
186; OBJ32:      Characteristics [ (0x42300040)
187; OBJ32:      ]
188; OBJ32:      Subsection [
189; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
190; OBJ32: 	Compile3Sym
191; OBJ32:      ]
192; OBJ32:      Subsection [
193; OBJ32-NEXT:   SubSectionType: FrameData (0xF5)
194; OBJ32:      ]
195; OBJ32:      Subsection [
196; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
197; OBJ32:        {{.*}}Proc{{.*}}Sym {
198; OBJ32:          Kind: S_LPROC32_ID (0x1146)
199; OBJ32:          CodeSize: 0x6
200; OBJ32:          DisplayName: x
201; OBJ32:          LinkageName: _x
202; OBJ32:        }
203; OBJ32:        ProcEnd {
204; OBJ32:        }
205; OBJ32-NEXT: ]
206; OBJ32:      Subsection [
207; OBJ32-NEXT:   SubSectionType: Lines (0xF2)
208; OBJ32:      ]
209; OBJ32:      Subsection [
210; OBJ32-NEXT:   SubSectionType: FrameData (0xF5)
211; OBJ32:      ]
212; OBJ32:      Subsection [
213; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
214; OBJ32:        {{.*}}Proc{{.*}}Sym {
215; OBJ32:          Kind: S_GPROC32_ID (0x1147)
216; OBJ32:          CodeSize: 0x6
217; OBJ32:          DisplayName: y
218; OBJ32:          LinkageName: _y
219; OBJ32:        }
220; OBJ32:        ProcEnd {
221; OBJ32:        }
222; OBJ32-NEXT: ]
223; OBJ32:      Subsection [
224; OBJ32-NEXT:   SubSectionType: Lines (0xF2)
225; OBJ32:      ]
226; OBJ32:      Subsection [
227; OBJ32-NEXT:   SubSectionType: FrameData (0xF5)
228; OBJ32:      ]
229; OBJ32:      Subsection [
230; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
231; OBJ32:        {{.*}}Proc{{.*}}Sym {
232; OBJ32:          Kind: S_GPROC32_ID (0x1147)
233; OBJ32:          CodeSize: 0x10
234; OBJ32:          DisplayName: f
235; OBJ32:          LinkageName: _f
236; OBJ32:        }
237; OBJ32:        ProcEnd {
238; OBJ32:        }
239; OBJ32-NEXT: ]
240; OBJ32:      Subsection [
241; OBJ32-NEXT:   SubSectionType: Lines (0xF2)
242; OBJ32:      ]
243; OBJ32:      FunctionLineTable [
244; OBJ32-NEXT:   Name: _x
245; OBJ32-NEXT:   Flags: 0x1
246; OBJ32-NEXT:   CodeSize: 0x6
247; OBJ32-NEXT:   FilenameSegment [
248; OBJ32-NEXT:     Filename: D:\source.c
249; OBJ32-NEXT:     +0x0 [
250; OBJ32-NEXT:       LineNumberStart: 4
251; OBJ32-NEXT:       LineNumberEndDelta: 0
252; OBJ32-NEXT:       IsStatement: No
253; OBJ32-NEXT:       ColStart: 42
254; OBJ32-NEXT:       ColEnd: 0
255; OBJ32-NEXT:     ]
256; OBJ32-NEXT:     +0x5 [
257; OBJ32-NEXT:       LineNumberStart: 5
258; OBJ32-NEXT:       LineNumberEndDelta: 0
259; OBJ32-NEXT:       IsStatement: No
260; OBJ32-NEXT:       ColStart: 43
261; OBJ32-NEXT:       ColEnd: 0
262; OBJ32-NEXT:     ]
263; OBJ32-NEXT:   ]
264; OBJ32-NEXT: ]
265; OBJ32-NEXT: FunctionLineTable [
266; OBJ32-NEXT:   LinkageName: _y
267; OBJ32-NEXT:   Flags: 0x1
268; OBJ32-NEXT:   CodeSize: 0x6
269; OBJ32-NEXT:   FilenameSegment [
270; OBJ32-NEXT:     Filename: D:\source.c
271; OBJ32-NEXT:     +0x0 [
272; OBJ32-NEXT:       LineNumberStart: 8
273; OBJ32-NEXT:       LineNumberEndDelta: 0
274; OBJ32-NEXT:       IsStatement: No
275; OBJ32-NEXT:       ColStart: 52
276; OBJ32-NEXT:       ColEnd: 0
277; OBJ32-NEXT:     ]
278; OBJ32-NEXT:     +0x5 [
279; OBJ32-NEXT:       LineNumberStart: 9
280; OBJ32-NEXT:       LineNumberEndDelta: 0
281; OBJ32-NEXT:       IsStatement: No
282; OBJ32-NEXT:       ColStart: 53
283; OBJ32-NEXT:       ColEnd: 0
284; OBJ32-NEXT:     ]
285; OBJ32-NEXT:   ]
286; OBJ32-NEXT: ]
287; OBJ32-NEXT: FunctionLineTable [
288; OBJ32-NEXT:   LinkageName: _f
289; OBJ32-NEXT:   Flags: 0x1
290; OBJ32-NEXT:   CodeSize: 0x10
291; OBJ32-NEXT:   FilenameSegment [
292; OBJ32-NEXT:     Filename: D:\source.c
293; OBJ32-NEXT:     +0x0 [
294; OBJ32-NEXT:       LineNumberStart: 12
295; OBJ32-NEXT:       LineNumberEndDelta: 0
296; OBJ32-NEXT:       IsStatement: No
297; OBJ32-NEXT:       ColStart: 62
298; OBJ32-NEXT:       ColEnd: 0
299; OBJ32-NEXT:     ]
300; OBJ32-NEXT:     +0x5 [
301; OBJ32-NEXT:       LineNumberStart: 13
302; OBJ32-NEXT:       LineNumberEndDelta: 0
303; OBJ32-NEXT:       IsStatement: No
304; OBJ32-NEXT:       ColStart: 63
305; OBJ32-NEXT:       ColEnd: 0
306; OBJ32-NEXT:     ]
307; OBJ32-NEXT:     +0xA [
308; OBJ32-NEXT:       LineNumberStart: 14
309; OBJ32-NEXT:       LineNumberEndDelta: 0
310; OBJ32-NEXT:       IsStatement: No
311; OBJ32-NEXT:       ColStart: 72
312; OBJ32-NEXT:       ColEnd: 0
313; OBJ32-NEXT:     ]
314; OBJ32-NEXT:     +0xF [
315; OBJ32-NEXT:       LineNumberStart: 15
316; OBJ32-NEXT:       LineNumberEndDelta: 0
317; OBJ32-NEXT:       IsStatement: No
318; OBJ32-NEXT:       ColStart: 73
319; OBJ32-NEXT:       ColEnd: 0
320; OBJ32-NEXT:     ]
321; OBJ32-NEXT:   ]
322; OBJ32-NEXT: ]
323
324
325; X64-LABEL: x:
326; X64-NEXT: .L{{.*}}:
327; X64:      .cv_file 1 "D:\\source.c"
328; X64:      .cv_loc 0 1 3 0 # source.c:3:0
329; X64:      # %bb.
330; X64:      subq    $40, %rsp
331; X64:      .cv_loc 0 1 4 42 # source.c:4:42
332; X64-NEXT: callq   z
333; X64:      .cv_loc 0 1 5 43 # source.c:5:43
334; X64:      addq    $40, %rsp
335; X64-NEXT: ret
336; X64:      [[END_OF_X:.?Lfunc_end.*]]:
337;
338; X64-LABEL: y:
339; X64-NEXT: .L{{.*}}:
340; X64:      .cv_loc 1 1 7 0 # source.c:7:0
341; X64:      # %bb.
342; X64:      subq    $40, %rsp
343; X64:      .cv_loc 1 1 8 52 # source.c:8:52
344; X64-NEXT: callq   z
345; X64:      .cv_loc 1 1 9 53 # source.c:9:53
346; X64:      addq    $40, %rsp
347; X64-NEXT: ret
348; X64:      [[END_OF_Y:.?Lfunc_end.*]]:
349;
350; X64-LABEL: f:
351; X64-NEXT: .L{{.*}}:
352; X64:      .cv_loc 2 1 11 0 # source.c:11:0
353; X64:      # %bb.
354; X64:      subq    $40, %rsp
355; X64:      .cv_loc 2 1 12 62 # source.c:12:62
356; X64-NEXT: callq   x
357; X64:      .cv_loc 2 1 13 63 # source.c:13:63
358; X64:      callq   y
359; X64:      .cv_loc 2 1 14 72 # source.c:14:72
360; X64:      callq   z
361; X64:      .cv_loc 2 1 15 73 # source.c:15:73
362; X64:      addq    $40, %rsp
363; X64-NEXT: ret
364; X64:      [[END_OF_F:.?Lfunc_end.*]]:
365;
366
367; X64-LABEL: .section        .debug$S,"dr"
368; X64-NEXT: .p2align 2
369; X64-NEXT: .long   4
370; X64-NEXT: .long   241
371; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
372; Compiler information record
373; X64-NEXT: [[COMPILE_START]]:
374; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
375; X64:      [[COMPILE_END]]:
376; X64-NEXT: .p2align 2
377; Symbol subsection for x
378; X64-NEXT: .long   241
379; X64-NEXT: .long  [[F1_END:.*]]-[[F1_START:.*]] #
380; X64-NEXT: [[F1_START]]:
381; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
382; X64-NEXT: [[PROC_SEGMENT_START]]:
383; X64-NEXT: .short  4422
384; X64-NEXT: .long   0
385; X64-NEXT: .long   0
386; X64-NEXT: .long   0
387; X64-NEXT: .long [[END_OF_X]]-x
388; X64-NEXT: .long   0
389; X64-NEXT: .long   0
390; X64-NEXT: .long   4098
391; X64-NEXT: .secrel32 x
392; X64-NEXT: .secidx x
393; X64-NEXT: .byte   0
394; X64-NEXT: .asciz "x"
395; X64-NEXT: .p2align 2
396; X64-NEXT: [[PROC_SEGMENT_END]]:
397; X64-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
398; X64-NEXT: [[FPROC_BEG]]:
399; X64-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
400; X64-NEXT: .long   40                       # FrameSize
401; X64-NEXT: .long   0                       # Padding
402; X64-NEXT: .long   0                       # Offset of padding
403; X64-NEXT: .long   0                       # Bytes of callee saved registers
404; X64-NEXT: .long   0                       # Exception handler offset
405; X64-NEXT: .short  0                       # Exception handler section
406; X64-NEXT: .long   81920                       # Flags (defines frame register)
407; X64-NEXT: .p2align 2
408; X64-NEXT: [[FPROC_END]]:
409; X64-NEXT: .short  2
410; X64-NEXT: .short  4431
411; X64-NEXT: [[F1_END]]:
412; X64-NEXT: .p2align 2
413; Line table subsection for x
414; X64: .cv_linetable 0, x, [[END_OF_X]]
415; Symbol subsection for y
416; X64-NEXT: .long   241
417; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
418; X64-NEXT: [[COMPILE_START]]:
419; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
420; X64-NEXT: [[PROC_SEGMENT_START]]:
421; X64-NEXT: .short  4423
422; X64-NEXT: .long   0
423; X64-NEXT: .long   0
424; X64-NEXT: .long   0
425; X64-NEXT: .long [[END_OF_Y]]-y
426; X64-NEXT: .long   0
427; X64-NEXT: .long   0
428; X64-NEXT: .long   4099
429; X64-NEXT: .secrel32 y
430; X64-NEXT: .secidx y
431; X64-NEXT: .byte   0
432; X64-NEXT: .asciz "y"
433; X64-NEXT: .p2align 2
434; X64-NEXT: [[PROC_SEGMENT_END]]:
435; X64-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
436; X64-NEXT: [[FPROC_BEG]]:
437; X64-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
438; X64-NEXT: .long   40                       # FrameSize
439; X64-NEXT: .long   0                       # Padding
440; X64-NEXT: .long   0                       # Offset of padding
441; X64-NEXT: .long   0                       # Bytes of callee saved registers
442; X64-NEXT: .long   0                       # Exception handler offset
443; X64-NEXT: .short  0                       # Exception handler section
444; X64-NEXT: .long   81920                       # Flags (defines frame register)
445; X64-NEXT: .p2align 2
446; X64-NEXT: [[FPROC_END]]:
447; X64-NEXT: .short  2
448; X64-NEXT: .short  4431
449; X64-NEXT: [[COMPILE_END]]:
450; X64-NEXT: .p2align 2
451; Line table subsection for y
452; X64: .cv_linetable 1, y, [[END_OF_Y]]
453; Symbol subsection for f
454; X64-NEXT: .long   241
455; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
456; X64:      [[COMPILE_START]]:
457; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
458; X64-NEXT: [[PROC_SEGMENT_START]]:
459; X64-NEXT: .short  4423
460; X64-NEXT: .long   0
461; X64-NEXT: .long   0
462; X64-NEXT: .long   0
463; X64-NEXT: .long [[END_OF_F]]-f
464; X64-NEXT: .long   0
465; X64-NEXT: .long   0
466; X64-NEXT: .long   4100
467; X64-NEXT: .secrel32 f
468; X64-NEXT: .secidx f
469; X64-NEXT: .byte   0
470; X64-NEXT: .asciz "f"
471; X64-NEXT: .p2align 2
472; X64-NEXT: [[PROC_SEGMENT_END]]:
473; X64-NEXT: .short  [[FPROC_END:[^ ]*]]-[[FPROC_BEG:[^ ]*]]           # Record length
474; X64-NEXT: [[FPROC_BEG]]:
475; X64-NEXT: .short  4114                    # Record kind: S_FRAMEPROC
476; X64-NEXT: .long   40                       # FrameSize
477; X64-NEXT: .long   0                       # Padding
478; X64-NEXT: .long   0                       # Offset of padding
479; X64-NEXT: .long   0                       # Bytes of callee saved registers
480; X64-NEXT: .long   0                       # Exception handler offset
481; X64-NEXT: .short  0                       # Exception handler section
482; X64-NEXT: .long   81920                       # Flags (defines frame register)
483; X64-NEXT: .p2align 2
484; X64-NEXT: [[FPROC_END]]:
485; X64-NEXT: .short  2
486; X64-NEXT: .short  4431
487; X64-NEXT: [[COMPILE_END]]:
488; X64-NEXT: .p2align 2
489; Line table subsection for f
490; X64: .cv_linetable 2, f, [[END_OF_F]]
491; File index to string table offset subsection
492; X64: .cv_filechecksums
493; String table
494; X64: .cv_stringtable
495
496; OBJ64:    Section {
497; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
498; OBJ64:      Characteristics [ (0x42300040)
499; OBJ64:      ]
500; OBJ64:      Relocations [
501; OBJ64-NEXT:   0x64 IMAGE_REL_AMD64_SECREL x
502; OBJ64-NEXT:   0x68 IMAGE_REL_AMD64_SECTION x
503; OBJ64-NEXT:   0x9C IMAGE_REL_AMD64_SECREL x
504; OBJ64-NEXT:   0xA0 IMAGE_REL_AMD64_SECTION x
505; OBJ64-NEXT:   0x100 IMAGE_REL_AMD64_SECREL y
506; OBJ64-NEXT:   0x104 IMAGE_REL_AMD64_SECTION y
507; OBJ64-NEXT:   0x138 IMAGE_REL_AMD64_SECREL y
508; OBJ64-NEXT:   0x13C IMAGE_REL_AMD64_SECTION y
509; OBJ64-NEXT:   0x19C IMAGE_REL_AMD64_SECREL f
510; OBJ64-NEXT:   0x1A0 IMAGE_REL_AMD64_SECTION f
511; OBJ64-NEXT:   0x1D4 IMAGE_REL_AMD64_SECREL f
512; OBJ64-NEXT:   0x1D8 IMAGE_REL_AMD64_SECTION f
513; OBJ64-NEXT: ]
514; OBJ64:      Subsection [
515; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
516; OBJ64:        {{.*}}Proc{{.*}}Sym {
517; OBJ64:          Kind: S_LPROC32_ID (0x1146)
518; OBJ64:          CodeSize: 0xE
519; OBJ64:          DisplayName: x
520; OBJ64:          LinkageName: x
521; OBJ64:        }
522; OBJ64:        ProcEnd {
523; OBJ64:        }
524; OBJ64-NEXT: ]
525; OBJ64:      Subsection [
526; OBJ64-NEXT:   SubSectionType: Lines (0xF2)
527; OBJ64:      ]
528; OBJ64:      Subsection [
529; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
530; OBJ64:        {{.*}}Proc{{.*}}Sym {
531; OBJ64:          Kind: S_GPROC32_ID (0x1147)
532; OBJ64:          CodeSize: 0xE
533; OBJ64:          DisplayName: y
534; OBJ64:          LinkageName: y
535; OBJ64:        }
536; OBJ64:        ProcEnd {
537; OBJ64:        }
538; OBJ64-NEXT: ]
539; OBJ64:      Subsection [
540; OBJ64-NEXT:   SubSectionType: Lines (0xF2)
541; OBJ64:      ]
542; OBJ64:      Subsection [
543; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
544; OBJ64:        {{.*}}Proc{{.*}}Sym {
545; OBJ64:          Kind: S_GPROC32_ID (0x1147)
546; OBJ64:          CodeSize: 0x18
547; OBJ64:          DisplayName: f
548; OBJ64:          LinkageName: f
549; OBJ64:        }
550; OBJ64:        ProcEnd {
551; OBJ64:        }
552; OBJ64-NEXT: ]
553; OBJ64:      Subsection [
554; OBJ64-NEXT:   SubSectionType: Lines (0xF2)
555; OBJ64:      ]
556; OBJ64:      FunctionLineTable [
557; OBJ64-NEXT:   LinkageName: x
558; OBJ64-NEXT:   Flags: 0x1
559; OBJ64-NEXT:   CodeSize: 0xE
560; OBJ64-NEXT:   FilenameSegment [
561; OBJ64-NEXT:     Filename: D:\source.c
562; OBJ64-NEXT:     +0x0 [
563; OBJ64-NEXT:       LineNumberStart: 3
564; OBJ64-NEXT:       LineNumberEndDelta: 0
565; OBJ64-NEXT:       IsStatement: No
566; OBJ64-NEXT:       ColStart: 0
567; OBJ64-NEXT:       ColEnd: 0
568; OBJ64-NEXT:     ]
569; OBJ64-NEXT:     +0x4 [
570; OBJ64-NEXT:       LineNumberStart: 4
571; OBJ64-NEXT:       LineNumberEndDelta: 0
572; OBJ64-NEXT:       IsStatement: No
573; OBJ64-NEXT:       ColStart: 42
574; OBJ64-NEXT:       ColEnd: 0
575; OBJ64-NEXT:     ]
576; OBJ64-NEXT:     +0x9 [
577; OBJ64-NEXT:       LineNumberStart: 5
578; OBJ64-NEXT:       LineNumberEndDelta: 0
579; OBJ64-NEXT:       IsStatement: No
580; OBJ64-NEXT:       ColStart: 43
581; OBJ64-NEXT:       ColEnd: 0
582; OBJ64-NEXT:     ]
583; OBJ64-NEXT:   ]
584; OBJ64-NEXT: ]
585; OBJ64-NEXT: FunctionLineTable [
586; OBJ64-NEXT:   LinkageName: y
587; OBJ64-NEXT:   Flags: 0x1
588; OBJ64-NEXT:   CodeSize: 0xE
589; OBJ64-NEXT:   FilenameSegment [
590; OBJ64-NEXT:     Filename: D:\source.c
591; OBJ64-NEXT:     +0x0 [
592; OBJ64-NEXT:       LineNumberStart: 7
593; OBJ64-NEXT:       LineNumberEndDelta: 0
594; OBJ64-NEXT:       IsStatement: No
595; OBJ64-NEXT:       ColStart: 0
596; OBJ64-NEXT:       ColEnd: 0
597; OBJ64-NEXT:     ]
598; OBJ64-NEXT:     +0x4 [
599; OBJ64-NEXT:       LineNumberStart: 8
600; OBJ64-NEXT:       LineNumberEndDelta: 0
601; OBJ64-NEXT:       IsStatement: No
602; OBJ64-NEXT:       ColStart: 52
603; OBJ64-NEXT:       ColEnd: 0
604; OBJ64-NEXT:     ]
605; OBJ64-NEXT:     +0x9 [
606; OBJ64-NEXT:       LineNumberStart: 9
607; OBJ64-NEXT:       LineNumberEndDelta: 0
608; OBJ64-NEXT:       IsStatement: No
609; OBJ64-NEXT:       ColStart: 53
610; OBJ64-NEXT:       ColEnd: 0
611; OBJ64-NEXT:     ]
612; OBJ64-NEXT:   ]
613; OBJ64-NEXT: ]
614; OBJ64-NEXT: FunctionLineTable [
615; OBJ64-NEXT:   LinkageName: f
616; OBJ64-NEXT:   Flags: 0x1
617; OBJ64-NEXT:   CodeSize: 0x18
618; OBJ64-NEXT:   FilenameSegment [
619; OBJ64-NEXT:     Filename: D:\source.c
620; OBJ64-NEXT:     +0x0 [
621; OBJ64-NEXT:       LineNumberStart: 11
622; OBJ64-NEXT:       LineNumberEndDelta: 0
623; OBJ64-NEXT:       IsStatement: No
624; OBJ64-NEXT:       ColStart: 0
625; OBJ64-NEXT:       ColEnd: 0
626; OBJ64-NEXT:     ]
627; OBJ64-NEXT:     +0x4 [
628; OBJ64-NEXT:       LineNumberStart: 12
629; OBJ64-NEXT:       LineNumberEndDelta: 0
630; OBJ64-NEXT:       IsStatement: No
631; OBJ64-NEXT:       ColStart: 62
632; OBJ64-NEXT:       ColEnd: 0
633; OBJ64-NEXT:     ]
634; OBJ64-NEXT:     +0x9 [
635; OBJ64-NEXT:       LineNumberStart: 13
636; OBJ64-NEXT:       LineNumberEndDelta: 0
637; OBJ64-NEXT:       IsStatement: No
638; OBJ64-NEXT:       ColStart: 63
639; OBJ64-NEXT:       ColEnd: 0
640; OBJ64-NEXT:     ]
641; OBJ64-NEXT:     +0xE [
642; OBJ64-NEXT:       LineNumberStart: 14
643; OBJ64-NEXT:       LineNumberEndDelta: 0
644; OBJ64-NEXT:       IsStatement: No
645; OBJ64-NEXT:       ColStart: 72
646; OBJ64-NEXT:       ColEnd: 0
647; OBJ64-NEXT:     ]
648; OBJ64-NEXT:     +0x13 [
649; OBJ64-NEXT:       LineNumberStart: 15
650; OBJ64-NEXT:       LineNumberEndDelta: 0
651; OBJ64-NEXT:       IsStatement: No
652; OBJ64-NEXT:       ColStart: 73
653; OBJ64-NEXT:       ColEnd: 0
654; OBJ64-NEXT:     ]
655; OBJ64-NEXT:   ]
656; OBJ64-NEXT: ]
657
658; Function Attrs: nounwind
659define internal void @x() #0 !dbg !4 {
660entry:
661  call void @z(), !dbg !14
662  ret void, !dbg !15
663}
664
665declare void @z() #1
666
667; Function Attrs: nounwind
668define void @y() #0 !dbg !9 {
669entry:
670  call void @z(), !dbg !16
671  ret void, !dbg !17
672}
673
674; Function Attrs: nounwind
675define void @f() #0 !dbg !10 {
676entry:
677  call void @x(), !dbg !18
678  call void @y(), !dbg !19
679  call void @z(), !dbg !20
680  ret void, !dbg !21
681}
682
683attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
684attributes #1 = { "less-precise-fpmad"="false" "frame-pointer"="none" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
685
686!llvm.dbg.cu = !{!0}
687!llvm.module.flags = !{!11, !12}
688!llvm.ident = !{!13}
689
690!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
691!1 = !DIFile(filename: "<unknown>", directory: "D:\5C")
692!2 = !{}
693!4 = distinct !DISubprogram(name: "x", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !5, scope: !6, type: !7, retainedNodes: !2)
694!5 = !DIFile(filename: "source.c", directory: "D:\5C")
695!6 = !DIFile(filename: "source.c", directory: "D:C")
696!7 = !DISubroutineType(types: !8)
697!8 = !{null}
698!9 = distinct !DISubprogram(name: "y", line: 7, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 7, file: !5, scope: !6, type: !7, retainedNodes: !2)
699!10 = distinct !DISubprogram(name: "f", line: 11, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 11, file: !5, scope: !6, type: !7, retainedNodes: !2)
700!11 = !{i32 2, !"CodeView", i32 1}
701!12 = !{i32 1, !"Debug Info Version", i32 3}
702!13 = !{!"clang version 3.5 "}
703!14 = !DILocation(line: 4, column: 42, scope: !4)
704!15 = !DILocation(line: 5, column: 43, scope: !4)
705!16 = !DILocation(line: 8, column: 52, scope: !9)
706!17 = !DILocation(line: 9, column: 53, scope: !9)
707!18 = !DILocation(line: 12, column: 62, scope: !10)
708!19 = !DILocation(line: 13, column: 63, scope: !10)
709!20 = !DILocation(line: 14, column: 72, scope: !10)
710!21 = !DILocation(line: 15, column: 73, scope: !10)
711