summaryrefslogtreecommitdiff
path: root/test/MC/ARM/eh-directive-text-section.s
diff options
context:
space:
mode:
authorLogan Chien <tzuhsiang.chien@gmail.com>2013-05-10 16:17:24 +0000
committerLogan Chien <tzuhsiang.chien@gmail.com>2013-05-10 16:17:24 +0000
commitc24a374331fc97dd215937c8f0a9bf5271f39657 (patch)
tree8b45dc88291c6b9a7da543364389118c4e278a8b /test/MC/ARM/eh-directive-text-section.s
parent2e2c12b9961647987692389bc3cc25eae9220d26 (diff)
downloadllvm-c24a374331fc97dd215937c8f0a9bf5271f39657.tar.gz
llvm-c24a374331fc97dd215937c8f0a9bf5271f39657.tar.bz2
llvm-c24a374331fc97dd215937c8f0a9bf5271f39657.tar.xz
Implement AsmParser for ARM unwind directives.
This commit implements the AsmParser for fnstart, fnend, cantunwind, personality, handlerdata, pad, setfp, save, and vsave directives. This commit fixes some minor issue in the ARMELFStreamer: * The switch back to corresponding section after the .fnend directive. * Emit the unwind opcode while processing .fnend directive if there is no .handlerdata directive. * Emit the unwind opcode to .ARM.extab while processing .handlerdata even if .personality directive does not exist. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181603 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC/ARM/eh-directive-text-section.s')
-rw-r--r--test/MC/ARM/eh-directive-text-section.s82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-text-section.s b/test/MC/ARM/eh-directive-text-section.s
new file mode 100644
index 0000000000..5ab1baa592
--- /dev/null
+++ b/test/MC/ARM/eh-directive-text-section.s
@@ -0,0 +1,82 @@
+@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \
+@ RUN: | llvm-readobj -s -sd -sr | FileCheck %s
+
+@ Check the .fnstart directive and the .fnend directive.
+
+@ The .fnstart directive and .fnend directive should create an entry in
+@ exception handling table. For example, if the function is defined in .text
+@ section, then there should be an entry in .ARM.exidx section.
+
+ .syntax unified
+
+ .text
+ .globl func1
+ .align 2
+ .type func1,%function
+ .fnstart
+func1:
+ bx lr
+ .fnend
+
+
+
+@-------------------------------------------------------------------------------
+@ Check the .text section.
+@-------------------------------------------------------------------------------
+@ CHECK: Sections [
+@ CHECK: Section {
+
+@-------------------------------------------------------------------------------
+@ Check the index of .text section. This will be used in .ARM.exidx.
+@-------------------------------------------------------------------------------
+@ CHECK: Index: 1
+@ CHECK: Name: .text
+@ CHECK: Type: SHT_PROGBITS (0x1)
+@ CHECK: Flags [ (0x6)
+@ CHECK: SHF_ALLOC (0x2)
+@ CHECK: SHF_EXECINSTR (0x4)
+@ CHECK: ]
+@ CHECK: SectionData (
+@ CHECK: 0000: 1EFF2FE1 |../.|
+@ CHECK: )
+@ CHECK: }
+
+
+@-------------------------------------------------------------------------------
+@ Check the name of the EXIDX section. For the function in the .text section,
+@ this should be .ARM.exidx. It is incorrect to see .ARM.exidx.text here.
+@-------------------------------------------------------------------------------
+@ CHECK: Section {
+@ CHECK: Name: .ARM.exidx
+@ CHECK: Type: SHT_ARM_EXIDX (0x70000001)
+@ CHECK: Flags [ (0x82)
+@ CHECK: SHF_ALLOC (0x2)
+@ CHECK: SHF_LINK_ORDER (0x80)
+@ CHECK: ]
+
+@-------------------------------------------------------------------------------
+@ Check the linked section of the EXIDX section. This should be the index
+@ of the .text section.
+@-------------------------------------------------------------------------------
+@ CHECK: Link: 1
+
+@-------------------------------------------------------------------------------
+@ The first word should be relocated to the code address in .text section.
+@ Besides, since this function is using compact model 0, thus we have to
+@ add an relocation to __aeabi_unwind_cpp_pr0.
+@-------------------------------------------------------------------------------
+@ CHECK: Relocations [
+@ CHECK: 0x0 R_ARM_PREL31 .text 0x0
+@ CHECK: 0x0 R_ARM_NONE __aeabi_unwind_cpp_pr0 0x0
+@ CHECK: ]
+
+@-------------------------------------------------------------------------------
+@ The first word should be the offset to .text. The second word should be
+@ 0xB0B0B080, which means compact model 0 is used (0x80) and the rest of the
+@ word is filled with FINISH opcode (0xB0).
+@-------------------------------------------------------------------------------
+@ CHECK: SectionData (
+@ CHECK: 0000: 00000000 B0B0B080 |........|
+@ CHECK: )
+@ CHECK: }
+@ CHECK: ]