Home | History | Annotate | Download | only in COFF
      1 # RUN: llvm-mc -triple=x86_64-pc-win32 -filetype=obj < %s | llvm-readobj -codeview | FileCheck %s
      2 
      3 # This tries to test defrange gap edge cases.
      4 
      5 # CHECK:         LocalSym {
      6 # CHECK:           Type: int (0x74)
      7 # CHECK:           VarName: p
      8 # CHECK:         }
      9 # CHECK-NOT:     LocalSym {
     10 # CHECK:         DefRangeRegisterSym {
     11 # CHECK-NEXT:      Kind: S_DEFRANGE_REGISTER (0x1141)
     12 # CHECK-NEXT:      Register: CVRegESI (0x17)
     13 # CHECK-NEXT:      MayHaveNoName: 0
     14 # CHECK-NEXT:      LocalVariableAddrRange {
     15 # CHECK-NEXT:        OffsetStart: .text+0x5
     16 # CHECK-NEXT:        ISectStart: 0x0
     17 # CHECK-NEXT:        Range: 0x5
     18 # CHECK-NEXT:      }
     19 # CHECK-NEXT:      LocalVariableAddrGap [
     20 # CHECK-NEXT:        GapStartOffset: 0x3
     21 # CHECK-NEXT:        Range: 0x1
     22 # CHECK-NEXT:      ]
     23 # CHECK-NEXT:    }
     24 # CHECK-NEXT:    DefRangeRegisterSym {
     25 # CHECK-NEXT:      Kind: S_DEFRANGE_REGISTER (0x1141)
     26 # CHECK-NEXT:      Register: CVRegESI (0x17)
     27 # CHECK-NEXT:      MayHaveNoName: 0
     28 # CHECK-NEXT:      LocalVariableAddrRange {
     29 # CHECK-NEXT:        OffsetStart: .text+0x10015
     30 # CHECK-NEXT:        ISectStart: 0x0
     31 # CHECK-NEXT:        Range: 0x6
     32 # CHECK-NEXT:      }
     33 # CHECK-NEXT:    }
     34 # CHECK-NEXT:    DefRangeRegisterSym {
     35 # CHECK-NEXT:      Kind: S_DEFRANGE_REGISTER (0x1141)
     36 # CHECK-NEXT:      Register: CVRegESI (0x17)
     37 # CHECK-NEXT:      MayHaveNoName: 0
     38 # CHECK-NEXT:      LocalVariableAddrRange {
     39 # CHECK-NEXT:        OffsetStart: .text+0x2001B
     40 # CHECK-NEXT:        ISectStart: 0x0
     41 # CHECK-NEXT:        Range: 0x1
     42 # CHECK-NEXT:      }
     43 # CHECK-NEXT:    }
     44 # CHECK-NEXT:    DefRangeRegisterSym {
     45 # CHECK-NEXT:      Kind: S_DEFRANGE_REGISTER (0x1141)
     46 # CHECK-NEXT:      Register: CVRegESI (0x17)
     47 # CHECK-NEXT:      MayHaveNoName: 0
     48 # CHECK-NEXT:      LocalVariableAddrRange {
     49 # CHECK-NEXT:        OffsetStart: .text+0x2001C
     50 # CHECK-NEXT:        ISectStart: 0x0
     51 # CHECK-NEXT:        Range: 0xF000
     52 # CHECK-NEXT:      }
     53 # CHECK-NEXT:      LocalVariableAddrGap [
     54 # CHECK-NEXT:        GapStartOffset: 0x1
     55 # CHECK-NEXT:        Range: 0xEFFE
     56 # CHECK-NEXT:      ]
     57 # CHECK-NEXT:    }
     58 
     59 	.text
     60 f:                                      # @f
     61 	mov $42, %esi
     62 .Lbegin0:
     63 	nop
     64 	jmp .Lbegin1
     65 .Lend0:
     66 	nop
     67 .Lbegin1:
     68 	nop
     69 .Lend1:
     70 	.p2align	4
     71 	.fill 0x10000, 1, 0x90
     72 
     73 	mov $42, %esi
     74 .Lbegin2:
     75 	nop
     76 	jmp .Lbegin3
     77 .Lend2:
     78 	.fill 0x10000, 1, 0x90
     79 .Lbegin3:
     80 	nop
     81 .Lend3:
     82 
     83 	# Create a range that is exactly 0xF000 bytes long with a gap in the
     84 	# middle.
     85 .Lbegin4:
     86 	nop
     87 .Lend4:
     88 	.fill 0xeffe, 1, 0x90
     89 .Lbegin5:
     90 	nop
     91 .Lend5:
     92 	ret
     93 .Lfunc_end0:
     94 
     95 	.section	.debug$S,"dr"
     96 	.p2align	2
     97 	.long	4                       # Debug section magic
     98 	.long	241                     # Symbol subsection for f
     99 	.long	.Ltmp15-.Ltmp14         # Subsection size
    100 .Ltmp14:
    101 	.short	.Ltmp17-.Ltmp16         # Record length
    102 .Ltmp16:
    103 	.short	4423                    # Record kind: S_GPROC32_ID
    104 	.long	0                       # PtrParent
    105 	.long	0                       # PtrEnd
    106 	.long	0                       # PtrNext
    107 	.long	.Lfunc_end0-f           # Code size
    108 	.long	0                       # Offset after prologue
    109 	.long	0                       # Offset before epilogue
    110 	.long	4098                    # Function type index
    111 	.secrel32	f               # Function section relative address
    112 	.secidx	f                       # Function section index
    113 	.byte	0                       # Flags
    114 	.asciz	"f"                     # Function name
    115 .Ltmp17:
    116 	.short	.Ltmp19-.Ltmp18         # Record length
    117 .Ltmp18:
    118 	.short	4414                    # Record kind: S_LOCAL
    119 	.long	116                     # TypeIndex
    120 	.short	0                       # Flags
    121 	.asciz	"p"
    122 .Ltmp19:
    123 	.cv_def_range	 .Lbegin0 .Lend0 .Lbegin1 .Lend1 .Lbegin2 .Lend2 .Lbegin3 .Lend3, "A\021\027\000\000\000"
    124 	.cv_def_range	 .Lbegin4 .Lend4 .Lbegin5 .Lend5, "A\021\027\000\000\000"
    125 	.short	2                       # Record length
    126 	.short	4431                    # Record kind: S_PROC_ID_END
    127 .Ltmp15:
    128         .cv_filechecksums               # File index to string table offset subsection
    129         .cv_stringtable                 # String table
    130