diff options
Diffstat (limited to 'test/MC/ARM/eh-directive-text-section.s')
-rw-r--r-- | test/MC/ARM/eh-directive-text-section.s | 82 |
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: ] |