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	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
70arm:
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
90foo:
91	.word	0x11223344
92	alldirs	diff,f1
93	alldirs	diff,f2
94	alldirs	diff,f3
95	alldirs	diff,f4
96