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