From 35df59db508dbf23437f3253f25147191796e19f Mon Sep 17 00:00:00 2001 From: Tobias Anderberg Date: Mon, 16 Sep 2002 08:08:37 +0000 Subject: Initial version of the CRIS port. --- libc/sysdeps/linux/cris/syscall-cris.c | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 libc/sysdeps/linux/cris/syscall-cris.c (limited to 'libc/sysdeps/linux/cris/syscall-cris.c') diff --git a/libc/sysdeps/linux/cris/syscall-cris.c b/libc/sysdeps/linux/cris/syscall-cris.c new file mode 100644 index 000000000..fa923ec9d --- /dev/null +++ b/libc/sysdeps/linux/cris/syscall-cris.c @@ -0,0 +1,41 @@ +/* syscall.c - generalized linux system call interface */ + +#include +#include +#include + +/* perform a Linux/CRIS system call with variable number of arguments + * put them and the syscall number in the right registers and call + * break 13. + */ + +int +syscall(int number, ...) +{ + register long __a __asm__ ("r10"); + register long __b __asm__ ("r11"); + register long __c __asm__ ("r12"); + register long __d __asm__ ("r13"); + register long __e __asm__ ("r0"); + va_list args; + + va_start(args, number); + __a = va_arg(args, int); + __b = va_arg(args, int); + __c = va_arg(args, int); + __d = va_arg(args, int); + __e = va_arg(args, int); + va_end(args); + + __asm__ volatile ("movu.w %1,$r9\n\tbreak 13\n\t" + : "=r" (__a) + : "g" (number), "0" (__a), "r" (__b), "r" (__c), "r" (__d), + "r" (__e) + : "r10", "r9"); + + if (__a >= 0) + return __a; + + errno = -__a; + return -1; +} -- cgit v1.2.3