Home | History | Annotate | Download | only in ARM
      1 @ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
      2 @ RUN:   | llvm-readobj -s -sd | FileCheck %s
      3 
      4 @ Check for different stack pointer offsets.
      5 
      6 @ The .pad directive will track the stack pointer offsets.  There are several
      7 @ ways to encode the stack offsets.  We have to test:
      8 @
      9 @              offset <  0x00
     10 @              offset == 0x00
     11 @     0x04  <= offset <= 0x100
     12 @     0x104 <= offset <= 0x200
     13 @     0x204 <= offset
     14 
     15 
     16 	.syntax unified
     17 
     18 @-------------------------------------------------------------------------------
     19 @ TEST1
     20 @-------------------------------------------------------------------------------
     21 	.section	.TEST1
     22 	.globl	func1
     23 	.align	2
     24 	.type	func1,%function
     25 	.fnstart
     26 func1:
     27 	.pad	#0
     28 	sub	sp, sp, #0
     29 	add	sp, sp, #0
     30 	bx	lr
     31 	.personality __gxx_personality_v0
     32 	.handlerdata
     33 	.fnend
     34 
     35 @-------------------------------------------------------------------------------
     36 @ The assembler should emit nothing (will be filled up with finish opcode).
     37 @-------------------------------------------------------------------------------
     38 @ CHECK: Section {
     39 @ CHECK:   Name: .ARM.extab.TEST1
     40 @ CHECK:   SectionData (
     41 @ CHECK:     0000: 00000000 B0B0B000                    |........|
     42 @ CHECK:   )
     43 @ CHECK: }
     44 
     45 
     46 
     47 @-------------------------------------------------------------------------------
     48 @ TEST2
     49 @-------------------------------------------------------------------------------
     50 	.section	.TEST2
     51 	.globl	func2a
     52 	.align	2
     53 	.type	func2a,%function
     54 	.fnstart
     55 func2a:
     56 	.pad	#0x4
     57 	sub	sp, sp, #0x4
     58 	add	sp, sp, #0x4
     59 	bx	lr
     60 	.personality __gxx_personality_v0
     61 	.handlerdata
     62 	.fnend
     63 
     64 	.globl	func2b
     65 	.align	2
     66 	.type	func2b,%function
     67 	.fnstart
     68 func2b:
     69 	.pad	#0x100
     70 	sub	sp, sp, #0x100
     71 	add	sp, sp, #0x100
     72 	bx	lr
     73 	.personality __gxx_personality_v0
     74 	.handlerdata
     75 	.fnend
     76 
     77 @-------------------------------------------------------------------------------
     78 @ The assembler should emit ((offset - 4) >> 2).
     79 @-------------------------------------------------------------------------------
     80 @ CHECK: Section {
     81 @ CHECK:   Name: .ARM.extab.TEST2
     82 @ CHECK:   SectionData (
     83 @ CHECK:     0000: 00000000 B0B00000 00000000 B0B03F00  |..............?.|
     84 @ CHECK:   )
     85 @ CHECK: }
     86 
     87 
     88 @-------------------------------------------------------------------------------
     89 @ TEST3
     90 @-------------------------------------------------------------------------------
     91 	.section	.TEST3
     92 	.globl	func3a
     93 	.align	2
     94 	.type	func3a,%function
     95 	.fnstart
     96 func3a:
     97 	.pad	#0x104
     98 	sub	sp, sp, #0x104
     99 	add	sp, sp, #0x104
    100 	bx	lr
    101 	.personality __gxx_personality_v0
    102 	.handlerdata
    103 	.fnend
    104 
    105 	.globl	func3b
    106 	.align	2
    107 	.type	func3b,%function
    108 	.fnstart
    109 func3b:
    110 	.pad	#0x200
    111 	sub	sp, sp, #0x200
    112 	add	sp, sp, #0x200
    113 	bx	lr
    114 	.personality __gxx_personality_v0
    115 	.handlerdata
    116 	.fnend
    117 
    118 @-------------------------------------------------------------------------------
    119 @ The assembler should emit 0x3F and ((offset - 0x104) >> 2).
    120 @-------------------------------------------------------------------------------
    121 @ CHECK: Section {
    122 @ CHECK:   Name: .ARM.extab.TEST3
    123 @ CHECK:   SectionData (
    124 @ CHECK:     0000: 00000000 B03F0000 00000000 B03F3F00  |.....?.......??.|
    125 @ CHECK:   )
    126 @ CHECK: }
    127 
    128 
    129 
    130 @-------------------------------------------------------------------------------
    131 @ TEST4
    132 @-------------------------------------------------------------------------------
    133 	.section	.TEST4
    134 	.globl	func4a
    135 	.align	2
    136 	.type	func4a,%function
    137 	.fnstart
    138 func4a:
    139 	.pad	#0x204
    140 	sub	sp, sp, #0x204
    141 	add	sp, sp, #0x204
    142 	bx	lr
    143 	.personality __gxx_personality_v0
    144 	.handlerdata
    145 	.fnend
    146 
    147 	.globl	func4b
    148 	.align	2
    149 	.type	func4b,%function
    150 	.fnstart
    151 func4b:
    152 	.pad	#0x580
    153 	sub	sp, sp, #0x580
    154 	add	sp, sp, #0x580
    155 	bx	lr
    156 	.personality __gxx_personality_v0
    157 	.handlerdata
    158 	.fnend
    159 
    160 @-------------------------------------------------------------------------------
    161 @ The assembler should emit 0xB2 and the ULEB128 encoding of
    162 @ ((offset - 0x204) >> 2).
    163 @-------------------------------------------------------------------------------
    164 @ CHECK: Section {
    165 @ CHECK:   Name: .ARM.extab.TEST4
    166 @ CHECK:   SectionData (
    167 @ CHECK:     0000: 00000000 B000B200 00000000 01DFB200  |................|
    168 @ CHECK:   )
    169 @ CHECK: }
    170 
    171 
    172 
    173 @-------------------------------------------------------------------------------
    174 @ TEST5
    175 @-------------------------------------------------------------------------------
    176 	.section	.TEST5
    177 	.globl	func4a
    178 	.align	2
    179 	.type	func4a,%function
    180 	.fnstart
    181 func5a:
    182 	.pad	#-0x4
    183 	add	sp, sp, #0x4
    184 	sub	sp, sp, #0x4
    185 	bx	lr
    186 	.personality __gxx_personality_v0
    187 	.handlerdata
    188 	.fnend
    189 
    190 	.globl	func5b
    191 	.align	2
    192 	.type	func5b,%function
    193 	.fnstart
    194 func5b:
    195 	.pad	#-0x104
    196 	add	sp, sp, #0x104
    197 	sub	sp, sp, #0x4
    198 	bx	lr
    199 	.personality __gxx_personality_v0
    200 	.handlerdata
    201 	.fnend
    202 
    203 	.globl	func5c
    204 	.align	2
    205 	.type	func5c,%function
    206 	.fnstart
    207 func5c:
    208 	.pad	#-0x204
    209 	add	sp, sp, #0x204
    210 	sub	sp, sp, #0x4
    211 	bx	lr
    212 	.personality __gxx_personality_v0
    213 	.handlerdata
    214 	.fnend
    215 
    216 @-------------------------------------------------------------------------------
    217 @ The assembler should emit (0x40 | (-offset - 4)) >> 2.  When (-offset - 4)
    218 @ is greater than 0x3f, then multiple 0x7f should be emitted.
    219 @-------------------------------------------------------------------------------
    220 @ CHECK: Section {
    221 @ CHECK:   Name: .ARM.extab.TEST5
    222 @ CHECK:   SectionData (
    223 @ CHECK:     0000: 00000000 B0B04000 00000000 B07F4000  |......@.......@.|
    224 @ CHECK:     0010: 00000000 7F7F4000                    |......@.|
    225 @ CHECK:   )
    226 @ CHECK: }
    227