diff options
Diffstat (limited to 'test/MC/ARM/eh-directive-section-multiple-func.s')
-rw-r--r-- | test/MC/ARM/eh-directive-section-multiple-func.s | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-section-multiple-func.s b/test/MC/ARM/eh-directive-section-multiple-func.s new file mode 100644 index 0000000000..444099f8f6 --- /dev/null +++ b/test/MC/ARM/eh-directive-section-multiple-func.s @@ -0,0 +1,129 @@ +@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ +@ RUN: | llvm-readobj -s -sd -sr -t | FileCheck %s + +@ Check whether the section is switched back properly. + +@ The assembler should switch the section back to the corresponding section +@ after it have emitted the exception handling indices and tables. In this +@ test case, we are checking whether the section is correct when .section +@ directives is used. + +@ In this example, func1 and func2 should be defined in .TEST1 section. +@ It is incorrect if the func2 is in .text, .ARM.extab.TEST1, or +@ .ARM.exidx.TEST1 sections. + + .syntax unified + + .section .TEST1 + + .globl func1 + .align 2 + .type func1,%function + .fnstart +func1: + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + .globl func2 + .align 2 + .type func2,%function + .fnstart +func2: + bx lr + .personality __gxx_personality_v0 + .handlerdata + .fnend + + +@------------------------------------------------------------------------------- +@ Check the .text section. This should be empty. +@------------------------------------------------------------------------------- +@ CHECK: Sections [ +@ CHECK: Section { +@ CHECK: Name: .text +@ CHECK: SectionData ( +@ CHECK: ) +@ CHECK: } + + +@------------------------------------------------------------------------------- +@ Check the .TEST1 section. There should be two "bx lr" instructions. +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Name: .TEST1 +@ CHECK: SectionData ( +@ CHECK: 0000: 1EFF2FE1 1EFF2FE1 |../.../.| +@ CHECK: ) +@ CHECK: } + + + +@------------------------------------------------------------------------------- +@ Check the .ARM.extab.TEST1 section. +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Name: .ARM.extab.TEST1 +@ CHECK: Relocations [ +@ CHECK: 0x0 R_ARM_PREL31 __gxx_personality_v0 0x0 +@ CHECK: 0x8 R_ARM_PREL31 __gxx_personality_v0 0x0 +@ CHECK: ] +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 B0B0B000 00000000 B0B0B000 |................| +@ CHECK: ) +@ CHECK: } + + +@------------------------------------------------------------------------------- +@ Check the .ARM.exidx.TEST1 section. +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Name: .ARM.exidx.TEST1 +@ CHECK: Link: 4 +@------------------------------------------------------------------------------- +@ The first word of each entry should be relocated to .TEST1 section. +@ The second word of each entry should be relocated to +@ .ARM.extab.TESET1 section. +@------------------------------------------------------------------------------- +@ CHECK: Relocations [ +@ CHECK: 0x0 R_ARM_PREL31 .TEST1 0x0 +@ CHECK: 0x4 R_ARM_PREL31 .ARM.extab.TEST1 0x0 +@ CHECK: 0x8 R_ARM_PREL31 .TEST1 0x0 +@ CHECK: 0xC R_ARM_PREL31 .ARM.extab.TEST1 0x0 +@ CHECK: ] +@------------------------------------------------------------------------------- +@ The first word should be the offset to .TEST1. +@ The second word should be the offset to .ARM.extab.TEST1 +@------------------------------------------------------------------------------- +@ CHECK: SectionData ( +@ CHECK: 0000: 00000000 00000000 04000000 08000000 |................| +@ CHECK: ) +@ CHECK: } +@ CHECK: ] + + + +@------------------------------------------------------------------------------- +@ Check the symbols "func1" and "func2". They should belong to .TEST1 section. +@------------------------------------------------------------------------------- +@ CHECK: Symbols [ +@ CHECK: Symbol { +@ CHECK: Name: func1 +@ CHECK: Value: 0x0 +@ CHECK: Size: 0 +@ CHECK: Binding: Global (0x1) +@ CHECK: Type: Function (0x2) +@ CHECK: Other: 0 +@ CHECK: Section: .TEST1 (0x4) +@ CHECK: } +@ CHECK: Symbol { +@ CHECK: Name: func2 +@ CHECK: Value: 0x4 +@ CHECK: Size: 0 +@ CHECK: Binding: Global (0x1) +@ CHECK: Type: Function (0x2) +@ CHECK: Other: 0 +@ CHECK: Section: .TEST1 (0x4) +@ CHECK: } +@ CHECK: ] |