syscall.c
来自「jos lab3代码」· C语言 代码 · 共 65 行
C
65 行
// System call stubs.#include <inc/syscall.h>#include <inc/lib.h>static inline int32_tsyscall(int num, int check, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4, uint32_t a5){ int32_t ret; // Generic system call: pass system call number in AX, // up to five parameters in DX, CX, BX, DI, SI. // Interrupt kernel with T_SYSCALL. // // The "volatile" tells the assembler not to optimize // this instruction away just because we don't use the // return value. // // The last clause tells the assembler that this can // potentially change the condition codes and arbitrary // memory locations. asm volatile("int %1\n" : "=a" (ret) : "i" (T_SYSCALL), "a" (num), "d" (a1), "c" (a2), "b" (a3), "D" (a4), "S" (a5) : "cc", "memory"); if(check && ret > 0) panic("syscall %d returned %d (> 0)", num, ret); return ret;}voidsys_cputs(const char *s, size_t len){ syscall(SYS_cputs, 0, (uint32_t)s, len, 0, 0, 0);}intsys_cgetc(void){ return syscall(SYS_cgetc, 0, 0, 0, 0, 0, 0);}intsys_env_destroy(envid_t envid){ return syscall(SYS_env_destroy, 1, envid, 0, 0, 0, 0);}envid_tsys_getenvid(void){ return syscall(SYS_getenvid, 0, 0, 0, 0, 0, 0);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?