42 lines
1.3 KiB
C
42 lines
1.3 KiB
C
#ifndef _SPIKE_UTILS_H_
|
|
#define _SPIKE_UTILS_H_
|
|
|
|
#include "util/types.h"
|
|
#include "spike_file.h"
|
|
#include "spike_memory.h"
|
|
#include "spike_htif.h"
|
|
|
|
long frontend_syscall(long n, uint64 a0, uint64 a1, uint64 a2, uint64 a3, uint64 a4, uint64 a5,
|
|
uint64 a6);
|
|
|
|
void poweroff(uint16 code) __attribute((noreturn));
|
|
void sprint(const char* s, ...);
|
|
void putstring(const char* s);
|
|
void shutdown(int) __attribute__((noreturn));
|
|
|
|
#define assert(x) \
|
|
({ \
|
|
if (!(x)) die("assertion failed: %s", #x); \
|
|
})
|
|
#define die(str, ...) \
|
|
({ \
|
|
sprint("%s:%d: " str "\n", __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
poweroff(-1); \
|
|
})
|
|
|
|
void do_panic(const char* s, ...) __attribute__((noreturn));
|
|
void kassert_fail(const char* s) __attribute__((noreturn));
|
|
|
|
//void shutdown(int code);
|
|
|
|
#define panic(s, ...) \
|
|
do { \
|
|
do_panic(s "\n", ##__VA_ARGS__); \
|
|
} while (0)
|
|
#define kassert(cond) \
|
|
do { \
|
|
if (!(cond)) kassert_fail("" #cond); \
|
|
} while (0)
|
|
|
|
#endif
|