2 * Copyright (c) 2005-2010 Apple Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
42 @ sorta-absolute load of a
46 @ sorta-absolute load of c
50 @ sorta-absolute load of external
54 @ PIC load of a + addend ??
68 @ call internal + addend
69 bl _test_branches+0x19000
74 @ call external + addend
82 @ call internal + addend
85 @ call internal - addend
91 @ call external + addend
100 .weak_definition _test_weak
105 .globl _test_hidden_weak
106 .private_extern _test_hidden_weak
107 .weak_definition _test_hidden_weak
118 _test_weak_hidden_pointer_call:
124 .long _test_hidden_weak - L101
131 .long _test_branches-1b
132 .long _test_branches+3-1b
133 .long (_test_branches - _test_loads) + -2097152
134 .long (_test_calls - _test_loads) + -2097152
143 .weak_definition _arm3
145 .private_extern _arm3
148 .weak_definition _arm4
150 .private_extern _arm4
161 .weak_definition _thumb3
163 .private_extern _thumb3
167 .weak_definition _thumb4
169 .private_extern _thumb4
174 .thumb_func _thumb_func_ref_test
175 _thumb_func_ref_test:
188 L6: .long _thumb1-(L2+4)
189 L7: .long _thumb2-(L3+4)
190 L7a:.long _thumb3-(L3+4)
191 L7b:.long _thumb4-(L3+4)
192 L8: .long _arm1-(L4+4)
193 L9: .long _arm2-(L5+4)
194 L9a:.long _arm3-(L5+4)
195 L9b:.long _arm4-(L5+4)
212 L16: .long _thumb1-(L12+8)
213 L17: .long _thumb2-(L13+8)
214 L17a: .long _thumb3-(L13+8)
215 L17b: .long _thumb4-(L13+8)
216 L18: .long _arm1-(L14+8)
217 L19: .long _arm2-(L15+8)
218 L19a: .long _arm3-(L15+8)
219 L19b: .long _arm4-(L15+8)
221 .section __DATA,__const
233 movw r0, :lower16:_datahilo16
234 movt r0, :upper16:_datahilo16
235 movw r0, :lower16:_datahilo16+4
236 movt r0, :upper16:_datahilo16+4
237 movw r0, :lower16:_datahilo16alt
238 movt r0, :upper16:_datahilo16alt
239 movw r0, :lower16:_datahilo16alt+61440
240 movt r0, :upper16:_datahilo16alt+61440
241 movw r0, :lower16:_datahilo16alt+2048
242 movt r0, :upper16:_datahilo16alt+2048
243 movw r0, :lower16:_datahilo16alt+1792
244 movt r0, :upper16:_datahilo16alt+1792
245 movw r0, :lower16:_datahilo16alt+165
246 movt r0, :upper16:_datahilo16alt+165
247 movw r0, :lower16:_thumbTarget
248 movt r0, :upper16:_thumbTarget
249 movw r0, :lower16:_externalTarget
250 movt r0, :upper16:_externalTarget
251 movw r0, :lower16:_externalTarget+61447
252 movt r0, :upper16:_externalTarget+61447
254 movw r0, :lower16:_datahilo16 - Lpicbase
255 movt r0, :upper16:_datahilo16 - Lpicbase
256 movw r0, :lower16:_datahilo16+4 - Lpicbase
257 movt r0, :upper16:_datahilo16+4 - Lpicbase
258 movw r0, :lower16:_datahilo16alt - Lpicbase
259 movt r0, :upper16:_datahilo16alt - Lpicbase
260 movw r0, :lower16:_datahilo16alt+61440 - Lpicbase
261 movt r0, :upper16:_datahilo16alt+61440 - Lpicbase
262 movw r0, :lower16:_datahilo16alt+2048 - Lpicbase
263 movt r0, :upper16:_datahilo16alt+2048 - Lpicbase
264 movw r0, :lower16:_datahilo16alt+1792 - Lpicbase
265 movt r0, :upper16:_datahilo16alt+1792 - Lpicbase
266 movw r0, :lower16:_datahilo16alt+165 - Lpicbase
267 movt r0, :upper16:_datahilo16alt+165 - Lpicbase
268 movw r0, :lower16:_thumbTarget - Lpicbase
269 movt r0, :upper16:_thumbTarget - Lpicbase
273 .thumb_func _thumb16tests
275 movw r0, :lower16:_datahilo16
276 movt r0, :upper16:_datahilo16
277 movw r0, :lower16:_datahilo16+4
278 movt r0, :upper16:_datahilo16+4
279 movw r0, :lower16:_datahilo16alt
280 movt r0, :upper16:_datahilo16alt
281 movw r0, :lower16:_datahilo16alt+61440
282 movt r0, :upper16:_datahilo16alt+61440
283 movw r0, :lower16:_datahilo16alt+2048
284 movt r0, :upper16:_datahilo16alt+2048
285 movw r0, :lower16:_datahilo16alt+1792
286 movt r0, :upper16:_datahilo16alt+1792
287 movw r0, :lower16:_datahilo16alt+165
288 movt r0, :upper16:_datahilo16alt+165
289 movw r0, :lower16:_thumbTarget
290 movt r0, :upper16:_thumbTarget
291 movw r0, :lower16:_externalTarget
292 movt r0, :upper16:_externalTarget
293 movw r0, :lower16:_externalTarget+61447
294 movt r0, :upper16:_externalTarget+61447
296 movw r0, :lower16:_datahilo16 - Lpicbase2
297 movt r0, :upper16:_datahilo16 - Lpicbase2
298 movw r0, :lower16:_datahilo16+4 - Lpicbase2
299 movt r0, :upper16:_datahilo16+4 - Lpicbase2
300 movw r0, :lower16:_datahilo16alt - Lpicbase2
301 movt r0, :upper16:_datahilo16alt - Lpicbase2
302 movw r0, :lower16:_datahilo16alt+61440 - Lpicbase2
303 movt r0, :upper16:_datahilo16alt+61440 - Lpicbase2
304 movw r0, :lower16:_datahilo16alt+2048 - Lpicbase2
305 movt r0, :upper16:_datahilo16alt+2048 - Lpicbase2
306 movw r0, :lower16:_datahilo16alt+1792 - Lpicbase2
307 movt r0, :upper16:_datahilo16alt+1792 - Lpicbase2
308 movw r0, :lower16:_datahilo16alt+165 - Lpicbase2
309 movt r0, :upper16:_datahilo16alt+165 - Lpicbase2
310 movw r0, :lower16:_thumbTarget - Lpicbase2
311 movt r0, :upper16:_thumbTarget - Lpicbase2
315 .thumb_func _thumbTarget
322 _datahilo16alt: .long 0
330 #if __ppc__ || __ppc64__
342 addis r2,r10,ha16(_a-Lpicbase)
343 lwz r2,lo16(_a-Lpicbase)(r2)
346 addis r2,r10,ha16(_c-Lpicbase)
347 lwz r2,lo16(_c-Lpicbase)(r2)
357 ; absolute load of external
361 ; absolute lea of external
366 ; PIC load of a + addend
367 addis r2,r10,ha16(_a+0x19000-Lpicbase)
368 lwz r2,lo16(_a+0x19000-Lpicbase)(r2)
370 ; absolute load of a + addend
371 lis r2,ha16(_a+0x19000)
372 lwz r2,lo16(_a+0x19000)(r2)
375 lis r2,ha16(_a+0x19000)
376 addi r2,r2,lo16(_a+0x19000)
378 ; alt lea of a + addend
379 lis r2,hi16(_a+0x19000)
380 ori r2,r2,lo16(_a+0x19000)
382 ; absolute load of external + addend
383 lis r2,ha16(_ax+0x19000)
384 lwz r2,lo16(_ax+0x19000)(r2)
386 ; absolute lea of external + addend
387 lis r2,hi16(_ax+0x19000)
388 ori r2,r2,lo16(_ax+0x19000)
391 ; PIC load of a + addend
392 addis r2,r10,ha16(_a+0x09000-Lpicbase)
393 lwz r2,lo16(_a+0x09000-Lpicbase)(r2)
395 ; absolute load of a + addend
396 lis r2,ha16(_a+0x09000)
397 lwz r2,lo16(_a+0x09000)(r2)
400 lis r2,ha16(_a+0x09000)
401 addi r2,r2,lo16(_a+0x09000)
403 ; alt lea of a + addend
404 lis r2,hi16(_a+0x09000)
405 ori r2,r2,lo16(_a+0x09000)
407 ; absolute load of external + addend
408 lis r2,ha16(_ax+0x09000)
409 lwz r2,lo16(_ax+0x09000)(r2)
411 ; absolute lea of external + addend
412 lis r2,hi16(_ax+0x09000)
413 ori r2,r2,lo16(_ax+0x09000)
422 ; call internal + addend
423 bl _test_branches+0x19000
428 ; call external + addend
436 ; call internal + addend
442 ; call external + addend
446 .weak_definition _test_weak
474 movl _a-Lpicbase(%ebx), %eax
479 # absolute load of external
482 # absolute lea of external
486 # PIC load of a + addend
487 movl _a-Lpicbase+0x19000(%ebx), %eax
489 # absolute load of a + addend
490 movl _a+0x19000(%ebx), %eax
492 # absolute load of external + addend
493 movl _ax+0x19000(%ebx), %eax
495 # absolute lea of external + addend
496 leal _ax+0x1900, %eax
498 # absolute load of _test_data with negative addend and local label
499 movl Ltest_data-16(%edi),%eax
500 movq Ltest_data-16(%edi),%mm4
509 # call internal + addend
510 call _test_branches+0x19000
512 # 16-bit call internal
515 # 16-bit call internal + addend
516 callw _test_branches+13
521 # call external + addend
522 call _external+0x19000
529 # call internal + addend
535 # call external + addend
541 1: movl _foo-1b(%eax),%esi
542 movl _foo+10-1b(%eax),%esi
543 movl _test_branches-1b(%eax),%esi
544 movl _test_branches+3-1b(%eax),%esi
545 cmpl $(( (_test_branches - _test_loads) + -2097152 )),(%esp)
546 cmpl $(( (_test_calls - _test_loads) + -2097152 )),(%esp)
562 .weak_definition _test_weak
585 # PIC load of a + addend
586 movl _a+0x1234(%rip), %eax
591 # PIC lea through GOT
592 movq _a@GOTPCREL(%rip), %rax
595 pushq _a@GOTPCREL(%rip)
597 # PIC lea external through GOT
598 movq _ax@GOTPCREL(%rip), %rax
600 # PIC external access of GOT
601 pushq _ax@GOTPCREL(%rip)
605 movb $0x12, _a+2(%rip)
609 movl $0x12345678, _a(%rip)
610 movl $0x12345678, _a+4(%rip)
611 movl $0x12345678, L0(%rip)
624 # call internal + addend
625 call _test_branches+0x19000
630 # call external + addend
631 call _external+0x19000
638 # call internal + addend
644 # call external + addend
648 # nonsense loop that creates byte branch relocation
655 .weak_definition _test_weak
668 # test that pointer-diff relocs are preserved
674 .long Llocal2-_test_branches
675 .long . - _test_branches
676 .long . - _test_branches + 8
677 .long _test_branches - .
678 .long _test_branches - . + 8
679 .long _test_branches - . - 8
683 .quad Llocal2-_test_branches
702 .long _foo - _distance_to_here
703 .long _foo - _distance_to_here - 4
704 .long _foo - _distance_to_here - 12
705 .long Lfoo - _distance_to_here
708 .long Lfoo - Ltohere - 4
714 L0: .quad _test_branches
716 .quad _test_branches+4
717 L1: .quad _test_branches - _test_diffs
718 .quad _test_branches - _test_diffs + 4
719 .long _test_branches - _test_diffs
720 # .long LCL0-. ### assembler bug: should SUB/UNSIGNED with content= LCL0-24, or single pc-rel SIGNED reloc with content = LCL0-.+4
723 .quad _test_branches - .
724 .quad _test_branches - L1
726 .quad _prev+100 - _test_branches
727 #tests support for 32-bit absolute pointers
731 # the following generates: _foo cannot be undefined in a subtraction expression
732 # but it should be ok (it will be a linker error if _foo and _bar are not in same linkage unit)
733 # .quad _foo - _bar ### assembler bug
735 .section __DATA,__data2
747 #if __ppc__ || __i386__ || __arm__
754 .long Lother - . + 0x4000000
757 #elif __ppc64__ || __x86_64__
764 .quad Lother - . + 0x4000000
769 # test that reloc sizes are the same
776 .long Llocal4-Llocal3