📄 trap.s
字号:
#include "sys/syscall.h"#define SYSCALL(name) \ .global name ; \name: ; \ ldi r4, SYS ## name ; \ bra __trap0 .text .stabs "trap.S",100,0,0,__trap0 .stabs "int:t(0,1)=r(0,1);-65536;65535;",128,0,0,0 .stabs "long int:t(0,2)=r(0,1);0020000000000;0017777777777;",128,0,0,0 .stabs "_trap0:F(0,1)",36,0,1,__trap0 .stabs "arg1:P(0,1)",64,0,1,0 .stabs "arg2:P(0,1)",64,0,1,1 .stabs "arg3:P(0,1)",64,0,1,2 .stabs "arg4:P(0,1)",64,0,1,3 .stabs "number:P(0,1)",64,0,1,4 .global __trap0 .type __trap0,@function__trap0: trap 15 /* trap 15 returns result in r0, error code in r4 */ cmpeqi r4,0 /* is error code zero? */ brf0t ret /* yes, skip setting errno */#if __INT__==32 st r4,@(errno+2,r14) /* no, set errno */ srai r4,15 /* sign extend high word */ st r4,@(errno,r14)#else st r4,@(errno,r14) /* no, set errno */#endifret: jmp r13 /* return to caller */.Ltrap0: .size __trap0,.Ltrap0-__trap0 .stabs "",36,0,0,.Ltrap0-__trap0#define CONCAT(a,b) a ## b#define STRING(a) #a#define XSTRING(a) STRING(a)#define XSTRING2(a,b) XSTRING(CONCAT(a,b))#if __INT__==32#define _read _read16#define _lseek _lseek16#define _write _write16#define _close _close16#define _open _open16#define _creat _creat16#define _exit _exit16#define _stat _stat16#define _chmod _chmod16#define _chown _chown16#define _fork _fork16#define _wait _wait16#define _execve _execve16#define _execv _execv16#define _pipe _pipe16#define _kill _kill16#define _getpid _getpid16#endif/* Until the assembler allows semicolon as a statement separator, *//* we cannot use the SYSCALL macro. So expand it manually for now. *//* #SYSCALL(_read) *//* #SYSCALL(_lseek) *//* #SYSCALL(_write) *//* #SYSCALL(_close) *//* #SYSCALL(_open) *//* #SYSCALL(_creat) *//* #SYSCALL(_exit) *//* #SYSCALL(_stat) *//* #SYSCALL(_chmod) *//* #SYSCALL(_chown) *//* #SYSCALL(_fork) *//* #SYSCALL(_wait) *//* #SYSCALL(_execve) *//* #SYSCALL(_execv) *//* #SYSCALL(_pipe) *//* #SYSCALL(_getpid) *//* #SYSCALL(_kill) */ .global _read .type _read,@function .stabs XSTRING2(_read,:F(0,1)),36,0,2,_read .stabs "fd:P(0,1)",64,0,1,0 .stabs "ptr:P(0,1)",64,0,1,1 .stabs "len:P(0,1)",64,0,1,2_read: ldi r4, SYS_read bra __trap0.Lread: .size _read,.-_read .stabs "",36,0,0,.Lread-_read .global _lseek .type _lseek,@function .stabs XSTRING2(_lseek,:F(0,1)),36,0,3,_lseek .stabs "fd:P(0,1)",64,0,1,0 .stabs "offset:P(0,1)",64,0,1,2 .stabs "whence:p(0,1)",160,0,1,0_lseek: ldi r4, SYS_lseek bra __trap0.Llseek: .size _lseek,.Llseek-_lseek .stabs "",36,0,0,.Llseek-_lseek .global _write .type _write,@function .stabs XSTRING2(_write,:F(0,1)),36,0,4,_write .stabs "fd:P(0,1)",64,0,1,0 .stabs "ptr:P(0,1)",64,0,1,1 .stabs "len:P(0,1)",64,0,1,2_write: ldi r4, SYS_write bra __trap0.Lwrite: .size _write,.Lwrite-_write .stabs "",36,0,0,.Lwrite-_write .global _close .type _close,@function .stabs XSTRING2(_close,:F(0,1)),36,0,5,_close .stabs "fd:P(0,1)",64,0,1,0_close: ldi r4, SYS_close bra __trap0.Lclose: .size _close,.Lclose-_close .stabs "",36,0,0,.Lclose-_close .global _open .type _open,@function .stabs XSTRING2(_open,:F(0,1)),36,0,6,_open .stabs "name:P(0,1)",64,0,1,0 .stabs "flags:P(0,1)",64,0,1,1 .stabs "mode:P(0,1)",64,0,1,2_open: ldi r4, SYS_open bra __trap0.Lopen: .size _open,.Lopen-_open .stabs "",36,0,0,.Lopen-_open .global _creat .type _creat,@function .stabs XSTRING2(_creat,:F(0,1)),36,0,7,_creat .stabs "name:P(0,1)",64,0,1,0 .stabs "mode:P(0,1)",64,0,1,1_creat: ldi r4, SYS_creat bra __trap0.Lcreat: .size _creat,.Lcreat-_creat .stabs "",36,0,0,.Lcreat-_creat .global _exit .type _exit,@function .stabs XSTRING2(_exit,:F(0,1)),36,0,8,_exit .stabs "status:P(0,1)",64,0,1,0_exit: ldi r4, SYS_exit bra __trap0.Lexit: .size _exit,.Lexit-_exit .stabs "",36,0,0,.Lexit-_exit .global _stat .type _stat,@function .stabs XSTRING2(_stat,:F(0,1)),36,0,9,_stat .stabs "name:P(0,1)",64,0,1,0 .stabs "packet:P(0,1)",64,0,1,1_stat: ldi r4, SYS_stat bra __trap0.Lstat: .size _stat,.Lstat-_stat .stabs "",36,0,0,.Lstat-_stat .global _chmod .type _chmod,@function .stabs XSTRING2(_chmod,:F(0,1)),36,0,10,_chmod .stabs "name:P(0,1)",64,0,1,0 .stabs "mode:P(0,1)",64,0,1,1_chmod: ldi r4, SYS_chmod bra __trap0.Lchmod: .size _chmod,.Lchmod-_chmod .stabs "",36,0,0,.Lchmod-_chmod .global _chown .type _chown,@function .stabs XSTRING2(_chown,:F(0,1)),36,0,11,_chown .stabs "name:P(0,1)",64,0,1,0 .stabs "uid:P(0,1)",64,0,1,1 .stabs "gid:P(0,1)",64,0,1,2_chown: ldi r4, SYS_chown bra __trap0.Lchown: .size _chown,.Lchown-_chown .stabs "",36,0,0,.Lchown-_chown .global _fork .type _fork,@function .stabs XSTRING2(_fork,:F(0,1)),36,0,12,_fork_fork: ldi r4, SYS_fork bra __trap0.Lfork: .size _fork,.Lfork-_fork .stabs "",36,0,0,.Lfork-_fork .global _wait .type _wait,@function .stabs "status:P(0,1)",64,0,1,0 .stabs XSTRING2(_wait,:F(0,1)),36,0,13,_wait_wait: ldi r4, SYS_wait bra __trap0.Lwait: .size _wait,.Lwait-_wait .stabs "",36,0,0,.Lwait-_wait .global _execve .type _execve,@function .stabs "name:P(0,1)",64,0,1,0 .stabs "argv:P(0,1)",64,0,1,1 .stabs "envp:P(0,1)",64,0,1,2 .stabs XSTRING2(_execve,:F(0,1)),36,0,14,_execve_execve: ldi r4, SYS_execve bra __trap0.Lexecve: .size _execve,.Lexecve-_execve .stabs "",36,0,0,.Lexecve-_execve .global _execv .type _execv,@function .stabs XSTRING2(_execv,:F(0,1)),36,0,15,_execv .stabs "name:P(0,1)",64,0,1,0 .stabs "argv:P(0,1)",64,0,1,1_execv: ldi r4, SYS_execv bra __trap0.Lexecv: .size _execv,.Lexecv-_execv .stabs "",36,0,0,.Lexecv-_execv .global _pipe .type _pipe,@function .stabs XSTRING2(_pipe,:F(0,1)),36,0,16,_pipe .stabs "fds:P(0,1)",64,0,1,0_pipe: ldi r4, SYS_pipe bra __trap0.Lpipe: .size _pipe,.Lpipe-_pipe .stabs "",36,0,0,.Lpipe-_pipe .global time .type time,@function .stabs XSTRING2(time,:F(0,1)),36,0,17,time .stabs "ptr:P(0,1)",64,0,1,0time: ldi r4, SYS_time bra __trap0.Ltime: .size time,.Ltime-time .stabs "",36,0,0,.Ltime-time .global _kill .type _kill,@function .stabs XSTRING2(_kill,:F(0,1)),36,0,18,_kill .stabs "pid:P(0,1)",64,0,1,0 .stabs "sig:P(0,1)",64,0,1,1_kill: ldi r4, SYS_kill bra __trap0.Lkill: .size _kill,.Lkill-_kill .stabs "",36,0,0,.Lkill-_kill .global _getpid .type _getpid,@function .stabs XSTRING2(_getpid,:F(0,1)),36,0,19,_getpid_getpid: ldi r4, SYS_getpid bra __trap0.Lgetpid: .size _getpid,.Lgetpid-_getpid .stabs "",36,0,0,.Lgetpid-_getpid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -