#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 */ #endif ret: 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,0 time: 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