Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libgloss/d30v/syscalls.c')
-rw-r--r--libgloss/d30v/syscalls.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/libgloss/d30v/syscalls.c b/libgloss/d30v/syscalls.c
new file mode 100644
index 000000000..58c738cb8
--- /dev/null
+++ b/libgloss/d30v/syscalls.c
@@ -0,0 +1,146 @@
+/*
+ * syscalls.c -- provide system call support via trap 31
+ *
+ * Copyright (c) 1997 Cygnus Support
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ *
+ * Read bytes, using simulator trap 31.
+ */
+
+#include <stdlib.h>
+#include "syscall.h"
+
+extern int *__errno(), errno;
+
+__asm__ (
+" .globl __syscall
+ .type __syscall,@function
+__syscall:
+ trap 31 || nop
+ cmpge f0,r2,0 -> jmp/tx link
+ bra __set_errno
+ .size __syscall,.-__syscall
+");
+
+int
+__set_errno (int new_errno)
+{
+ errno = new_errno;
+ *(__errno)() = errno;
+ return -1;
+}
+
+void
+_exit (int status)
+{
+ __syscall (status, 0, 0, 0, SYS_exit);
+}
+
+int
+open (const char *filename, int flags, int mode)
+{
+ return __syscall (filename, flags, mode, 0, SYS_open);
+}
+
+int
+close (int filedes)
+{
+ return __syscall (filedes, 0, 0, 0, SYS_close);
+}
+
+int
+read (int filedes, void *buffer, size_t length)
+{
+ return __syscall (filedes, buffer, length, 0, SYS_read);
+}
+
+int
+write (int filedes, void *buffer, size_t length)
+{
+ return __syscall (filedes, buffer, length, 0, SYS_write);
+}
+
+long
+lseek (int filedes, long offset, int whence)
+{
+ return __syscall (filedes, offset, whence, 0, SYS_lseek);
+}
+
+int
+unlink (const char *filename)
+{
+ return __syscall (filename, 0, 0, 0, SYS_unlink);
+}
+
+int
+getpid (void)
+{
+ return __syscall (0, 0, 0, 0, SYS_getpid);
+}
+
+int
+kill (int signal, int pid)
+{
+ return __syscall (signal, pid, 0, 0, SYS_kill);
+}
+
+int
+fstat (int filedes, void *info)
+{
+ return __syscall (filedes, info, 0, 0, SYS_fstat);
+}
+
+int
+__argvlen (void)
+{
+ return __syscall (0, 0, 0, 0, SYS_argvlen);
+}
+
+int
+__argv (void)
+{
+ return __syscall (0, 0, 0, 0, SYS_argv);
+}
+
+int
+chdir (char *dir)
+{
+ return __syscall (dir, 0, 0, 0, SYS_chdir);
+}
+
+int
+stat (const char *filename, void *info)
+{
+ return __syscall (filename, info, 0, 0, SYS_stat);
+}
+
+int
+chmod (const char *filename, int mode)
+{
+ return __syscall (filename, mode, 0, 0, SYS_chmod);
+}
+
+int
+utime (const char *filename, void *packet)
+{
+ return __syscall (filename, packet, 0, 0, SYS_utime);
+}
+
+time_t
+time (time_t *time_ptr)
+{
+ time_t result;
+ result = (time_t) __syscall (time_ptr, 0, 0, 0, SYS_time);
+ if (time_ptr != NULL)
+ *time_ptr = result;
+ return result;
+}