13#if defined(__riscv) || defined(__aarch64__)
15inline constexpr uint64_t kSyscallWrite = 64;
16inline constexpr uint64_t kSyscallExit = 93;
17inline constexpr uint64_t kSyscallYield = 124;
18inline constexpr uint64_t kSyscallClone = 220;
19inline constexpr uint64_t kSyscallGettid = 178;
20inline constexpr uint64_t kSyscallFutex = 98;
21inline constexpr uint64_t kSyscallSetTidAddress = 96;
22inline constexpr uint64_t kSyscallFork = 1220;
23inline constexpr uint64_t kSyscallSleep = 101;
24#elif defined(__x86_64__)
26inline constexpr uint64_t kSyscallWrite = 1;
27inline constexpr uint64_t kSyscallExit = 60;
28inline constexpr uint64_t kSyscallYield = 24;
29inline constexpr uint64_t kSyscallClone = 56;
30inline constexpr uint64_t kSyscallGettid = 186;
31inline constexpr uint64_t kSyscallFutex = 202;
32inline constexpr uint64_t kSyscallSetTidAddress = 218;
33inline constexpr uint64_t kSyscallFork = 57;
34inline constexpr uint64_t kSyscallSleep = 35;
36#error "Unsupported architecture for syscall numbers"
52[[nodiscard]]
auto sys_write(
int fd,
const char* buf,
size_t len) -> int;
80[[nodiscard]]
auto sys_sleep(uint64_t ms) -> int;
98[[nodiscard]]
auto sys_clone(uint64_t flags,
void* stack,
int* parent_tid,
99 int* child_tid,
void* tls) -> int;
113[[nodiscard]]
auto sys_fork() -> int;
156[[nodiscard]]
auto sys_futex(
int* uaddr,
int op,
int val,
const void* timeout,
157 int* uaddr2,
int val3) -> int;
167 uint64_t* mask) -> int;
181 const uint64_t* mask) -> int;
auto sys_sleep(uint64_t ms) -> int
休眠指定毫秒数
auto sys_set_tid_address(int *tidptr) -> int
设置线程ID地址(用于线程退出时的清理)
auto sys_sched_getaffinity(int pid, size_t cpusetsize, uint64_t *mask) -> int
获取线程的CPU亲和性
auto sys_exit(int code) -> int
退出当前进程或线程
auto sys_sched_setaffinity(int pid, size_t cpusetsize, const uint64_t *mask) -> int
设置线程的CPU亲和性
auto sys_futex(int *uaddr, int op, int val, const void *timeout, int *uaddr2, int val3) -> int
快速用户空间互斥锁操作(futex)
auto syscall_dispatcher(int64_t syscall_id, uint64_t args[6]) -> int
auto sys_gettid() -> int
获取当前线程ID
auto Syscall(uint64_t cause, cpu_io::TrapContext *context) -> void
AArch64 系统调用处理
auto sys_fork() -> int
创建新进程(fork)
auto sys_yield() -> int
主动放弃CPU,让出时间片
auto sys_write(int fd, const char *buf, size_t len) -> int
向文件描述符写入数据
auto sys_clone(uint64_t flags, void *stack, int *parent_tid, int *child_tid, void *tls) -> int
创建新线程(或进程)