Commit | Line | Data |
---|---|---|
4ba2ef8f TP |
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 | ||
4f90d84b TP |
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 | |
63 | abs_entry_fct = 0x10004 | |
64 | .size abs_entry_fct, 0 | |
65 | .size __acle_se_abs_entry_fct, 0 | |
4ba2ef8f TP |
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 | |
104 | fake_entry_veneer2: | |
105 | nop | |
106 | .size fake_entry_veneer2, .-fake_entry_veneer2 | |
107 | .endif |