| .syntax unified |
| .arch armv6t2 |
| |
| .macro define,name,type |
| .type \name,%gnu_indirect_function |
| \type |
| \name: |
| mov pc,lr |
| .size \name,.-\name |
| .endm |
| |
| .macro define2,name |
| define aa\name,.arm |
| define at\name,.arm |
| define ab\name,.arm |
| define ta\name,.thumb_func |
| define tt\name,.thumb_func |
| define tb\name,.thumb_func |
| .endm |
| |
| .macro test_relocs,name,width |
| bl \name(PLT) |
| b\width \name |
| beq\width \name |
| ldr r4,1f |
| ldr r4,2f |
| 1: |
| .word \name(GOT) |
| 2: |
| .word \name(GOT_PREL) |
| .endm |
| |
| .macro test_relocs2,name,type,width |
| test_relocs a\type\name,\width |
| test_relocs t\type\name,\width |
| test_relocs ab\name,\width |
| test_relocs tb\name,\width |
| .endm |
| |
| .macro diff,name |
| .word \name |
| .word \name-. |
| .endm |
| |
| .macro alldirs,doit,name |
| \doit aa\name |
| \doit at\name |
| \doit ab\name |
| \doit ta\name |
| \doit tt\name |
| \doit tb\name |
| .endm |
| |
| define2 f1 |
| define2 f2 |
| define2 f3 |
| define2 f4 |
| |
| alldirs .globl,f2 |
| |
| alldirs .globl,f3 |
| alldirs .hidden,f3 |
| |
| alldirs .globl,f4 |
| alldirs .protected,f4 |
| |
| .globl arm |
| .type arm,%function |
| .arm |
| arm: |
| test_relocs foo |
| test_relocs2 f1,a, |
| test_relocs2 f2,a, |
| test_relocs2 f3,a, |
| test_relocs2 f4,a, |
| .size arm,.-arm |
| |
| .globl _thumb |
| .type _thumb,%function |
| .thumb_func |
| _thumb: |
| test_relocs foo |
| test_relocs2 f1,t,.w |
| test_relocs2 f2,t,.w |
| test_relocs2 f3,t,.w |
| test_relocs2 f4,t,.w |
| .size _thumb,.-_thumb |
| |
| .data |
| foo: |
| .word 0x11223344 |
| alldirs diff,f1 |
| alldirs diff,f2 |
| alldirs diff,f3 |
| alldirs diff,f4 |