227 lines · plain
1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \2@ RUN: | llvm-readobj -S --sd - | FileCheck %s3 4@ Check for different stack pointer offsets.5 6@ The .pad directive will track the stack pointer offsets. There are several7@ ways to encode the stack offsets. We have to test:8@9@ offset < 0x0010@ offset == 0x0011@ 0x04 <= offset <= 0x10012@ 0x104 <= offset <= 0x20013@ 0x204 <= offset14 15 16 .syntax unified17 18@-------------------------------------------------------------------------------19@ TEST120@-------------------------------------------------------------------------------21 .section .TEST122 .globl func123 .align 224 .type func1,%function25 .fnstart26func1:27 .pad #028 sub sp, sp, #029 add sp, sp, #030 bx lr31 .personality __gxx_personality_v032 .handlerdata33 .fnend34 35@-------------------------------------------------------------------------------36@ The assembler should emit nothing (will be filled up with finish opcode).37@-------------------------------------------------------------------------------38@ CHECK: Section {39@ CHECK: Name: .ARM.extab.TEST140@ CHECK: SectionData (41@ CHECK: 0000: 00000000 B0B0B000 |........|42@ CHECK: )43@ CHECK: }44 45 46 47@-------------------------------------------------------------------------------48@ TEST249@-------------------------------------------------------------------------------50 .section .TEST251 .globl func2a52 .align 253 .type func2a,%function54 .fnstart55func2a:56 .pad #0x457 sub sp, sp, #0x458 add sp, sp, #0x459 bx lr60 .personality __gxx_personality_v061 .handlerdata62 .fnend63 64 .globl func2b65 .align 266 .type func2b,%function67 .fnstart68func2b:69 .pad #0x10070 sub sp, sp, #0x10071 add sp, sp, #0x10072 bx lr73 .personality __gxx_personality_v074 .handlerdata75 .fnend76 77@-------------------------------------------------------------------------------78@ The assembler should emit ((offset - 4) >> 2).79@-------------------------------------------------------------------------------80@ CHECK: Section {81@ CHECK: Name: .ARM.extab.TEST282@ CHECK: SectionData (83@ CHECK: 0000: 00000000 B0B00000 00000000 B0B03F00 |..............?.|84@ CHECK: )85@ CHECK: }86 87 88@-------------------------------------------------------------------------------89@ TEST390@-------------------------------------------------------------------------------91 .section .TEST392 .globl func3a93 .align 294 .type func3a,%function95 .fnstart96func3a:97 .pad #0x10498 sub sp, sp, #0x10499 add sp, sp, #0x104100 bx lr101 .personality __gxx_personality_v0102 .handlerdata103 .fnend104 105 .globl func3b106 .align 2107 .type func3b,%function108 .fnstart109func3b:110 .pad #0x200111 sub sp, sp, #0x200112 add sp, sp, #0x200113 bx lr114 .personality __gxx_personality_v0115 .handlerdata116 .fnend117 118@-------------------------------------------------------------------------------119@ The assembler should emit 0x3F and ((offset - 0x104) >> 2).120@-------------------------------------------------------------------------------121@ CHECK: Section {122@ CHECK: Name: .ARM.extab.TEST3123@ CHECK: SectionData (124@ CHECK: 0000: 00000000 B03F0000 00000000 B03F3F00 |.....?.......??.|125@ CHECK: )126@ CHECK: }127 128 129 130@-------------------------------------------------------------------------------131@ TEST4132@-------------------------------------------------------------------------------133 .section .TEST4134 .globl func4a135 .align 2136 .type func4a,%function137 .fnstart138func4a:139 .pad #0x204140 sub sp, sp, #0x204141 add sp, sp, #0x204142 bx lr143 .personality __gxx_personality_v0144 .handlerdata145 .fnend146 147 .globl func4b148 .align 2149 .type func4b,%function150 .fnstart151func4b:152 .pad #0x580153 sub sp, sp, #0x580154 add sp, sp, #0x580155 bx lr156 .personality __gxx_personality_v0157 .handlerdata158 .fnend159 160@-------------------------------------------------------------------------------161@ The assembler should emit 0xB2 and the ULEB128 encoding of162@ ((offset - 0x204) >> 2).163@-------------------------------------------------------------------------------164@ CHECK: Section {165@ CHECK: Name: .ARM.extab.TEST4166@ CHECK: SectionData (167@ CHECK: 0000: 00000000 B000B200 00000000 01DFB200 |................|168@ CHECK: )169@ CHECK: }170 171 172 173@-------------------------------------------------------------------------------174@ TEST5175@-------------------------------------------------------------------------------176 .section .TEST5177 .globl func4a178 .align 2179 .type func4a,%function180 .fnstart181func5a:182 .pad #-0x4183 add sp, sp, #0x4184 sub sp, sp, #0x4185 bx lr186 .personality __gxx_personality_v0187 .handlerdata188 .fnend189 190 .globl func5b191 .align 2192 .type func5b,%function193 .fnstart194func5b:195 .pad #-0x104196 add sp, sp, #0x104197 sub sp, sp, #0x4198 bx lr199 .personality __gxx_personality_v0200 .handlerdata201 .fnend202 203 .globl func5c204 .align 2205 .type func5c,%function206 .fnstart207func5c:208 .pad #-0x204209 add sp, sp, #0x204210 sub sp, sp, #0x4211 bx lr212 .personality __gxx_personality_v0213 .handlerdata214 .fnend215 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.TEST5222@ CHECK: SectionData (223@ CHECK: 0000: 00000000 B0B04000 00000000 B07F4000 |......@.......@.|224@ CHECK: 0010: 00000000 7F7F4000 |......@.|225@ CHECK: )226@ CHECK: }227