summaryrefslogtreecommitdiff
path: root/test/MC/ARM/eh-directive-multiple-offsets.s
diff options
context:
space:
mode:
Diffstat (limited to 'test/MC/ARM/eh-directive-multiple-offsets.s')
-rw-r--r--test/MC/ARM/eh-directive-multiple-offsets.s168
1 files changed, 168 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-multiple-offsets.s b/test/MC/ARM/eh-directive-multiple-offsets.s
new file mode 100644
index 0000000000..6e81f41665
--- /dev/null
+++ b/test/MC/ARM/eh-directive-multiple-offsets.s
@@ -0,0 +1,168 @@
+@ 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: }