sys.c (1264B)
1/* 2 * Helper functions for CRIS system tests 3 * 4 * There is no libc and only a limited set of headers. 5 */ 6 7#include <stddef.h> 8 9void exit(int status) 10{ 11 register unsigned int callno asm ("r9") = 1; /* NR_exit */ 12 13 asm volatile ("break 13\n" 14 : /* no outputs */ 15 : "r" (callno) 16 : "memory"); 17 while (1) { 18 /* do nothing */ 19 }; 20} 21 22size_t write(int fd, const void *buf, size_t count) 23{ 24 register unsigned int callno asm ("r9") = 4; /* NR_write */ 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}