1 .syntax unified 2 .arch armv6t2 3 4 .macro define,name,type 5 .type \name,%gnu_indirect_function 6 \type 7 \name: 8 mov pc,lr 9 .size \name,.-\name 10 .endm 11 12 .macro define2,name 13 define aa\name,.arm 14 define at\name,.arm 15 define ab\name,.arm 16 define ta\name,.thumb_func 17 define tt\name,.thumb_func 18 define tb\name,.thumb_func 19 .endm 20 21 .macro test_relocs,name,width 22 bl \name(PLT) 23 b\width \name 24 beq\width \name 25 ldr r4,1f 26 ldr r4,2f 27 1: 28 .word \name(GOT) 29 2: 30 .word \name(GOT_PREL) 31 .endm 32 33 .macro test_relocs2,name,type,width 34 test_relocs a\type\name,\width 35 test_relocs t\type\name,\width 36 test_relocs ab\name,\width 37 test_relocs tb\name,\width 38 .endm 39 40 .macro diff,name 41 .word \name 42 .word \name-. 43 .endm 44 45 .macro alldirs,doit,name 46 \doit aa\name 47 \doit at\name 48 \doit ab\name 49 \doit ta\name 50 \doit tt\name 51 \doit tb\name 52 .endm 53 54 define2 f1 55 define2 f2 56 define2 f3 57 define2 f4 58 59 alldirs .globl,f2 60 61 alldirs .globl,f3 62 alldirs .hidden,f3 63 64 alldirs .globl,f4 65 alldirs .protected,f4 66 67 .globl arm 68 .type arm,%function 69 .arm 70 arm: 71 test_relocs foo 72 test_relocs2 f1,a, 73 test_relocs2 f2,a, 74 test_relocs2 f3,a, 75 test_relocs2 f4,a, 76 .size arm,.-arm 77 78 .globl _thumb 79 .type _thumb,%function 80 .thumb_func 81 _thumb: 82 test_relocs foo 83 test_relocs2 f1,t,.w 84 test_relocs2 f2,t,.w 85 test_relocs2 f3,t,.w 86 test_relocs2 f4,t,.w 87 .size _thumb,.-_thumb 88 89 .data 90 foo: 91 .word 0x11223344 92 alldirs diff,f1 93 alldirs diff,f2 94 alldirs diff,f3 95 alldirs diff,f4 96