]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/mach-o/arm-interworking.yaml
Vendor import of lld trunk r338150:
[FreeBSD/FreeBSD.git] / test / mach-o / arm-interworking.yaml
1 # RUN: ld64.lld -arch armv7 -r -print_atoms %s \
2 # RUN: %p/Inputs/arm-interworking.yaml -o %t  | FileCheck %s \
3 # RUN: && ld64.lld -arch armv7 -dylib -print_atoms \
4 # RUN:         %p/Inputs/armv7/libSystem.yaml %t -o %t2  | FileCheck %s \
5 # RUN: && llvm-readobj -s -sd %t2 | FileCheck -check-prefix=CODE %s
6 #
7 # Test thumb and arm branches round trip through -r.
8 # Test bl/blx instructions are fixed up properly.
9 #
10 #
11
12 --- !mach-o
13 arch:            armv7
14 file-type:       MH_OBJECT
15 flags:           [ MH_SUBSECTIONS_VIA_SYMBOLS ]
16 sections:
17   - segment:         __TEXT
18     section:         __text
19     type:            S_REGULAR
20     attributes:      [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
21     alignment:       2
22     address:         0x0000000000000000
23     content:         [ 0xFF, 0xF7, 0xFE, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
24                        0xFC, 0xEF, 0xC0, 0x46, 0xFF, 0xF7, 0xF8, 0xEF,
25                        0xFF, 0xF7, 0xF6, 0xFF, 0xC0, 0x46, 0xFF, 0xF7,
26                        0xF3, 0xFF, 0xC0, 0x46, 0x00, 0xF0, 0x06, 0xE8,
27                        0xC0, 0x46, 0x00, 0xF0, 0x03, 0xF8, 0x00, 0xF0,
28                        0x02, 0xF8, 0x70, 0x47, 0x70, 0x47, 0x70, 0x47 ]
29     relocations:
30       - offset:          0x00000026
31         type:            ARM_THUMB_RELOC_BR22
32         length:          2
33         pc-rel:          true
34         extern:          false
35         symbol:          1
36       - offset:          0x00000022
37         type:            ARM_THUMB_RELOC_BR22
38         length:          2
39         pc-rel:          true
40         extern:          false
41         symbol:          1
42       - offset:          0x0000001C
43         type:            ARM_THUMB_RELOC_BR22
44         length:          2
45         pc-rel:          true
46         extern:          false
47         symbol:          1
48       - offset:          0x00000016
49         type:            ARM_THUMB_RELOC_BR22
50         length:          2
51         pc-rel:          true
52         extern:          false
53         symbol:          1
54       - offset:          0x00000010
55         type:            ARM_THUMB_RELOC_BR22
56         length:          2
57         pc-rel:          true
58         extern:          false
59         symbol:          1
60       - offset:          0x0000000C
61         type:            ARM_THUMB_RELOC_BR22
62         length:          2
63         pc-rel:          true
64         extern:          true
65         symbol:          5
66       - offset:          0x00000006
67         type:            ARM_THUMB_RELOC_BR22
68         length:          2
69         pc-rel:          true
70         extern:          true
71         symbol:          5
72       - offset:          0x00000000
73         type:            ARM_THUMB_RELOC_BR22
74         length:          2
75         pc-rel:          true
76         extern:          true
77         symbol:          4
78   - segment:         __DATA
79     section:         __data
80     type:            S_REGULAR
81     attributes:      [  ]
82     address:         0x0000000000000030
83     content:         [ 0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ]
84     relocations:
85       - offset:          0x00000004
86         type:            ARM_RELOC_VANILLA
87         length:          2
88         pc-rel:          false
89         extern:          true
90         symbol:          4
91       - offset:          0x00000000
92         type:            ARM_RELOC_VANILLA
93         length:          2
94         pc-rel:          false
95         extern:          false
96         symbol:          1
97 local-symbols:
98   - name:            _t3
99     type:            N_SECT
100     sect:            1
101     desc:            [ N_ARM_THUMB_DEF ]
102     value:           0x000000000000002E
103   - name:            _d1
104     type:            N_SECT
105     sect:            2
106     value:           0x0000000000000030
107 global-symbols:
108   - name:            _t1
109     type:            N_SECT
110     scope:           [ N_EXT ]
111     sect:            1
112     desc:            [ N_ARM_THUMB_DEF ]
113     value:           0x0000000000000000
114   - name:            _t2
115     type:            N_SECT
116     scope:           [ N_EXT ]
117     sect:            1
118     desc:            [ N_ARM_THUMB_DEF ]
119     value:           0x000000000000002C
120 undefined-symbols:
121   - name:            _a1
122     type:            N_UNDF
123     scope:           [ N_EXT ]
124     value:           0x0000000000000000
125   - name:            _a2
126     type:            N_UNDF
127     scope:           [ N_EXT ]
128     value:           0x0000000000000000
129
130 ...
131
132
133 # CHECK: defined-atoms:
134 # CHECK:   - name:            _d1
135 # CHECK:     type:            data
136 # CHECK:     references:
137 # CHECK:       - kind:            pointer32
138 # CHECK:         offset:          0
139 # CHECK:         target:          _t2
140 # CHECK:       - kind:            pointer32
141 # CHECK:         offset:          4
142 # CHECK:         target:          _a1
143 # CHECK:   - name:            _d2
144 # CHECK:     type:            data
145 # CHECK:     references:
146 # CHECK:       - kind:            pointer32
147 # CHECK:         offset:          0
148 # CHECK:         target:          _t1
149 # CHECK:       - kind:            pointer32
150 # CHECK:         offset:          4
151 # CHECK:         target:          _a1
152 # CHECK:   - name:            _t1
153 # CHECK:     scope:           global
154 # CHECK:     references:
155 # CHECK:       - kind:            modeThumbCode
156 # CHECK:         offset:          0
157 # CHECK:         target:          _t1
158 # CHECK:       - kind:            thumb_bl22
159 # CHECK:         offset:          0
160 # CHECK:         target:          _a1
161 # CHECK:       - kind:            thumb_bl22
162 # CHECK:         offset:          6
163 # CHECK:         target:          _a2
164 # CHECK:       - kind:            thumb_bl22
165 # CHECK:         offset:          12
166 # CHECK:         target:          _a2
167 # CHECK:       - kind:            thumb_bl22
168 # CHECK:         offset:          16
169 # CHECK:         target:          _t1
170 # CHECK:       - kind:            thumb_bl22
171 # CHECK:         offset:          22
172 # CHECK:         target:          _t1
173 # CHECK:       - kind:            thumb_bl22
174 # CHECK:         offset:          28
175 # CHECK:         target:          _t2
176 # CHECK:       - kind:            thumb_bl22
177 # CHECK:         offset:          34
178 # CHECK:         target:          _t2
179 # CHECK:       - kind:            thumb_bl22
180 # CHECK:         offset:          38
181 # CHECK:         target:          _t3
182 # CHECK:   - name:            _t2
183 # CHECK:     scope:           global
184 # CHECK:     content:         [ 70, 47 ]
185 # CHECK:     references:
186 # CHECK:       - kind:            modeThumbCode
187 # CHECK:         offset:          0
188 # CHECK:         target:          _t2
189 # CHECK:   - name:            _t3
190 # CHECK:     content:         [ 70, 47 ]
191 # CHECK:     references:
192 # CHECK:       - kind:            modeThumbCode
193 # CHECK:         offset:          0
194 # CHECK:         target:          _t3
195 # CHECK:   - name:            _a1
196 # CHECK:     scope:           global
197 # CHECK:     references:
198 # CHECK:       - kind:            arm_bl24
199 # CHECK:         offset:          0
200 # CHECK:         target:          _a1
201 # CHECK:       - kind:            arm_bl24
202 # CHECK:         offset:          4
203 # CHECK:         target:          _a2
204 # CHECK:       - kind:            arm_bl24
205 # CHECK:         offset:          8
206 # CHECK:         target:          _t1
207 # CHECK:       - kind:            arm_bl24
208 # CHECK:         offset:          12
209 # CHECK:         target:          _t2
210 # CHECK:   - name:            _a2
211 # CHECK:     scope:           global
212
213 # CODE:     Name: __text (5F 5F 74 65 78 74 00 00 00 00 00 00 00 00 00 00)
214 # CODE:     Segment: __TEXT (5F 5F 54 45 58 54 00 00 00 00 00 00 00 00 00 00)
215 # CODE:     SectionData (
216 # CODE:       0000: 00F016E8 C04600F0 1EE8C046 00F01AE8
217 # CODE:       0010: FFF7F6FF C046FFF7 F3FFC046 00F006F8
218 # CODE:       0020: C04600F0 03F800F0 02F87047 70477047
219 # CODE:       0030: FEFFFFEB 020000EB F0FFFFFA FAFFFFFA
220 # CODE:       0040: 1EFF2FE1 1EFF2FE1
221 # CODE:     )
222
223 # CODE:     Name: __data (5F 5F 64 61 74 61 00 00 00 00 00 00 00 00 00 00)
224 # CODE:     Segment: __DATA (5F 5F 44 41 54 41 00 00 00 00 00 00 00 00 00 00)
225 # CODE:     SectionData (
226 # CODE:       0000: E50F0000 E80F0000 B90F0000 E80F0000
227 # CODE:     )
228
229 # When we get a good mach-o disassembler the above __text section content check can be change to be symbolic.
230 # Verify the low (thumb) bit is set on the first and third pointers but not the second and fourth.
231
232
233
234 # Input file one:
235 #
236 #       .align  2
237 #       .code   16
238 #  .globl _t1
239 #  .thumb_func  _t1
240 #_t1:
241 #    bl  _a1
242 #    nop
243 #    blx _a2
244 #    nop
245 #    blx _a2
246 #    bl  _t1
247 #    nop
248 #    bl  _t1
249 #    nop
250 #    blx _t2
251 #    nop
252 #    blx  _t2
253 #    bx   lr
254 #
255 #  .globl _t2
256 #  .thumb_func  _t2
257 #_t2:
258 #    bx   lr
259 #
260 #    .data
261 #_d1:  .long _t2
262 #      .long _a1
263
264
265
266 # Input file two:
267 #
268 #       .align  2
269 #       .code   32
270 #  .globl _a1
271 #_a1:
272 #    bl  _a1
273 #    blx _a2
274 #    bl  _t1
275 #    blx _t2
276 #    bx   lr
277 #
278 #  .globl _a2
279 #_a2:
280 #    bx   lr
281 #
282 #    .data
283 #_d2:  .long _t1
284 #      .long _a1
285
286
287
288