summaryrefslogtreecommitdiff
path: root/test/MC/ARM/eh-directive-text-section.s
diff options
context:
space:
mode:
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: ]