qemu/tests/tcg/cris/bare/sys.c
<<
>>
Prefs
   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}
  64