Home | History | Annotate | Download | only in COFF
      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-linetables | 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-linetables | FileCheck --check-prefix=OBJ64 %s
      5 
      6 ; This LL file was generated by running clang on the following code:
      7 ; D:\test.c:
      8 ; 1 void g(void);
      9 ; 2
     10 ; 3 void f(void) {
     11 ; 4   g();
     12 ; 5 }
     13 
     14 ; X86-LABEL: _f:
     15 ; X86-NEXT: # BB
     16 ; X86-NEXT: [[CALL_LINE:^L.*]]:{{$}}
     17 ; X86-NEXT: calll   _g
     18 ; X86-NEXT: [[RETURN_STMT:.*]]:
     19 ; X86-NEXT: ret
     20 ; X86-NEXT: [[END_OF_F:.*]]:
     21 ;
     22 ; X86-LABEL: .section        .debug$S,"rnd"
     23 ; X86-NEXT: .long   4
     24 ; X86-NEXT: .long   242
     25 ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
     26 ; X86-NEXT: [[F2_START]]:
     27 ; X86-NEXT: .secrel32 _f
     28 ; X86-NEXT: .secidx _f
     29 ; X86-NEXT: .long [[END_OF_F]]-_f
     30 ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
     31 ; X86-NEXT: .long   0
     32 ; X86-NEXT: .long   2
     33 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
     34 ; X86-NEXT: .long [[CALL_LINE]]-_f
     35 ; X86-NEXT: .long   4
     36 ; X86-NEXT: .long [[RETURN_STMT]]-_f
     37 ; X86-NEXT: .long   5
     38 ; X86-NEXT: [[FILE_SEGMENT_END]]:
     39 ; X86-NEXT: [[F2_END]]:
     40 ; File index to string table offset subsection
     41 ; X86-NEXT: .long   244
     42 ; X86-NEXT: .long   8
     43 ; X86-NEXT: .long   1
     44 ; X86-NEXT: .long   0
     45 ; String table
     46 ; X86-NEXT: .long   243
     47 ; X86-NEXT: .long   11
     48 ; X86-NEXT: .byte   0
     49 ; X86-NEXT: .ascii  "D:\\test.c"
     50 ; X86-NEXT: .byte   0
     51 ; Padding
     52 ; X86-NEXT: .zero   1
     53 
     54 ; OBJ32:    Section {
     55 ; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
     56 ; OBJ32:      Characteristics [ (0x42100040)
     57 ; OBJ32:      ]
     58 ; OBJ32:      Relocations [
     59 ; OBJ32-NEXT:   0xC IMAGE_REL_I386_SECREL _f
     60 ; OBJ32-NEXT:   0x10 IMAGE_REL_I386_SECTION _f
     61 ; OBJ32-NEXT: ]
     62 ; OBJ32:      FunctionLineTable [
     63 ; OBJ32-NEXT:   Name: _f
     64 ; OBJ32-NEXT:   CodeSize: 0x6
     65 ; OBJ32-NEXT:   FilenameSegment [
     66 ; OBJ32-NEXT:     Filename: D:\test.c
     67 ; OBJ32-NEXT:     +0x0: 4
     68 ; OBJ32-NEXT:     +0x5: 5
     69 ; OBJ32-NEXT:   ]
     70 ; OBJ32-NEXT: ]
     71 ; OBJ32:    }
     72 
     73 ; X64-LABEL: f:
     74 ; X64-NEXT: [[START:.*]]:{{$}}
     75 ; X64-NEXT: # BB
     76 ; X64-NEXT: subq    $40, %rsp
     77 ; X64-NEXT: [[CALL_LINE:.*]]:{{$}}
     78 ; X64-NEXT: callq   g
     79 ; X64-NEXT: [[EPILOG_AND_RET:.*]]:
     80 ; X64-NEXT: addq    $40, %rsp
     81 ; X64-NEXT: ret
     82 ; X64-NEXT: [[END_OF_F:.*]]:
     83 ;
     84 ; X64-LABEL: .section        .debug$S,"rnd"
     85 ; X64-NEXT: .long   4
     86 ; X64-NEXT: .long   242
     87 ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
     88 ; X64-NEXT: [[F2_START]]:
     89 ; X64-NEXT: .secrel32 f
     90 ; X64-NEXT: .secidx f
     91 ; X64-NEXT: .long [[END_OF_F]]-f
     92 ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
     93 ; X64-NEXT: .long   0
     94 ; X64-NEXT: .long   3
     95 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
     96 ; X64-NEXT: .long [[START]]-f
     97 ; X64-NEXT: .long   3
     98 ; X64-NEXT: .long [[CALL_LINE]]-f
     99 ; X64-NEXT: .long   4
    100 ; X64-NEXT: .long [[EPILOG_AND_RET]]-f
    101 ; X64-NEXT: .long   5
    102 ; X64-NEXT: [[FILE_SEGMENT_END]]:
    103 ; X64-NEXT: [[F2_END]]:
    104 ; File index to string table offset subsection
    105 ; X64-NEXT: .long   244
    106 ; X64-NEXT: .long   8
    107 ; X64-NEXT: .long   1
    108 ; X64-NEXT: .long   0
    109 ; String table
    110 ; X64-NEXT: .long   243
    111 ; X64-NEXT: .long   11
    112 ; X64-NEXT: .byte   0
    113 ; X64-NEXT: .ascii  "D:\\test.c"
    114 ; X64-NEXT: .byte   0
    115 ; Padding
    116 ; X64-NEXT: .zero   1
    117 
    118 ; OBJ64:    Section {
    119 ; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
    120 ; OBJ64:      Characteristics [ (0x42100040)
    121 ; OBJ64:      ]
    122 ; OBJ64:      Relocations [
    123 ; OBJ64-NEXT:   0xC IMAGE_REL_AMD64_SECREL f
    124 ; OBJ64-NEXT:   0x10 IMAGE_REL_AMD64_SECTION f
    125 ; OBJ64-NEXT: ]
    126 ; OBJ64:      FunctionLineTable [
    127 ; OBJ64-NEXT:   Name: f
    128 ; OBJ64-NEXT:   CodeSize: 0xE
    129 ; OBJ64-NEXT:   FilenameSegment [
    130 ; OBJ64-NEXT:     Filename: D:\test.c
    131 ; OBJ64-NEXT:     +0x0: 3
    132 ; OBJ64-NEXT:     +0x4: 4
    133 ; OBJ64-NEXT:     +0x9: 5
    134 ; OBJ64-NEXT:   ]
    135 ; OBJ64-NEXT: ]
    136 ; OBJ64:    }
    137 
    138 ; Function Attrs: nounwind
    139 define void @f() #0 {
    140 entry:
    141   call void @g(), !dbg !12
    142   ret void, !dbg !13
    143 }
    144 
    145 declare void @g() #1
    146 
    147 attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "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" }
    148 attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "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" }
    149 
    150 !llvm.dbg.cu = !{!0}
    151 !llvm.module.flags = !{!9, !10}
    152 !llvm.ident = !{!11}
    153 
    154 !0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [D:\/<unknown>] [DW_LANG_C99]
    155 !1 = metadata !{metadata !"<unknown>", metadata !"D:\5C"}
    156 !2 = metadata !{i32 0}
    157 !3 = metadata !{metadata !4}
    158 !4 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"f", metadata !"f", metadata !"", i32 3, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @f, null, null, metadata !2, i32 3} ; [ DW_TAG_subprogram ] [line 3] [def] [f]
    159 !5 = metadata !{metadata !"test.c", metadata !"D:\5C"}
    160 !6 = metadata !{i32 786473, metadata !5}          ; [ DW_TAG_file_type ] [D:\/test.c]
    161 !7 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
    162 !8 = metadata !{null}
    163 !9 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
    164 !10 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
    165 !11 = metadata !{metadata !"clang version 3.5 "}
    166 !12 = metadata !{i32 4, i32 0, metadata !4, null}
    167 !13 = metadata !{i32 5, i32 0, metadata !4, null}
    168