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