1 #pragma once
2 
3 #include <stdint.h>
4 
5 // 系统调用号
6 #define SYS_NOT_EXISTS 0
7 #define SYS_PUT_STRING 1
8 #define SYS_OPEN 2
9 #define SYS_CLOSE 3
10 #define SYS_READ 4
11 #define SYS_WRITE 5
12 #define SYS_LSEEK 6
13 #define SYS_FORK 7
14 #define SYS_VFORK 8
15 #define SYS_BRK 9
16 #define SYS_SBRK 10
17 
18 #define SYS_REBOOT 11    // 重启
19 #define SYS_CHDIR 12     // 切换工作目录
20 #define SYS_GET_DENTS 13 // 获取目录中的数据
21 #define SYS_EXECVE 14    // 执行新的应用程序
22 #define SYS_WAIT4 15     // 等待进程退出
23 #define SYS_EXIT 16      // 进程退出
24 #define SYS_MKDIR 17     // 创建文件夹
25 #define SYS_NANOSLEEP 18 // 纳秒级休眠
26 #define SYS_CLOCK 19     // 获取当前cpu时间
27 #define SYS_PIPE 20
28 
29 #define SYS_MSTAT 21        // 获取系统的内存状态信息
30 #define SYS_UNLINK_AT 22    // 删除文件夹/删除文件链接
31 #define SYS_KILL 23         // kill一个进程(向这个进程发出信号)
32 #define SYS_SIGACTION 24    // 设置进程的信号处理动作
33 #define SYS_RT_SIGRETURN 25 // 从信号处理函数返回
34 #define SYS_GETPID 26 // 获取当前进程的pid(进程标识符)
35 #define SYS_DUP 28
36 #define SYS_DUP2 29
37 #define SYS_SOCKET 30 // 创建一个socket
38 
39 #define SYS_SETSOCKOPT 31 // 设置socket的选项
40 #define SYS_GETSOCKOPT 32 // 获取socket的选项
41 #define SYS_CONNECT 33    // 连接到一个socket
42 #define SYS_BIND 34       // 绑定一个socket
43 #define SYS_SENDTO 35     // 向一个socket发送数据
44 #define SYS_RECVFROM 36   // 从一个socket接收数据
45 #define SYS_RECVMSG 37    // 从一个socket接收消息
46 #define SYS_LISTEN 38     // 监听一个socket
47 #define SYS_SHUTDOWN 39   // 关闭socket
48 #define SYS_ACCEPT 40     // 接受一个socket连接
49 #define SYS_GETSOCKNAME 41 // 获取socket的名字
50 #define SYS_GETPEERNAME 42 // 获取socket的对端名字
51 
52 /**
53  * @brief 用户态系统调用函数
54  *
55  * @param syscall_id
56  * @param arg0
57  * @param arg1
58  * @param arg2
59  * @param arg3
60  * @param arg4
61  * @param arg5
62  * @param arg6
63  * @param arg7
64  * @return long
65  */
66 long syscall_invoke(uint64_t syscall_id, uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3, uint64_t arg4,
67                     uint64_t arg5, uint64_t arg6, uint64_t arg7);