cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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}