96 lines
1.4 KiB
ArmAsm
96 lines
1.4 KiB
ArmAsm
.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
|