1	.syntax unified
2	.thumb
3	.file	"foo.c"
4	.text
5
6.macro	decltype	name, type
7.ifc \type,object
8	.data
9.else
10	.thumb
11	.thumb_func
12.endif
13	.type	\name, %\type
14.endm
15
16
17.macro	entry	name, type, vis, typespc, visspc, entry_fct
18	.align	2
19.ifb \visspc
20	.\vis	__acle_se_\name
21.else
22	.\visspc	__acle_se_\name
23.endif
24	.\vis	\name
25	.thumb
26	.thumb_func
27.ifb \typespc
28	decltype	__acle_se_\name, \type
29.else
30	decltype	__acle_se_\name, \typespc
31.endif
32	decltype	\name, \type
33__acle_se_\name:
34	\entry_fct
35\name:
36.ifc \type,object
37	.word 42
38.else
39	nop
40.endif
41	.size	\name, .-\name
42	.size	__acle_se_\name, .-__acle_se_\name
43.endm
44
45
46.ifndef CHECK_ERRORS
47	@ Valid setups for veneer generation
48	entry glob_entry_veneer1, function, global
49	entry weak_entry_veneer1, function, weak
50	entry glob_entry_veneer2, function, global, visspc=weak
51	entry weak_entry_veneer2, function, weak, visspc=global
52
53	@ Valid setup for entry function without SG veneer
54	entry glob_entry_fct, function, global, entry_fct=nop
55
56	@ Valid setup for entry function with absolute address
57	.align 2
58	.global	__acle_se_abs_entry_fct
59	.global	abs_entry_fct
60	.type	__acle_se_abs_entry_fct, %function
61	.type	abs_entry_fct, %function
62__acle_se_abs_entry_fct = 0x10000
63abs_entry_fct = 0x10004
64	.size	abs_entry_fct, 0
65	.size	__acle_se_abs_entry_fct, 0
66.else
67	@ Invalid setups for veneer generation (visibility)
68	entry loc_entry_veneer1, function, local
69	entry loc_entry_veneer2, function, global, visspc=local
70	entry loc_entry_veneer3, function, local, visspc=global
71	entry loc_entry_veneer4, function, weak, visspc=local
72	entry loc_entry_veneer5, function, local, visspc=weak
73
74	@ Invalid setups for veneer generation (absent standard symbol)
75	.align	2
76	.global	__acle_se_fake_entry_veneer1
77	.thumb
78	.thumb_func
79	.type	__acle_se_fake_entry_veneer1, %function
80__acle_se_fake_entry_veneer1:
81	nop
82	.size	__acle_se_fake_entry_veneer1, .-__acle_se_fake_entry_veneer1
83
84	@ Invalid setups for veneer generation (type)
85	entry obj_entry_veneer1, object, global, typespc=function
86	entry obj_entry_veneer2, function, global, typespc=object
87
88	@ Invalid setup for veneer generation (sections)
89	.section .text.sub1
90	.align	2
91	.thumb
92	.thumb_func
93	.global	__acle_se_fake_entry_veneer2
94	.type	__acle_se_fake_entry_veneer2, %function
95__acle_se_fake_entry_veneer2:
96	nop
97	.size	__acle_se_fake_entry_veneer2, .-__acle_se_fake_entry_veneer2
98	.section .text.sub2
99	.align	2
100	.thumb
101	.thumb_func
102	.global	fake_entry_veneer2
103	.type	fake_entry_veneer2, %function
104fake_entry_veneer2:
105	nop
106	.size	fake_entry_veneer2, .-fake_entry_veneer2
107.endif
108