1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#include <debug.h>
#include <syscall.h>
#include <string.h>
#include <printf.h>
static uint32_t call(uint32_t a, uint32_t b, uint32_t c, uint32_t d, uint32_t ss, uint32_t dd) {
uint32_t ret;
asm volatile("int $0x40"
:"=a"(ret)
:"a"(a),"b"(b),"c"(c),"d"(d),"S"(ss),"D"(dd));
return ret;
}
void dbg_print(const char* str) {
call(SC_DBG_PRINT, (uint32_t)str, strlen(str), 0, 0, 0);
}
void dbg_printf(const char* fmt, ...) {
va_list ap;
char buffer[256];
va_start(ap, fmt);
vsnprintf(buffer, 256, fmt, ap);
va_end(ap);
dbg_print(buffer);
}
void yield() {
call(SC_YIELD, 0, 0, 0, 0, 0);
}
void exit(int code) {
call(SC_EXIT, code, 0, 0, 0, 0);
}
bool mmap(void* addr, size_t size, int mode) {
return call(SC_MMAP, (uint32_t)addr, size, mode, 0, 0);
}
bool mchmap(void* addr, int mode) {
return call(SC_MCHMAP, (uint32_t)addr, mode, 0, 0, 0);
}
bool munmap(void* addr) {
return call(SC_MUNMAP, (uint32_t)addr, 0, 0, 0, 0);
}
/* vim: set ts=4 sw=4 tw=0 noet :*/
|