tcc.c revision 1.1.1.1.4.2 1 1.1.1.1.4.2 rmind /* $NetBSD: tcc.c,v 1.1.1.1.4.2 2014/05/18 17:46:02 rmind Exp $ */
2 1.1.1.1.4.2 rmind
3 1.1.1.1.4.2 rmind /*
4 1.1.1.1.4.2 rmind * Test if our calling convention gymnastics actually work
5 1.1.1.1.4.2 rmind */
6 1.1.1.1.4.2 rmind
7 1.1.1.1.4.2 rmind #include <efi.h>
8 1.1.1.1.4.2 rmind #include <efilib.h>
9 1.1.1.1.4.2 rmind
10 1.1.1.1.4.2 rmind #ifdef __x86_64__
11 1.1.1.1.4.2 rmind #include <x86_64/pe.h>
12 1.1.1.1.4.2 rmind #include <x86_64/efibind.h>
13 1.1.1.1.4.2 rmind #endif
14 1.1.1.1.4.2 rmind
15 1.1.1.1.4.2 rmind #if 0
16 1.1.1.1.4.2 rmind asm volatile("out %0,%1" : : "a" ((uint8_t)a), "dN" (0x80));
17 1.1.1.1.4.2 rmind
18 1.1.1.1.4.2 rmind extern void dump_stack(void);
19 1.1.1.1.4.2 rmind asm( ".globl dump_stack\n"
20 1.1.1.1.4.2 rmind "dump_stack:\n"
21 1.1.1.1.4.2 rmind " movq %rsp, %rdi\n"
22 1.1.1.1.4.2 rmind " jmp *dump_stack_helper@GOTPCREL(%rip)\n"
23 1.1.1.1.4.2 rmind ".size dump_stack, .-dump_stack");
24 1.1.1.1.4.2 rmind
25 1.1.1.1.4.2 rmind void dump_stack_helper(uint64_t rsp_val)
26 1.1.1.1.4.2 rmind {
27 1.1.1.1.4.2 rmind uint64_t *rsp = (uint64_t *)rsp_val;
28 1.1.1.1.4.2 rmind int x;
29 1.1.1.1.4.2 rmind
30 1.1.1.1.4.2 rmind Print(L"%%rsp: 0x%08x%08x stack:\r\n",
31 1.1.1.1.4.2 rmind (rsp_val & 0xffffffff00000000) >>32,
32 1.1.1.1.4.2 rmind rsp_val & 0xffffffff);
33 1.1.1.1.4.2 rmind for (x = 0; x < 8; x++) {
34 1.1.1.1.4.2 rmind Print(L"%08x: ", ((uint64_t)rsp) & 0xffffffff);
35 1.1.1.1.4.2 rmind Print(L"%016x ", *rsp++);
36 1.1.1.1.4.2 rmind Print(L"%016x ", *rsp++);
37 1.1.1.1.4.2 rmind Print(L"%016x ", *rsp++);
38 1.1.1.1.4.2 rmind Print(L"%016x\r\n", *rsp++);
39 1.1.1.1.4.2 rmind }
40 1.1.1.1.4.2 rmind }
41 1.1.1.1.4.2 rmind #endif
42 1.1.1.1.4.2 rmind
43 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_failure_callback(void)
44 1.1.1.1.4.2 rmind {
45 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
46 1.1.1.1.4.2 rmind }
47 1.1.1.1.4.2 rmind
48 1.1.1.1.4.2 rmind EFI_STATUS test_failure(void)
49 1.1.1.1.4.2 rmind {
50 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_failure_callback, 0);
51 1.1.1.1.4.2 rmind }
52 1.1.1.1.4.2 rmind
53 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call0_callback(void)
54 1.1.1.1.4.2 rmind {
55 1.1.1.1.4.2 rmind return EFI_SUCCESS;
56 1.1.1.1.4.2 rmind }
57 1.1.1.1.4.2 rmind
58 1.1.1.1.4.2 rmind EFI_STATUS test_call0(void)
59 1.1.1.1.4.2 rmind {
60 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call0_callback, 0);
61 1.1.1.1.4.2 rmind }
62 1.1.1.1.4.2 rmind
63 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call1_callback(UINT32 a)
64 1.1.1.1.4.2 rmind {
65 1.1.1.1.4.2 rmind if (a != 0x12345678) {
66 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
67 1.1.1.1.4.2 rmind }
68 1.1.1.1.4.2 rmind return EFI_SUCCESS;
69 1.1.1.1.4.2 rmind }
70 1.1.1.1.4.2 rmind
71 1.1.1.1.4.2 rmind EFI_STATUS test_call1(void)
72 1.1.1.1.4.2 rmind {
73 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call1_callback, 1,0x12345678);
74 1.1.1.1.4.2 rmind }
75 1.1.1.1.4.2 rmind
76 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call2_callback(UINT32 a, UINT32 b)
77 1.1.1.1.4.2 rmind {
78 1.1.1.1.4.2 rmind if (a != 0x12345678) {
79 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
80 1.1.1.1.4.2 rmind }
81 1.1.1.1.4.2 rmind if (b != 0x23456789) {
82 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
83 1.1.1.1.4.2 rmind }
84 1.1.1.1.4.2 rmind return EFI_SUCCESS;
85 1.1.1.1.4.2 rmind }
86 1.1.1.1.4.2 rmind
87 1.1.1.1.4.2 rmind EFI_STATUS test_call2(void)
88 1.1.1.1.4.2 rmind {
89 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call2_callback, 2,
90 1.1.1.1.4.2 rmind 0x12345678, 0x23456789);
91 1.1.1.1.4.2 rmind }
92 1.1.1.1.4.2 rmind
93 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call3_callback(UINT32 a, UINT32 b,
94 1.1.1.1.4.2 rmind UINT32 c)
95 1.1.1.1.4.2 rmind {
96 1.1.1.1.4.2 rmind if (a != 0x12345678)
97 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
98 1.1.1.1.4.2 rmind if (b != 0x23456789)
99 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
100 1.1.1.1.4.2 rmind if (c != 0x3456789a)
101 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
102 1.1.1.1.4.2 rmind return EFI_SUCCESS;
103 1.1.1.1.4.2 rmind }
104 1.1.1.1.4.2 rmind
105 1.1.1.1.4.2 rmind EFI_STATUS test_call3(void)
106 1.1.1.1.4.2 rmind {
107 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call3_callback, 3,
108 1.1.1.1.4.2 rmind 0x12345678, 0x23456789, 0x3456789a);
109 1.1.1.1.4.2 rmind }
110 1.1.1.1.4.2 rmind
111 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call4_callback(UINT32 a, UINT32 b,
112 1.1.1.1.4.2 rmind UINT32 c, UINT32 d)
113 1.1.1.1.4.2 rmind {
114 1.1.1.1.4.2 rmind if (a != 0x12345678)
115 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
116 1.1.1.1.4.2 rmind if (b != 0x23456789)
117 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
118 1.1.1.1.4.2 rmind if (c != 0x3456789a)
119 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
120 1.1.1.1.4.2 rmind if (d != 0x456789ab)
121 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
122 1.1.1.1.4.2 rmind
123 1.1.1.1.4.2 rmind return EFI_SUCCESS;
124 1.1.1.1.4.2 rmind }
125 1.1.1.1.4.2 rmind
126 1.1.1.1.4.2 rmind EFI_STATUS test_call4(void)
127 1.1.1.1.4.2 rmind {
128 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call4_callback, 4,
129 1.1.1.1.4.2 rmind 0x12345678, 0x23456789, 0x3456789a, 0x456789ab);
130 1.1.1.1.4.2 rmind }
131 1.1.1.1.4.2 rmind
132 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call5_callback(UINT32 a, UINT32 b,
133 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e)
134 1.1.1.1.4.2 rmind {
135 1.1.1.1.4.2 rmind if (a != 0x12345678)
136 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
137 1.1.1.1.4.2 rmind if (b != 0x23456789)
138 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
139 1.1.1.1.4.2 rmind if (c != 0x3456789a)
140 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
141 1.1.1.1.4.2 rmind if (d != 0x456789ab)
142 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
143 1.1.1.1.4.2 rmind if (e != 0x56789abc)
144 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
145 1.1.1.1.4.2 rmind
146 1.1.1.1.4.2 rmind return EFI_SUCCESS;
147 1.1.1.1.4.2 rmind }
148 1.1.1.1.4.2 rmind
149 1.1.1.1.4.2 rmind EFI_STATUS test_call5(void)
150 1.1.1.1.4.2 rmind {
151 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call5_callback, 5,
152 1.1.1.1.4.2 rmind 0x12345678, 0x23456789, 0x3456789a, 0x456789ab, 0x56789abc);
153 1.1.1.1.4.2 rmind }
154 1.1.1.1.4.2 rmind
155 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call6_callback(UINT32 a, UINT32 b,
156 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e, UINT32 f)
157 1.1.1.1.4.2 rmind {
158 1.1.1.1.4.2 rmind if (a != 0x12345678)
159 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
160 1.1.1.1.4.2 rmind if (b != 0x23456789)
161 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
162 1.1.1.1.4.2 rmind if (c != 0x3456789a)
163 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
164 1.1.1.1.4.2 rmind if (d != 0x456789ab)
165 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
166 1.1.1.1.4.2 rmind if (e != 0x56789abc)
167 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
168 1.1.1.1.4.2 rmind if (f != 0x6789abcd)
169 1.1.1.1.4.2 rmind return EFI_NOT_READY;
170 1.1.1.1.4.2 rmind
171 1.1.1.1.4.2 rmind return EFI_SUCCESS;
172 1.1.1.1.4.2 rmind }
173 1.1.1.1.4.2 rmind
174 1.1.1.1.4.2 rmind EFI_STATUS test_call6(void)
175 1.1.1.1.4.2 rmind {
176 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call6_callback, 6,
177 1.1.1.1.4.2 rmind 0x12345678, 0x23456789, 0x3456789a, 0x456789ab, 0x56789abc,
178 1.1.1.1.4.2 rmind 0x6789abcd);
179 1.1.1.1.4.2 rmind }
180 1.1.1.1.4.2 rmind
181 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call7_callback(UINT32 a, UINT32 b,
182 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e, UINT32 f, UINT32 g)
183 1.1.1.1.4.2 rmind {
184 1.1.1.1.4.2 rmind if (a != 0x12345678)
185 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
186 1.1.1.1.4.2 rmind if (b != 0x23456789)
187 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
188 1.1.1.1.4.2 rmind if (c != 0x3456789a)
189 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
190 1.1.1.1.4.2 rmind if (d != 0x456789ab)
191 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
192 1.1.1.1.4.2 rmind if (e != 0x56789abc)
193 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
194 1.1.1.1.4.2 rmind if (f != 0x6789abcd)
195 1.1.1.1.4.2 rmind return EFI_NOT_READY;
196 1.1.1.1.4.2 rmind if (g != 0x789abcde)
197 1.1.1.1.4.2 rmind return EFI_DEVICE_ERROR;
198 1.1.1.1.4.2 rmind
199 1.1.1.1.4.2 rmind return EFI_SUCCESS;
200 1.1.1.1.4.2 rmind }
201 1.1.1.1.4.2 rmind
202 1.1.1.1.4.2 rmind EFI_STATUS test_call7(void)
203 1.1.1.1.4.2 rmind {
204 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call7_callback, 7,
205 1.1.1.1.4.2 rmind 0x12345678, 0x23456789, 0x3456789a, 0x456789ab,
206 1.1.1.1.4.2 rmind 0x56789abc, 0x6789abcd, 0x789abcde);
207 1.1.1.1.4.2 rmind }
208 1.1.1.1.4.2 rmind
209 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call8_callback(UINT32 a, UINT32 b,
210 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e, UINT32 f, UINT32 g, UINT32 h)
211 1.1.1.1.4.2 rmind {
212 1.1.1.1.4.2 rmind if (a != 0x12345678)
213 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
214 1.1.1.1.4.2 rmind if (b != 0x23456789)
215 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
216 1.1.1.1.4.2 rmind if (c != 0x3456789a)
217 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
218 1.1.1.1.4.2 rmind if (d != 0x456789ab)
219 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
220 1.1.1.1.4.2 rmind if (e != 0x56789abc)
221 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
222 1.1.1.1.4.2 rmind if (f != 0x6789abcd)
223 1.1.1.1.4.2 rmind return EFI_NOT_READY;
224 1.1.1.1.4.2 rmind if (g != 0x789abcde)
225 1.1.1.1.4.2 rmind return EFI_DEVICE_ERROR;
226 1.1.1.1.4.2 rmind if (h != 0x89abcdef)
227 1.1.1.1.4.2 rmind return EFI_WRITE_PROTECTED;
228 1.1.1.1.4.2 rmind
229 1.1.1.1.4.2 rmind return EFI_SUCCESS;
230 1.1.1.1.4.2 rmind }
231 1.1.1.1.4.2 rmind
232 1.1.1.1.4.2 rmind EFI_STATUS test_call8(void)
233 1.1.1.1.4.2 rmind {
234 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call8_callback, 8,
235 1.1.1.1.4.2 rmind 0x12345678,
236 1.1.1.1.4.2 rmind 0x23456789,
237 1.1.1.1.4.2 rmind 0x3456789a,
238 1.1.1.1.4.2 rmind 0x456789ab,
239 1.1.1.1.4.2 rmind 0x56789abc,
240 1.1.1.1.4.2 rmind 0x6789abcd,
241 1.1.1.1.4.2 rmind 0x789abcde,
242 1.1.1.1.4.2 rmind 0x89abcdef);
243 1.1.1.1.4.2 rmind }
244 1.1.1.1.4.2 rmind
245 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call9_callback(UINT32 a, UINT32 b,
246 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e, UINT32 f, UINT32 g, UINT32 h, UINT32 i)
247 1.1.1.1.4.2 rmind {
248 1.1.1.1.4.2 rmind if (a != 0x12345678)
249 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
250 1.1.1.1.4.2 rmind if (b != 0x23456789)
251 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
252 1.1.1.1.4.2 rmind if (c != 0x3456789a)
253 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
254 1.1.1.1.4.2 rmind if (d != 0x456789ab)
255 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
256 1.1.1.1.4.2 rmind if (e != 0x56789abc)
257 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
258 1.1.1.1.4.2 rmind if (f != 0x6789abcd)
259 1.1.1.1.4.2 rmind return EFI_NOT_READY;
260 1.1.1.1.4.2 rmind if (g != 0x789abcde)
261 1.1.1.1.4.2 rmind return EFI_DEVICE_ERROR;
262 1.1.1.1.4.2 rmind if (h != 0x89abcdef)
263 1.1.1.1.4.2 rmind return EFI_WRITE_PROTECTED;
264 1.1.1.1.4.2 rmind if (i != 0x9abcdef0)
265 1.1.1.1.4.2 rmind return EFI_OUT_OF_RESOURCES;
266 1.1.1.1.4.2 rmind
267 1.1.1.1.4.2 rmind return EFI_SUCCESS;
268 1.1.1.1.4.2 rmind }
269 1.1.1.1.4.2 rmind
270 1.1.1.1.4.2 rmind EFI_STATUS test_call9(void)
271 1.1.1.1.4.2 rmind {
272 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call9_callback, 9,
273 1.1.1.1.4.2 rmind 0x12345678,
274 1.1.1.1.4.2 rmind 0x23456789,
275 1.1.1.1.4.2 rmind 0x3456789a,
276 1.1.1.1.4.2 rmind 0x456789ab,
277 1.1.1.1.4.2 rmind 0x56789abc,
278 1.1.1.1.4.2 rmind 0x6789abcd,
279 1.1.1.1.4.2 rmind 0x789abcde,
280 1.1.1.1.4.2 rmind 0x89abcdef,
281 1.1.1.1.4.2 rmind 0x9abcdef0);
282 1.1.1.1.4.2 rmind }
283 1.1.1.1.4.2 rmind
284 1.1.1.1.4.2 rmind extern EFI_STATUS test_call10(void);
285 1.1.1.1.4.2 rmind EFI_STATUS EFI_FUNCTION test_call10_callback(UINT32 a, UINT32 b,
286 1.1.1.1.4.2 rmind UINT32 c, UINT32 d, UINT32 e, UINT32 f, UINT32 g, UINT32 h, UINT32 i,
287 1.1.1.1.4.2 rmind UINT32 j)
288 1.1.1.1.4.2 rmind {
289 1.1.1.1.4.2 rmind if (a != 0x12345678)
290 1.1.1.1.4.2 rmind return EFI_LOAD_ERROR;
291 1.1.1.1.4.2 rmind if (b != 0x23456789)
292 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
293 1.1.1.1.4.2 rmind if (c != 0x3456789a)
294 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
295 1.1.1.1.4.2 rmind if (d != 0x456789ab)
296 1.1.1.1.4.2 rmind return EFI_BAD_BUFFER_SIZE;
297 1.1.1.1.4.2 rmind if (e != 0x56789abc)
298 1.1.1.1.4.2 rmind return EFI_BUFFER_TOO_SMALL;
299 1.1.1.1.4.2 rmind if (f != 0x6789abcd)
300 1.1.1.1.4.2 rmind return EFI_NOT_READY;
301 1.1.1.1.4.2 rmind if (g != 0x789abcde)
302 1.1.1.1.4.2 rmind return EFI_DEVICE_ERROR;
303 1.1.1.1.4.2 rmind if (h != 0x89abcdef)
304 1.1.1.1.4.2 rmind return EFI_WRITE_PROTECTED;
305 1.1.1.1.4.2 rmind if (i != 0x9abcdef0)
306 1.1.1.1.4.2 rmind return EFI_OUT_OF_RESOURCES;
307 1.1.1.1.4.2 rmind if (j != 0xabcdef01)
308 1.1.1.1.4.2 rmind return EFI_VOLUME_CORRUPTED;
309 1.1.1.1.4.2 rmind
310 1.1.1.1.4.2 rmind return EFI_SUCCESS;
311 1.1.1.1.4.2 rmind }
312 1.1.1.1.4.2 rmind
313 1.1.1.1.4.2 rmind EFI_STATUS test_call10(void)
314 1.1.1.1.4.2 rmind {
315 1.1.1.1.4.2 rmind return uefi_call_wrapper(test_call10_callback, 10,
316 1.1.1.1.4.2 rmind 0x12345678,
317 1.1.1.1.4.2 rmind 0x23456789,
318 1.1.1.1.4.2 rmind 0x3456789a,
319 1.1.1.1.4.2 rmind 0x456789ab,
320 1.1.1.1.4.2 rmind 0x56789abc,
321 1.1.1.1.4.2 rmind 0x6789abcd,
322 1.1.1.1.4.2 rmind 0x789abcde,
323 1.1.1.1.4.2 rmind 0x89abcdef,
324 1.1.1.1.4.2 rmind 0x9abcdef0,
325 1.1.1.1.4.2 rmind 0xabcdef01);
326 1.1.1.1.4.2 rmind }
327 1.1.1.1.4.2 rmind
328 1.1.1.1.4.2 rmind EFI_STATUS
329 1.1.1.1.4.2 rmind efi_main (EFI_HANDLE *image, EFI_SYSTEM_TABLE *systab)
330 1.1.1.1.4.2 rmind {
331 1.1.1.1.4.2 rmind EFI_STATUS rc = EFI_SUCCESS;
332 1.1.1.1.4.2 rmind
333 1.1.1.1.4.2 rmind InitializeLib(image, systab);
334 1.1.1.1.4.2 rmind PoolAllocationType = 2; /* klooj */
335 1.1.1.1.4.2 rmind
336 1.1.1.1.4.2 rmind #ifndef __x86_64__
337 1.1.1.1.4.2 rmind uefi_call_wrapper(systab->ConOut->OutputString, 2, systab->ConOut,
338 1.1.1.1.4.2 rmind L"This test is only valid on x86_64\n");
339 1.1.1.1.4.2 rmind return EFI_UNSUPPORTED;
340 1.1.1.1.4.2 rmind #endif
341 1.1.1.1.4.2 rmind
342 1.1.1.1.4.2 rmind __asm__ volatile("out %0,%1" : : "a" ((uint8_t)0x14), "dN" (0x80));
343 1.1.1.1.4.2 rmind
344 1.1.1.1.4.2 rmind Print(L"Hello\r\n");
345 1.1.1.1.4.2 rmind rc = test_failure();
346 1.1.1.1.4.2 rmind if (EFI_ERROR(rc)) {
347 1.1.1.1.4.2 rmind Print(L"Returning Failure works\n");
348 1.1.1.1.4.2 rmind } else {
349 1.1.1.1.4.2 rmind Print(L"Returning failure doesn't work.\r\n");
350 1.1.1.1.4.2 rmind Print(L"%%rax was 0x%016x, should have been 0x%016x\n",
351 1.1.1.1.4.2 rmind rc, EFI_UNSUPPORTED);
352 1.1.1.1.4.2 rmind return EFI_INVALID_PARAMETER;
353 1.1.1.1.4.2 rmind }
354 1.1.1.1.4.2 rmind
355 1.1.1.1.4.2 rmind rc = test_call0();
356 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
357 1.1.1.1.4.2 rmind Print(L"0 args works just fine here.\r\n");
358 1.1.1.1.4.2 rmind } else {
359 1.1.1.1.4.2 rmind Print(L"0 args failed: 0x%016x\n", rc);
360 1.1.1.1.4.2 rmind return rc;
361 1.1.1.1.4.2 rmind }
362 1.1.1.1.4.2 rmind
363 1.1.1.1.4.2 rmind rc = test_call1();
364 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
365 1.1.1.1.4.2 rmind Print(L"1 arg works just fine here.\r\n");
366 1.1.1.1.4.2 rmind } else {
367 1.1.1.1.4.2 rmind Print(L"1 arg failed: 0x%016x\n", rc);
368 1.1.1.1.4.2 rmind return rc;
369 1.1.1.1.4.2 rmind }
370 1.1.1.1.4.2 rmind
371 1.1.1.1.4.2 rmind rc = test_call2();
372 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
373 1.1.1.1.4.2 rmind Print(L"2 args works just fine here.\r\n");
374 1.1.1.1.4.2 rmind } else {
375 1.1.1.1.4.2 rmind Print(L"2 args failed: 0x%016x\n", rc);
376 1.1.1.1.4.2 rmind return rc;
377 1.1.1.1.4.2 rmind }
378 1.1.1.1.4.2 rmind
379 1.1.1.1.4.2 rmind rc = test_call3();
380 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
381 1.1.1.1.4.2 rmind Print(L"3 args works just fine here.\r\n");
382 1.1.1.1.4.2 rmind } else {
383 1.1.1.1.4.2 rmind Print(L"3 args failed: 0x%016x\n", rc);
384 1.1.1.1.4.2 rmind return rc;
385 1.1.1.1.4.2 rmind }
386 1.1.1.1.4.2 rmind
387 1.1.1.1.4.2 rmind rc = test_call4();
388 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
389 1.1.1.1.4.2 rmind Print(L"4 args works just fine here.\r\n");
390 1.1.1.1.4.2 rmind } else {
391 1.1.1.1.4.2 rmind Print(L"4 args failed: 0x%016x\n", rc);
392 1.1.1.1.4.2 rmind return rc;
393 1.1.1.1.4.2 rmind }
394 1.1.1.1.4.2 rmind
395 1.1.1.1.4.2 rmind rc = test_call5();
396 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
397 1.1.1.1.4.2 rmind Print(L"5 args works just fine here.\r\n");
398 1.1.1.1.4.2 rmind } else {
399 1.1.1.1.4.2 rmind Print(L"5 args failed: 0x%016x\n", rc);
400 1.1.1.1.4.2 rmind return rc;
401 1.1.1.1.4.2 rmind }
402 1.1.1.1.4.2 rmind
403 1.1.1.1.4.2 rmind rc = test_call6();
404 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
405 1.1.1.1.4.2 rmind Print(L"6 args works just fine here.\r\n");
406 1.1.1.1.4.2 rmind } else {
407 1.1.1.1.4.2 rmind Print(L"6 args failed: 0x%016x\n", rc);
408 1.1.1.1.4.2 rmind return rc;
409 1.1.1.1.4.2 rmind }
410 1.1.1.1.4.2 rmind
411 1.1.1.1.4.2 rmind rc = test_call7();
412 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
413 1.1.1.1.4.2 rmind Print(L"7 args works just fine here.\r\n");
414 1.1.1.1.4.2 rmind } else {
415 1.1.1.1.4.2 rmind Print(L"7 args failed: 0x%016x\n", rc);
416 1.1.1.1.4.2 rmind return rc;
417 1.1.1.1.4.2 rmind }
418 1.1.1.1.4.2 rmind
419 1.1.1.1.4.2 rmind rc = test_call8();
420 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
421 1.1.1.1.4.2 rmind Print(L"8 args works just fine here.\r\n");
422 1.1.1.1.4.2 rmind } else {
423 1.1.1.1.4.2 rmind Print(L"8 args failed: 0x%016x\n", rc);
424 1.1.1.1.4.2 rmind return rc;
425 1.1.1.1.4.2 rmind }
426 1.1.1.1.4.2 rmind
427 1.1.1.1.4.2 rmind rc = test_call9();
428 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
429 1.1.1.1.4.2 rmind Print(L"9 args works just fine here.\r\n");
430 1.1.1.1.4.2 rmind } else {
431 1.1.1.1.4.2 rmind Print(L"9 args failed: 0x%016x\n", rc);
432 1.1.1.1.4.2 rmind return rc;
433 1.1.1.1.4.2 rmind }
434 1.1.1.1.4.2 rmind
435 1.1.1.1.4.2 rmind rc = test_call10();
436 1.1.1.1.4.2 rmind if (!EFI_ERROR(rc)) {
437 1.1.1.1.4.2 rmind Print(L"10 args works just fine here.\r\n");
438 1.1.1.1.4.2 rmind } else {
439 1.1.1.1.4.2 rmind Print(L"10 args failed: 0x%016x\n", rc);
440 1.1.1.1.4.2 rmind return rc;
441 1.1.1.1.4.2 rmind }
442 1.1.1.1.4.2 rmind
443 1.1.1.1.4.2 rmind return rc;
444 1.1.1.1.4.2 rmind }
445