1*9880d681SAndroid Build Coastguard Worker@ RUN: llvm-mc %s -triple=armv7-unknown-linux-gnueabi -filetype=obj -o - \ 2*9880d681SAndroid Build Coastguard Worker@ RUN: | llvm-readobj -s -sd -sr -t > %t 3*9880d681SAndroid Build Coastguard Worker@ RUN: FileCheck %s < %t 4*9880d681SAndroid Build Coastguard Worker@ RUN: FileCheck --check-prefix=RELOC %s < %t 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@ Check the combination of .section, .fnstart, and .fnend directives. 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker@ For the functions in .text section, the exception handling index (EXIDX) 9*9880d681SAndroid Build Coastguard Worker@ should be generated in .ARM.exidx, and the exception handling table (EXTAB) 10*9880d681SAndroid Build Coastguard Worker@ should be generated in .ARM.extab. 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker@ For the functions in custom section specified by .section directives, 13*9880d681SAndroid Build Coastguard Worker@ the EXIDX should be generated in ".ARM.exidx[[SECTION_NAME]]", and the EXTAB 14*9880d681SAndroid Build Coastguard Worker@ should be generated in ".ARM.extab[[SECTION_NAME]]". 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker .syntax unified 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 19*9880d681SAndroid Build Coastguard Worker@ .TEST1 section 20*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 21*9880d681SAndroid Build Coastguard Worker .section .TEST1 22*9880d681SAndroid Build Coastguard Worker .globl func1 23*9880d681SAndroid Build Coastguard Worker .align 2 24*9880d681SAndroid Build Coastguard Worker .type func1,%function 25*9880d681SAndroid Build Coastguard Worker .fnstart 26*9880d681SAndroid Build Coastguard Workerfunc1: 27*9880d681SAndroid Build Coastguard Worker bx lr 28*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 29*9880d681SAndroid Build Coastguard Worker .handlerdata 30*9880d681SAndroid Build Coastguard Worker .fnend 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 34*9880d681SAndroid Build Coastguard Worker@ TEST2 section (without the dot in the beginning) 35*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 36*9880d681SAndroid Build Coastguard Worker .section TEST2 37*9880d681SAndroid Build Coastguard Worker .globl func2 38*9880d681SAndroid Build Coastguard Worker .align 2 39*9880d681SAndroid Build Coastguard Worker .type func2,%function 40*9880d681SAndroid Build Coastguard Worker .fnstart 41*9880d681SAndroid Build Coastguard Workerfunc2: 42*9880d681SAndroid Build Coastguard Worker bx lr 43*9880d681SAndroid Build Coastguard Worker .personality __gxx_personality_v0 44*9880d681SAndroid Build Coastguard Worker .handlerdata 45*9880d681SAndroid Build Coastguard Worker .fnend 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 49*9880d681SAndroid Build Coastguard Worker@ Check the .TEST1 section. 50*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 51*9880d681SAndroid Build Coastguard Worker@ CHECK: Sections [ 52*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 53*9880d681SAndroid Build Coastguard Worker@ CHECK: Index: 3 54*9880d681SAndroid Build Coastguard Worker@ CHECK-NEXT: Name: .TEST1 55*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 56*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 1EFF2FE1 |../.| 57*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 58*9880d681SAndroid Build Coastguard Worker@ CHECK: } 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 61*9880d681SAndroid Build Coastguard Worker@ Check the .ARM.extab.TEST1 section, the EXTAB of .TEST1 section. 62*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 63*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 64*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extab.TEST1 65*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 66*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0B0B000 |........| 67*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 68*9880d681SAndroid Build Coastguard Worker@ CHECK: } 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Worker@ RELOC: Section { 71*9880d681SAndroid Build Coastguard Worker@ RELOC: Name: .rel.ARM.extab.TEST1 72*9880d681SAndroid Build Coastguard Worker@ RELOC: Relocations [ 73*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x0 R_ARM_PREL31 __gxx_personality_v0 0x0 74*9880d681SAndroid Build Coastguard Worker@ RELOC: ] 75*9880d681SAndroid Build Coastguard Worker@ RELOC: } 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Worker 78*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 79*9880d681SAndroid Build Coastguard Worker@ Check the.ARM.exidx.TEST1 section, the EXIDX of .TEST1 section. 80*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 81*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 82*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.exidx.TEST1 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 85*9880d681SAndroid Build Coastguard Worker@ This section should linked with .TEST1 section. 86*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 87*9880d681SAndroid Build Coastguard Worker@ CHECK: Link: 3 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 90*9880d681SAndroid Build Coastguard Worker@ The first word should be relocated to the code address in .TEST1 section. 91*9880d681SAndroid Build Coastguard Worker@ The second word should be relocated to the EHTAB entry in .ARM.extab.TEST1 92*9880d681SAndroid Build Coastguard Worker@ section. 93*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 94*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 95*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 00000000 |........| 96*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 97*9880d681SAndroid Build Coastguard Worker@ CHECK: } 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker@ RELOC: Section { 100*9880d681SAndroid Build Coastguard Worker@ RELOC: Name: .rel.ARM.exidx.TEST1 101*9880d681SAndroid Build Coastguard Worker@ RELOC: Relocations [ 102*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x0 R_ARM_PREL31 .TEST1 0x0 103*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x4 R_ARM_PREL31 .ARM.extab.TEST1 0x0 104*9880d681SAndroid Build Coastguard Worker@ RELOC: ] 105*9880d681SAndroid Build Coastguard Worker@ RELOC: } 106*9880d681SAndroid Build Coastguard Worker 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 109*9880d681SAndroid Build Coastguard Worker@ Check the TEST2 section (without the dot in the beginning) 110*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 111*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 112*9880d681SAndroid Build Coastguard Worker@ CHECK: Index: 8 113*9880d681SAndroid Build Coastguard Worker@ CHECK-NEXT: Name: TEST2 114*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 115*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 1EFF2FE1 |../.| 116*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 117*9880d681SAndroid Build Coastguard Worker@ CHECK: } 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 120*9880d681SAndroid Build Coastguard Worker@ Check the .ARM.extabTEST2 section, the EXTAB of TEST2 section. 121*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 122*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 123*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.extabTEST2 124*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 125*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 B0B0B000 |........| 126*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 127*9880d681SAndroid Build Coastguard Worker@ CHECK: } 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker@ RELOC: Section { 130*9880d681SAndroid Build Coastguard Worker@ RELOC: Name: .rel.ARM.extabTEST2 131*9880d681SAndroid Build Coastguard Worker@ RELOC: Relocations [ 132*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x0 R_ARM_PREL31 __gxx_personality_v0 0x0 133*9880d681SAndroid Build Coastguard Worker@ RELOC: ] 134*9880d681SAndroid Build Coastguard Worker@ RELOC: } 135*9880d681SAndroid Build Coastguard Worker 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 138*9880d681SAndroid Build Coastguard Worker@ Check the .ARM.exidxTEST2 section, the EXIDX of TEST2 section. 139*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 140*9880d681SAndroid Build Coastguard Worker@ CHECK: Section { 141*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: .ARM.exidxTEST2 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 144*9880d681SAndroid Build Coastguard Worker@ This section should linked with TEST2 section. 145*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 146*9880d681SAndroid Build Coastguard Worker@ CHECK: Link: 8 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 149*9880d681SAndroid Build Coastguard Worker@ The first word should be relocated to the code address in TEST2 section. 150*9880d681SAndroid Build Coastguard Worker@ The second word should be relocated to the EHTAB entry in .ARM.extabTEST2 151*9880d681SAndroid Build Coastguard Worker@ section. 152*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 153*9880d681SAndroid Build Coastguard Worker@ CHECK: SectionData ( 154*9880d681SAndroid Build Coastguard Worker@ CHECK: 0000: 00000000 00000000 |........| 155*9880d681SAndroid Build Coastguard Worker@ CHECK: ) 156*9880d681SAndroid Build Coastguard Worker@ CHECK: } 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker@ RELOC: Section { 159*9880d681SAndroid Build Coastguard Worker@ RELOC: Name: .rel.ARM.exidxTEST2 160*9880d681SAndroid Build Coastguard Worker@ RELOC: Relocations [ 161*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x0 R_ARM_PREL31 TEST2 0x0 162*9880d681SAndroid Build Coastguard Worker@ RELOC: 0x4 R_ARM_PREL31 .ARM.extabTEST2 0x0 163*9880d681SAndroid Build Coastguard Worker@ RELOC: ] 164*9880d681SAndroid Build Coastguard Worker@ RELOC: } 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 169*9880d681SAndroid Build Coastguard Worker@ Check the symbols and the sections they belong to 170*9880d681SAndroid Build Coastguard Worker@------------------------------------------------------------------------------- 171*9880d681SAndroid Build Coastguard Worker@ CHECK: Symbols [ 172*9880d681SAndroid Build Coastguard Worker@ CHECK: Symbol { 173*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: func1 174*9880d681SAndroid Build Coastguard Worker@ CHECK: Section: .TEST1 175*9880d681SAndroid Build Coastguard Worker@ CHECK: } 176*9880d681SAndroid Build Coastguard Worker@ CHECK: Symbol { 177*9880d681SAndroid Build Coastguard Worker@ CHECK: Name: func2 178*9880d681SAndroid Build Coastguard Worker@ CHECK: Section: TEST2 179*9880d681SAndroid Build Coastguard Worker@ CHECK: } 180*9880d681SAndroid Build Coastguard Worker@ CHECK: ] 181