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 .setfp directive.
      5 
      6 @ The .setfp directive will track the offset between the frame pointer and
      7 @ the stack pointer.  This is required for the function that will change
      8 @ the stack pointer out of the function prologue.  If the exception is thrown,
      9 @ then libunwind will reconstruct the stack pointer from the frame pointer.
     10 @ The reconstruction code is implemented by two different unwind opcode:
     11 @ (i) the unwind opcode to copy stack offset from the other register, and
     12 @ (ii) the unwind opcode to add or subtract the stack offset.
     13 @
     14 @ This file includes several cases separated by different range of -offset
     15 @
     16 @              (-offset) <  0x00
     17 @              (-offset) == 0x00
     18 @     0x04  <= (-offset) <= 0x100
     19 @     0x104 <= (-offset) <= 0x200
     20 @     0x204 <= (-offset)
     21 
     22 
     23 	.syntax unified
     24 
     25 @-------------------------------------------------------------------------------
     26 @ TEST1
     27 @-------------------------------------------------------------------------------
     28 	.section	.TEST1
     29 	.globl	func1
     30 	.align	2
     31 	.type	func1,%function
     32 	.fnstart
     33 func1:
     34 	.setfp	fp, sp, #0
     35 	add	fp, sp, #0
     36 	sub	sp, fp, #0
     37 	bx	lr
     38 	.personality __gxx_personality_v0
     39 	.handlerdata
     40 	.fnend
     41 
     42 @-------------------------------------------------------------------------------
     43 @ The assembler should emit 0x9B to copy stack pointer from r11.
     44 @-------------------------------------------------------------------------------
     45 @ CHECK: Section {
     46 @ CHECK:   Name: .ARM.extab.TEST1
     47 @ CHECK:   SectionData (
     48 @ CHECK:     0000: 00000000 B0B09B00                    |........|
     49 @ CHECK:   )
     50 @ CHECK: }
     51 
     52 
     53 
     54 @-------------------------------------------------------------------------------
     55 @ TEST2
     56 @-------------------------------------------------------------------------------
     57 	.section	.TEST2
     58 	.globl	func2a
     59 	.align	2
     60 	.type	func2a,%function
     61 	.fnstart
     62 func2a:
     63 	.setfp	fp, sp, #-4
     64 	add	fp, sp, #4
     65 	sub	sp, fp, #4
     66 	bx	lr
     67 	.personality __gxx_personality_v0
     68 	.handlerdata
     69 	.fnend
     70 
     71 	.globl	func2b
     72 	.align	2
     73 	.type	func2b,%function
     74 	.fnstart
     75 func2b:
     76 	.setfp	fp, sp, #-0x100
     77 	add	fp, sp, #0x100
     78 	sub	sp, fp, #0x100
     79 	bx	lr
     80 	.personality __gxx_personality_v0
     81 	.handlerdata
     82 	.fnend
     83 
     84 @-------------------------------------------------------------------------------
     85 @ The assembler should emit 0x9B to copy stack pointer from r11.
     86 @ The assembler should emit ((-offset - 4) >> 2) for offset.
     87 @-------------------------------------------------------------------------------
     88 @ CHECK: Section {
     89 @ CHECK:   Name: .ARM.extab.TEST2
     90 @ CHECK:   SectionData (
     91 @ CHECK:     0000: 00000000 B0009B00 00000000 B03F9B00  |.............?..|
     92 @ CHECK:   )
     93 @ CHECK: }
     94 
     95 
     96 
     97 @-------------------------------------------------------------------------------
     98 @ TEST3
     99 @-------------------------------------------------------------------------------
    100 	.section	.TEST3
    101 	.globl	func3a
    102 	.align	2
    103 	.type	func3a,%function
    104 	.fnstart
    105 func3a:
    106 	.setfp	fp, sp, #-0x104
    107 	sub	fp, sp, #0x104
    108 	add	sp, fp, #0x104
    109 	bx	lr
    110 	.personality __gxx_personality_v0
    111 	.handlerdata
    112 	.fnend
    113 
    114 	.globl	func3b
    115 	.align	2
    116 	.type	func3b,%function
    117 	.fnstart
    118 func3b:
    119 	.setfp	fp, sp, #-0x200
    120 	sub	fp, sp, #0x200
    121 	add	sp, fp, #0x200
    122 	bx	lr
    123 	.personality __gxx_personality_v0
    124 	.handlerdata
    125 	.fnend
    126 
    127 @-------------------------------------------------------------------------------
    128 @ The assembler should emit 0x9B to copy stack pointer from r11.
    129 @ The assembler should emit 0x3F and ((-offset - 0x104) >> 2) for offset.
    130 @-------------------------------------------------------------------------------
    131 @ CHECK: Section {
    132 @ CHECK:   Name: .ARM.extab.TEST3
    133 @ CHECK:   SectionData (
    134 @ CHECK:     0000: 00000000 3F009B00 00000000 3F3F9B00  |....?.......??..|
    135 @ CHECK:   )
    136 @ CHECK: }
    137 
    138 
    139 
    140 @-------------------------------------------------------------------------------
    141 @ TEST4
    142 @-------------------------------------------------------------------------------
    143 	.section	.TEST4
    144 	.globl	func4a
    145 	.align	2
    146 	.type	func4a,%function
    147 	.fnstart
    148 func4a:
    149 	.setfp	fp, sp, #-0x204
    150 	sub	fp, sp, #0x204
    151 	add	sp, fp, #0x204
    152 	bx	lr
    153 	.personality __gxx_personality_v0
    154 	.handlerdata
    155 	.fnend
    156 
    157 	.globl	func4b
    158 	.align	2
    159 	.type	func4b,%function
    160 	.fnstart
    161 func4b:
    162 	.setfp	fp, sp, #-0x580
    163 	sub	fp, sp, #0x580
    164 	add	sp, fp, #0x580
    165 	bx	lr
    166 	.personality __gxx_personality_v0
    167 	.handlerdata
    168 	.fnend
    169 
    170 @-------------------------------------------------------------------------------
    171 @ The assembler should emit 0x9B to copy stack pointer from r11.
    172 @ The assembler should emit 0xB2 and the ULEB128 encoding of
    173 @ ((-offset - 0x204) >> 2) for offset.
    174 @-------------------------------------------------------------------------------
    175 @ CHECK: Section {
    176 @ CHECK:   Name: .ARM.extab.TEST4
    177 @ CHECK:   SectionData (
    178 @ CHECK:     0000: 00000000 00B29B00 00000000 DFB29B01  |................|
    179 @ CHECK:     0010: B0B0B001                             |....|
    180 @ CHECK:   )
    181 @ CHECK: }
    182 
    183 
    184 
    185 @-------------------------------------------------------------------------------
    186 @ TEST5
    187 @-------------------------------------------------------------------------------
    188 	.section	.TEST5
    189 	.globl	func5a
    190 	.align	2
    191 	.type	func5a,%function
    192 	.fnstart
    193 func5a:
    194 	.setfp	fp, sp, #0x4
    195 	add	fp, sp, #0x4
    196 	sub	sp, fp, #0x4
    197 	bx	lr
    198 	.personality __gxx_personality_v0
    199 	.handlerdata
    200 	.fnend
    201 
    202 	.globl	func5b
    203 	.align	2
    204 	.type	func5b,%function
    205 	.fnstart
    206 func5b:
    207 	.setfp	fp, sp, #0x104
    208 	add	fp, sp, #0x104
    209 	sub	sp, fp, #0x104
    210 	bx	lr
    211 	.personality __gxx_personality_v0
    212 	.handlerdata
    213 	.fnend
    214 
    215 	.globl	func5c
    216 	.align	2
    217 	.type	func5c,%function
    218 	.fnstart
    219 func5c:
    220 	.setfp	fp, sp, #0x204
    221 	add	fp, sp, #0x204
    222 	sub	sp, fp, #0x204
    223 	bx	lr
    224 	.personality __gxx_personality_v0
    225 	.handlerdata
    226 	.fnend
    227 
    228 @-------------------------------------------------------------------------------
    229 @ The assembler should emit 0x9B to copy stack pointer from r11.
    230 @ The assembler should emit (0x40 | (offset - 4)) >> 2 for offset.
    231 @ If (offset - 4) is greater than 0x3f, then multiple 0x7f should be emitted.
    232 @-------------------------------------------------------------------------------
    233 @ CHECK: Section {
    234 @ CHECK:   Name: .ARM.extab.TEST5
    235 @ CHECK:   SectionData (
    236 @ CHECK:     0000: 00000000 B0409B00 00000000 7F409B00  |.....@.......@..|
    237 @ CHECK:     0010: 00000000 7F409B01 B0B0B07F           |.....@......|
    238 @ CHECK:   )
    239 @ CHECK: }
    240