1
2
3
4
5
6
7#include <stddef.h>
8
9void exit(int status)
10{
11 register unsigned int callno asm ("r9") = 1;
12
13 asm volatile ("break 13\n"
14 :
15 : "r" (callno)
16 : "memory");
17 while (1) {
18
19 };
20}
21
22size_t write(int fd, const void *buf, size_t count)
23{
24 register unsigned int callno asm ("r9") = 4;
25 register unsigned int r10 asm ("r10") = fd;
26 register const void *r11 asm ("r11") = buf;
27 register size_t r12 asm ("r12") = count;
28 register unsigned int r asm ("r10");
29
30 asm volatile ("break 13\n"
31 : "=r" (r)
32 : "r" (callno), "0" (r10), "r" (r11), "r" (r12)
33 : "memory");
34
35 return r;
36}
37
38static inline int mystrlen(char *s)
39{
40 int i = 0;
41 while (s[i]) {
42 i++;
43 }
44 return i;
45}
46
47
48void pass(void)
49{
50 char s[] = "passed.\n";
51 write(1, s, sizeof(s) - 1);
52 exit(0);
53}
54
55void _fail(char *reason)
56{
57 char s[] = "\nfailed: ";
58 int len = mystrlen(reason);
59 write(1, s, sizeof(s) - 1);
60 write(1, reason, len);
61 write(1, "\n", 1);
62 exit(1);
63}
64