1@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ 2@ RUN: | llvm-readobj -s -sd -sr -t > %t 3@ RUN: FileCheck %s < %t 4@ RUN: FileCheck --check-prefix=RELOC %s < %t 5 6@ Check whether the section is switched back properly. 7 8@ The assembler should switch the section back to the corresponding section 9@ after it have emitted the exception handling indices and tables. In this 10@ test case, we are checking whether the section is correct when .section 11@ directives is used. 12 13@ In this example, func1 and func2 should be defined in .TEST1 section. 14@ It is incorrect if the func2 is in .text, .ARM.extab.TEST1, or 15@ .ARM.exidx.TEST1 sections. 16 17 .syntax unified 18 19 .section .TEST1 20 21 .globl func1 22 .align 2 23 .type func1,%function 24 .fnstart 25func1: 26 bx lr 27 .personality __gxx_personality_v0 28 .handlerdata 29 .fnend 30 31 .globl func2 32 .align 2 33 .type func2,%function 34 .fnstart 35func2: 36 bx lr 37 .personality __gxx_personality_v0 38 .handlerdata 39 .fnend 40 41 42@------------------------------------------------------------------------------- 43@ Check the .text section. This should be empty. 44@------------------------------------------------------------------------------- 45@ CHECK: Sections [ 46@ CHECK: Section { 47@ CHECK: Name: .text 48@ CHECK: SectionData ( 49@ CHECK: ) 50@ CHECK: } 51 52 53@------------------------------------------------------------------------------- 54@ Check the .TEST1 section. There should be two "bx lr" instructions. 55@------------------------------------------------------------------------------- 56@ CHECK: Section { 57@ CHECK: Name: .TEST1 58@ CHECK: SectionData ( 59@ CHECK: 0000: 1EFF2FE1 1EFF2FE1 |../.../.| 60@ CHECK: ) 61@ CHECK: } 62 63 64 65@------------------------------------------------------------------------------- 66@ Check the .ARM.extab.TEST1 section. 67@------------------------------------------------------------------------------- 68@ CHECK: Section { 69@ CHECK: Name: .ARM.extab.TEST1 70@ CHECK: SectionData ( 71@ CHECK: 0000: 00000000 B0B0B000 00000000 B0B0B000 |................| 72@ CHECK: ) 73@ CHECK: } 74 75@ RELOC: Section { 76@ RELOC: Name: .rel.ARM.extab.TEST1 77@ RELOC: Relocations [ 78@ RELOC: 0x0 R_ARM_PREL31 __gxx_personality_v0 0x0 79@ RELOC: 0x8 R_ARM_PREL31 __gxx_personality_v0 0x0 80@ RELOC: ] 81@ RELOC: } 82 83 84@------------------------------------------------------------------------------- 85@ Check the .ARM.exidx.TEST1 section. 86@------------------------------------------------------------------------------- 87@ CHECK: Section { 88@ CHECK: Name: .ARM.exidx.TEST1 89@ CHECK: Link: 4 90@------------------------------------------------------------------------------- 91@ The first word should be the offset to .TEST1. 92@ The second word should be the offset to .ARM.extab.TEST1 93@------------------------------------------------------------------------------- 94@ CHECK: SectionData ( 95@ CHECK: 0000: 00000000 00000000 04000000 08000000 |................| 96@ CHECK: ) 97@ CHECK: } 98@------------------------------------------------------------------------------- 99@ The first word of each entry should be relocated to .TEST1 section. 100@ The second word of each entry should be relocated to 101@ .ARM.extab.TESET1 section. 102@------------------------------------------------------------------------------- 103 104@ RELOC: Section { 105@ RELOC: Name: .rel.ARM.exidx.TEST1 106@ RELOC: Relocations [ 107@ RELOC: 0x0 R_ARM_PREL31 .TEST1 0x0 108@ RELOC: 0x4 R_ARM_PREL31 .ARM.extab.TEST1 0x0 109@ RELOC: 0x8 R_ARM_PREL31 .TEST1 0x0 110@ RELOC: 0xC R_ARM_PREL31 .ARM.extab.TEST1 0x0 111@ RELOC: ] 112@ RELOC: } 113 114 115@------------------------------------------------------------------------------- 116@ Check the symbols "func1" and "func2". They should belong to .TEST1 section. 117@------------------------------------------------------------------------------- 118@ CHECK: Symbols [ 119@ CHECK: Symbol { 120@ CHECK: Name: func1 121@ CHECK: Value: 0x0 122@ CHECK: Size: 0 123@ CHECK: Binding: Global (0x1) 124@ CHECK: Type: Function (0x2) 125@ CHECK: Other: 0 126@ CHECK: Section: .TEST1 (0x4) 127@ CHECK: } 128@ CHECK: Symbol { 129@ CHECK: Name: func2 130@ CHECK: Value: 0x4 131@ CHECK: Size: 0 132@ CHECK: Binding: Global (0x1) 133@ CHECK: Type: Function (0x2) 134@ CHECK: Other: 0 135@ CHECK: Section: .TEST1 (0x4) 136@ CHECK: } 137@ CHECK: ] 138