| @ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ |
| @ RUN: | llvm-readobj -s -sd | FileCheck %s |
| |
| @ Check for different combination of .setfp, .pad, .save and .vsave. |
| |
| .syntax unified |
| |
| @------------------------------------------------------------------------------- |
| @ TEST1: Check .pad before .setfp directive. |
| @------------------------------------------------------------------------------- |
| .section .TEST1 |
| .globl func1 |
| .type func1,%function |
| .align 2 |
| .fnstart |
| func1: |
| .pad #12 |
| sub sp, sp, #12 |
| .setfp fp, sp, #8 |
| add fp, sp, #8 |
| sub sp, fp, #8 |
| add sp, sp, #12 |
| bx lr |
| .personality __gxx_personality_v0 |
| .handlerdata |
| .fnend |
| |
| @ CHECK: Section { |
| @ CHECK: Name: .ARM.extab.TEST1 |
| @ CHECK: SectionData ( |
| @ CHECK: 0000: 00000000 B0009B00 |........| |
| @ CHECK: ) |
| @ CHECK: } |
| |
| |
| |
| @------------------------------------------------------------------------------- |
| @ TEST2: Check .pad after .setfp directive. |
| @------------------------------------------------------------------------------- |
| .section .TEST2 |
| .globl func2 |
| .type func2,%function |
| .align 2 |
| .fnstart |
| func2: |
| .setfp fp, sp, #8 |
| add fp, sp, #8 |
| .pad #12 |
| sub sp, sp, #12 |
| add sp, sp, #12 |
| sub sp, fp, #8 |
| bx lr |
| .personality __gxx_personality_v0 |
| .handlerdata |
| .fnend |
| |
| @ CHECK: Section { |
| @ CHECK: Name: .ARM.extab.TEST2 |
| @ CHECK: SectionData ( |
| @ CHECK: 0000: 00000000 B0419B00 |.....A..| |
| @ CHECK: ) |
| @ CHECK: } |
| |
| |
| |
| @------------------------------------------------------------------------------- |
| @ TEST3: Check .setfp, .pad, .setfp directive. |
| @------------------------------------------------------------------------------- |
| .section .TEST3 |
| .globl func3 |
| .type func3,%function |
| .align 2 |
| .fnstart |
| func3: |
| @ prologue: |
| .setfp fp, sp, #4 |
| add fp, sp, #4 |
| .pad #8 |
| sub sp, sp, #8 |
| .setfp fp, sp, #4 |
| add fp, sp, #4 |
| |
| @ epilogue: |
| add sp, fp, #4 |
| bx lr |
| .personality __gxx_personality_v0 |
| .handlerdata |
| .fnend |
| |
| @ CHECK: Section { |
| @ CHECK: Name: .ARM.extab.TEST3 |
| @ CHECK: SectionData ( |
| @ CHECK: 0000: 00000000 B0009B00 |........| |
| @ CHECK: ) |
| @ CHECK: } |
| |
| |
| |
| @------------------------------------------------------------------------------- |
| @ TEST4: Check ".setfp fp, sp" and ".setfp fp, fp" directive. |
| @------------------------------------------------------------------------------- |
| .section .TEST4 |
| .globl func4 |
| .type func4,%function |
| .align 2 |
| .fnstart |
| func4: |
| @ prologue: |
| .setfp fp, sp, #8 |
| add fp, sp, #8 |
| .setfp fp, fp, #8 |
| add fp, fp, #8 |
| |
| @ epilogue: |
| sub sp, fp, #16 |
| bx lr |
| .personality __gxx_personality_v0 |
| .handlerdata |
| .fnend |
| |
| @ CHECK: Section { |
| @ CHECK: Name: .ARM.extab.TEST4 |
| @ CHECK: SectionData ( |
| @ CHECK: 0000: 00000000 B0439B00 |.....C..| |
| @ CHECK: ) |
| @ CHECK: } |
| |
| |
| |
| @------------------------------------------------------------------------------- |
| @ TEST5: Check .setfp, .save, .setfp directive. |
| @------------------------------------------------------------------------------- |
| .section .TEST5 |
| .globl func5 |
| .type func5,%function |
| .align 2 |
| .fnstart |
| func5: |
| @ prologue: |
| .setfp fp, sp, #16 |
| add fp, sp, #16 |
| .save {r4, r5, r6, r7, r8} |
| push {r4, r5, r6, r7, r8} |
| .pad #8 |
| add sp, sp, #8 |
| .pad #8 |
| sub sp, sp, #8 |
| .save {r9, r10} |
| push {r9, r10} |
| .setfp fp, sp, #24 |
| add fp, sp, #24 |
| |
| @ epilogue: |
| sub sp, fp, #24 |
| pop {r9, r10} |
| add sp, sp, #16 |
| pop {r4, r5, r6, r7, r8} |
| bx lr |
| .personality __gxx_personality_v0 |
| .handlerdata |
| .fnend |
| |
| @ CHECK: Section { |
| @ CHECK: Name: .ARM.extab.TEST5 |
| @ CHECK: SectionData ( |
| @ CHECK: 0000: 00000000 80459B01 B0A40360 |.....E.....`| |
| @ CHECK: ) |
| @ CHECK: } |