Reid Kleckner | 94ee072 | 2018-12-17 21:49:35 +0000 | [diff] [blame] | 1 | # 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 |
| 28 | max: # @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 | |