Retro68/gcc/newlib/libc/sys/d10v/trap.S
2012-03-27 01:51:53 +02:00

297 lines
6.4 KiB
ArmAsm

#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