summaryrefslogtreecommitdiff
path: root/newlib/libc/sys/d10v/trap.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/sys/d10v/trap.S')
-rw-r--r--newlib/libc/sys/d10v/trap.S296
1 files changed, 296 insertions, 0 deletions
diff --git a/newlib/libc/sys/d10v/trap.S b/newlib/libc/sys/d10v/trap.S
new file mode 100644
index 00000000000..9aca4291321
--- /dev/null
+++ b/newlib/libc/sys/d10v/trap.S
@@ -0,0 +1,296 @@
+#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