axle OS
x86_32 UNIX-like hobby OS
src
kernel
util
syscall
syscall.h
1
#ifndef SYSCALL_H
2
#define SYSCALL_H
3
4
#include <std/std.h>
5
6
void
sys_install();
7
bool
sys_installed();
8
9
#define DECL_SYSCALL0(fn) int sys_##fn();
10
#define DECL_SYSCALL1(fn, p1) int sys_##fn(p1);
11
#define DECL_SYSCALL2(fn, p1, p2) int sys_##fn(p1, p2);
12
#define DECL_SYSCALL3(fn, p1, p2, p3) int sys_##fn(p1, p2, p3);
13
#define DECL_SYSCALL4(fn, p1, p2, p3, p4) int sys_##fn(p1, p2, p3, p4);
14
#define DECL_SYSCALL5(fn, p1, p2, p3, p4, p5) int sys_##fn(p1, p2, p3, p4, p5);
15
16
#define DEFN_SYSCALL0(fn, num) \
17
int sys_##fn() { \
18
int a; \
19
asm volatile("int $0x80" : "=a" (a) : "0" (num)); \
20
return a; \
21
}
22
23
#define DEFN_SYSCALL1(fn, num, P1) \
24
int sys_##fn(P1 p1) { \
25
int a; \
26
asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1)); \
27
return a; \
28
}
29
30
#define DEFN_SYSCALL2(fn, num, P1, P2) \
31
int sys_##fn(P1 p1, P2 p2) { \
32
int a; \
33
asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2)); \
34
return a; \
35
}
36
37
#define DEFN_SYSCALL3(fn, num, P1, P2, P3) \
38
int sys_##fn(P1 p1, P2 p2, P3 p3) { \
39
int a; \
40
asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d" ((int)p3)); \
41
return a; \
42
}
43
44
#define DEFN_SYSCALL4(fn, num, P1, P2, P3, P4) \
45
int sys_##fn(P1 p1, P2 p2, P3 p3, P4 p4) { \
46
int a; \
47
asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d" ((int)p3), "S" ((int)p4)); \
48
return a; \
49
}
50
51
#define DEFN_SYSCALL5(fn, num, P1, P2, P3, P4, P5) \
52
int sys_##fn(P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) { \
53
int a; \
54
asm volatile("int $0x80" : "=a" (a) : "0" (num), "b" ((int)p1), "c" ((int)p2), "d" ((int)p3), "S" ((int)p4), "D" ((int)p5)); \
55
return a; \
56
}
57
58
void
sys_insert(
void
* syscall);
59
60
#endif
Generated by
1.8.14