diff options
Diffstat (limited to 'test/MC/ARM/eh-directive-section-comdat.s')
-rw-r--r-- | test/MC/ARM/eh-directive-section-comdat.s | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/test/MC/ARM/eh-directive-section-comdat.s b/test/MC/ARM/eh-directive-section-comdat.s new file mode 100644 index 0000000000..296718f096 --- /dev/null +++ b/test/MC/ARM/eh-directive-section-comdat.s @@ -0,0 +1,126 @@ +@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ +@ RUN: | llvm-readobj -s -sd -sr -t | FileCheck %s + +@ Check the .group section for the function in comdat section. + +@ In C++, the instantiation of the template will come with linkonce (or +@ linkonce_odr) linkage, so that the linker can remove the duplicated +@ instantiation. When the exception handling is enabled on those function, +@ we have to group the corresponding .ARM.extab and .ARM.exidx with the +@ text section together. +@ +@ This test case will check the content of .group section. The section index +@ of the grouped sections should be recorded in .group section. + + .syntax unified + .section .TEST1,"axG",%progbits,func1,comdat + .weak func1 + .align 2 + .type func1,%function +func1: + .fnstart + .save {r4, lr} + push {r4, lr} + .vsave {d8, d9, d10, d11, d12} + vpush {d8, d9, d10, d11, d12} + .pad #24 + sub sp, sp, #24 + + add sp, sp, #24 + vpop {d8, d9, d10, d11, d12} + pop {r4, pc} + + .globl __gxx_personality_v0 + .personality __gxx_personality_v0 + .handlerdata + .fnend + + + +@------------------------------------------------------------------------------- +@ Check the .group section +@------------------------------------------------------------------------------- +@ CHECK: Sections [ +@ CHECK: Section { +@ CHECK: Index: 1 +@ CHECK: Name: .group +@ CHECK: Type: SHT_GROUP (0x11) +@ CHECK: Flags [ (0x0) +@ CHECK: ] +@ CHECK: SectionData ( +@------------------------------------------------------------------------------- +@ The second, third, and fourth word should correspond to the section index +@ of .TEST1, .ARM.extab.TEST1, and .ARM.exidx.TEST1. +@------------------------------------------------------------------------------- +@ CHECK: 0000: 01000000 05000000 06000000 08000000 |................| +@ CHECK: ) +@ CHECK: } + + +@------------------------------------------------------------------------------- +@ Check the .TEST1 section +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Index: 5 +@ CHECK: Name: .TEST1 +@ CHECK: Type: SHT_PROGBITS (0x1) +@------------------------------------------------------------------------------- +@ The flags should contain SHF_GROUP. +@------------------------------------------------------------------------------- +@ CHECK: Flags [ (0x206) +@ CHECK: SHF_ALLOC (0x2) +@ CHECK: SHF_EXECINSTR (0x4) +@ CHECK: SHF_GROUP (0x200) +@ CHECK: ] +@ CHECK: } + + +@------------------------------------------------------------------------------- +@ Check the .ARM.extab.TEST1 section +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Index: 6 +@ CHECK: Name: .ARM.extab.TEST1 +@ CHECK: Type: SHT_PROGBITS (0x1) +@------------------------------------------------------------------------------- +@ The flags should contain SHF_GROUP. +@------------------------------------------------------------------------------- +@ CHECK: Flags [ (0x202) +@ CHECK: SHF_ALLOC (0x2) +@ CHECK: SHF_GROUP (0x200) +@ CHECK: ] +@ CHECK: } + + +@------------------------------------------------------------------------------- +@ Check the .ARM.exidx.TEST1 section +@------------------------------------------------------------------------------- +@ CHECK: Section { +@ CHECK: Index: 8 +@ CHECK: Name: .ARM.exidx.TEST1 +@ CHECK: Type: SHT_ARM_EXIDX (0x70000001) +@------------------------------------------------------------------------------- +@ The flags should contain SHF_GROUP. +@------------------------------------------------------------------------------- +@ CHECK: Flags [ (0x282) +@ CHECK: SHF_ALLOC (0x2) +@ CHECK: SHF_GROUP (0x200) +@ CHECK: SHF_LINK_ORDER (0x80) +@ CHECK: ] +@ CHECK: Link: 5 +@ CHECK: } +@ CHECK: ] + + + +@------------------------------------------------------------------------------- +@ Check symbol func1. It should be weak binding, and belong to .TEST1 section. +@------------------------------------------------------------------------------- +@ CHECK: Symbols [ +@ CHECK: Symbol { +@ CHECK: Name: func1 +@ CHECK: Binding: Weak (0x2) +@ CHECK: Type: Function (0x2) +@ CHECK: Section: .TEST1 (0x5) +@ CHECK: } +@ CHECK: ] |