1 struct syscall_result {
6 static struct syscall_result syscall_return(long result)
8 struct syscall_result res;
9 if (((unsigned long)result) >= ((unsigned long)-125)) {
19 static struct syscall_result syscall0(unsigned long nr)
26 return syscall_return(res);
29 static struct syscall_result syscall1(unsigned long nr, unsigned long arg1)
35 : "a" (nr), "b" (arg1));
36 return syscall_return(res);
40 static struct syscall_result syscall2(unsigned long nr, unsigned long arg1, unsigned long arg2)
46 : "a" (nr), "b" (arg1), "c" (arg2));
47 return syscall_return(res);
52 static struct syscall_result syscall3(unsigned long nr, unsigned long arg1, unsigned long arg2,
59 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3));
60 return syscall_return(res);
64 static struct syscall_result syscall4(unsigned long nr, unsigned long arg1, unsigned long arg2,
65 unsigned long arg3, unsigned long arg4)
71 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3), "S" (arg4));
72 return syscall_return(res);
76 static struct syscall_result syscall5(unsigned long nr, unsigned long arg1, unsigned long arg2,
77 unsigned long arg3, unsigned long arg4, unsigned long arg5)
83 : "a" (nr), "b" (arg1), "c" (arg2), "d" (arg3),
84 "S" (arg4), "D" (arg5));
85 return syscall_return(res);
106 #define NR_oldstat 18
116 #define NR_oldfstat 28
137 #define NR_geteuid 49
138 #define NR_getegid 50
140 #define NR_umount2 52
145 #define NR_setpgid 57
147 #define NR_oldolduname 59
152 #define NR_getppid 64
153 #define NR_getpgrp 65
155 #define NR_sigaction 67
156 #define NR_sgetmask 68
157 #define NR_ssetmask 69
158 #define NR_setreuid 70
159 #define NR_setregid 71
160 #define NR_sigsuspend 72
161 #define NR_sigpending 73
162 #define NR_sethostname 74
163 #define NR_setrlimit 75
164 #define NR_getrlimit 76
165 #define NR_getrusage 77
166 #define NR_gettimeofday 78
167 #define NR_settimeofday 79
168 #define NR_getgroups 80
169 #define NR_setgroups 81
171 #define NR_symlink 83
172 #define NR_oldlstat 84
173 #define NR_readlink 85
177 #define NR_readdir 89
180 #define NR_truncate 92
181 #define NR_ftruncate 93
184 #define NR_getpriority 96
185 #define NR_setpriority 97
188 #define NR_fstatfs 100
189 #define NR_ioperm 101
190 #define NR_socketcall 102
191 #define NR_syslog 103
192 #define NR_setitimer 104
193 #define NR_getitimer 105
197 #define NR_olduname 109
199 #define NR_vhangup 111
201 #define NR_vm86old 113
203 #define NR_swapoff 115
204 #define NR_sysinfo 116
207 #define NR_sigreturn 119
209 #define NR_setdomainname 121
211 #define NR_modify_ldt 123
212 #define NR_adjtimex 124
213 #define NR_mprotect 125
214 #define NR_sigprocmask 126
215 #define NR_create_module 127
216 #define NR_init_module 128
217 #define NR_delete_module 129
218 #define NR_get_kernel_syms 130
219 #define NR_quotactl 131
220 #define NR_getpgid 132
221 #define NR_fchdir 133
222 #define NR_bdflush 134
224 #define NR_personality 136
225 #define NR_afs_syscall 137 /* Syscall for Andrew File System */
226 #define NR_setfsuid 138
227 #define NR_setfsgid 139
228 #define NR__llseek 140
229 #define NR_getdents 141
230 #define NR__newselect 142
234 #define NR_writev 146
235 #define NR_getsid 147
236 #define NR_fdatasync 148
237 #define NR__sysctl 149
239 #define NR_munlock 151
240 #define NR_mlockall 152
241 #define NR_munlockall 153
242 #define NR_sched_setparam 154
243 #define NR_sched_getparam 155
244 #define NR_sched_setscheduler 156
245 #define NR_sched_getscheduler 157
246 #define NR_sched_yield 158
247 #define NR_sched_get_priority_max 159
248 #define NR_sched_get_priority_min 160
249 #define NR_sched_rr_get_interval 161
250 #define NR_nanosleep 162
251 #define NR_mremap 163
252 #define NR_setresuid 164
253 #define NR_getresuid 165
255 #define NR_query_module 167
257 #define NR_nfsservctl 169
258 #define NR_setresgid 170
259 #define NR_getresgid 171
261 #define NR_rt_sigreturn 173
262 #define NR_rt_sigaction 174
263 #define NR_rt_sigprocmask 175
264 #define NR_rt_sigpending 176
265 #define NR_rt_sigtimedwait 177
266 #define NR_rt_sigqueueinfo 178
267 #define NR_rt_sigsuspend 179
269 #define NR_pwrite 181
271 #define NR_getcwd 183
272 #define NR_capget 184
273 #define NR_capset 185
274 #define NR_sigaltstack 186
275 #define NR_sendfile 187
276 #define NR_getpmsg 188 /* some people actually want streams */
277 #define NR_putpmsg 189 /* some people actually want streams */
280 typedef long ssize_t;
281 typedef unsigned long size_t;
283 /* Standard file descriptors */
284 #define STDIN_FILENO 0 /* Standard input */
285 #define STDOUT_FILENO 1 /* Standard output */
286 #define STDERR_FILENO 2 /* Standard error output */
288 static ssize_t write(int fd, const void *buf, size_t count)
290 struct syscall_result res;
291 res = syscall3(NR_write, fd, (unsigned long)buf, count);
295 static void _exit(int status)
297 struct syscall_result res;
298 res = syscall1(NR_exit, status);
301 static const char *addr_of_char(unsigned char ch)
303 static const char byte[] = {
304 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
305 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
306 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
307 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
308 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
309 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
310 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
311 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
312 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
313 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
314 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
315 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
316 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
317 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
318 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
319 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
320 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
321 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
322 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
323 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
324 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
325 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
326 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
327 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
328 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
329 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
330 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
331 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
332 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
333 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
334 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
335 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
340 static void console_tx_byte(unsigned char ch)
342 write(STDOUT_FILENO, addr_of_char(ch), 1);
345 static void console_tx_nibble(unsigned nibble)
348 digit = nibble + '0';
352 console_tx_byte(digit);
355 static void console_tx_char(unsigned char byte)
357 console_tx_byte(byte);
360 static void console_tx_hex8(unsigned char value)
362 console_tx_nibble((value >> 4U) & 0x0fU);
363 console_tx_nibble(value & 0x0fU);
366 static void console_tx_hex16(unsigned short value)
368 console_tx_nibble((value >> 12U) & 0x0FU);
369 console_tx_nibble((value >> 8U) & 0x0FU);
370 console_tx_nibble((value >> 4U) & 0x0FU);
371 console_tx_nibble(value & 0x0FU);
374 static void console_tx_hex32(unsigned short value)
376 console_tx_nibble((value >> 28U) & 0x0FU);
377 console_tx_nibble((value >> 24U) & 0x0FU);
378 console_tx_nibble((value >> 20U) & 0x0FU);
379 console_tx_nibble((value >> 16U) & 0x0FU);
380 console_tx_nibble((value >> 12U) & 0x0FU);
381 console_tx_nibble((value >> 8U) & 0x0FU);
382 console_tx_nibble((value >> 4U) & 0x0FU);
383 console_tx_nibble(value & 0x0FU);
386 static void console_tx_string(const char *str)
389 while((ch = *str++) != '\0') {
394 static void print_debug_char(unsigned char byte) { console_tx_char(byte); }
395 static void print_debug_hex8(unsigned char value) { console_tx_hex8(value); }
396 static void print_debug_hex16(unsigned short value){ console_tx_hex16(value); }
397 static void print_debug_hex32(unsigned int value) { console_tx_hex32(value); }
398 static void print_debug(const char *str) { console_tx_string(str); }
400 static void goto_test(void)
403 print_debug("goto_test\n");
427 static void main(void)
429 static const struct socket_desc cpu_socketsA[] = {
430 { .up = 2, .down = -1, .across = 1 }, /* Node 0 */
431 { .up = 3, .down = -1, .across = 0 }, /* Node 1 */
432 { .up = -1, .down = 0, .across = 3 }, /* Node 2 */
433 { .up = -1, .down = 1, .across = 2 } /* Node 3 */
435 static const struct socket_desc cpu_socketsB[4] = {
436 { 2, -1, 1 }, /* Node 0 */
437 { 3, -1, 0 }, /* Node 1 */
438 { -1, 0, 3 }, /* Node 2 */
439 { -1, 1, 2 } /* Node 3 */
442 print_debug("cpu_socketA\n");
443 for(i = 0; i < sizeof(cpu_socketsA)/sizeof(cpu_socketsA[0]); i++) {
445 print_debug_hex16(cpu_socketsA[i].up);
446 print_debug(" .down=");
447 print_debug_hex16(cpu_socketsA[i].down);
448 print_debug(" .across=");
449 print_debug_hex16(cpu_socketsA[i].across);
452 print_debug("\ncpu_socketB\n");
453 for(i = 0; i < sizeof(cpu_socketsB)/sizeof(cpu_socketsB[0]); i++) {
455 print_debug_hex16(cpu_socketsB[i].up);
456 print_debug(" .down=");
457 print_debug_hex16(cpu_socketsB[i].down);
458 print_debug(" .across=");
459 print_debug_hex16(cpu_socketsB[i].across);