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 271: 28 .word \name(GOT) 292: 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 f3 56 57 alldirs .globl,f3 58 alldirs .hidden,f3 59 60 .globl arm 61 .type arm,%function 62 .arm 63arm: 64 test_relocs foo 65 test_relocs2 f1,a, 66 test_relocs2 f2,a, 67 test_relocs2 f3,a, 68 test_relocs2 f4,a, 69 .size arm,.-arm 70 71 .globl _thumb 72 .type _thumb,%function 73 .thumb_func 74_thumb: 75 test_relocs foo 76 test_relocs2 f1,t,.w 77 test_relocs2 f2,t,.w 78 test_relocs2 f3,t,.w 79 test_relocs2 f4,t,.w 80 .size _thumb,.-_thumb 81 82 .data 83foo: 84 .word 0x11223344 85 alldirs diff,f1 86 alldirs diff,f2 87 alldirs diff,f3 88 alldirs diff,f4 89