summaryrefslogtreecommitdiffstats
path: root/newlib/libc/sys/arc/syscalls.c
diff options
context:
space:
mode:
authorJeff Johnston <jjohnstn@redhat.com>2001-01-19 01:25:13 +0000
committerJeff Johnston <jjohnstn@redhat.com>2001-01-19 01:25:13 +0000
commita302b48c21aaf08f166b8514705b87f1331c147f (patch)
tree66ba2814d00a53aed3a3df2b0c6ab6a34a2e2735 /newlib/libc/sys/arc/syscalls.c
parent74a3cd0a4f15c1c9dfe4044d7a54b420e5a5f7f6 (diff)
downloadcygnal-a302b48c21aaf08f166b8514705b87f1331c147f.tar.gz
cygnal-a302b48c21aaf08f166b8514705b87f1331c147f.tar.bz2
cygnal-a302b48c21aaf08f166b8514705b87f1331c147f.zip
2001-01-18 Jeff Johnston <jjohnstn@redhat.com>
* libc/sys/arc/Makefile.am: New file. * libc/sys/arc/Makefile.in: Ditto. * libc/sys/arc/aclocal.m4: Ditto. * libc/sys/arc/configure: Ditto. * libc/sys/arc/configure.in: Ditto. * libc/sys/arc/crt0.S: Ditto. * libc/sys/arc/isatty.c: Ditto. * libc/sys/arc/mem-layout.c: Ditto. * libc/sys/arc/sbrk.c: Ditto. * libc/sys/arc/syscalls.c: Ditto. * libc/sys/arc/sys/syscall.h: Ditto.
Diffstat (limited to 'newlib/libc/sys/arc/syscalls.c')
-rw-r--r--newlib/libc/sys/arc/syscalls.c130
1 files changed, 130 insertions, 0 deletions
diff --git a/newlib/libc/sys/arc/syscalls.c b/newlib/libc/sys/arc/syscalls.c
new file mode 100644
index 000000000..107989b00
--- /dev/null
+++ b/newlib/libc/sys/arc/syscalls.c
@@ -0,0 +1,130 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <_ansi.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <reent.h>
+
+_ssize_t
+_read_r (struct _reent *r, int fd, void *buf, size_t nbytes)
+{
+ int err;
+ _ssize_t rc;
+
+ SYSCALL (SYS_read, rc, err, fd, buf, nbytes);
+ if (err)
+ errno = err;
+ return rc;
+}
+
+_ssize_t
+_write_r (struct _reent *r, int fd, const void *buf, size_t nbytes)
+{
+ int err;
+ _ssize_t rc;
+
+ SYSCALL (SYS_write, rc, err, fd, buf, nbytes);
+ if (err)
+ errno = err;
+ return rc;
+}
+
+/* FIXME: The prototype in <fcntl.h> for open() uses ...,
+ but reent.h uses int. */
+
+int
+_open_r (struct _reent *r, const char *buf, int flags, int mode)
+{
+ int rc,err;
+#if 0
+ int mode;
+ va_list ap;
+
+ va_start (ap, flags);
+ mode = va_arg (ap, int);
+ va_end (ap);
+#endif
+
+ SYSCALL (SYS_open, rc, err, buf, flags, mode);
+ errno = err;
+ return rc;
+}
+
+int
+_close_r (struct _reent *r, int fd)
+{
+ int rc,err;
+
+ SYSCALL (SYS_close, rc, err, fd, 0, 0);
+ if (err)
+ errno = err;
+ return rc;
+}
+
+off_t
+_lseek_r (struct _reent *r, int fd, off_t offset, int whence)
+{
+ int err;
+ off_t rc;
+
+ SYSCALL (SYS_lseek, rc, err, fd, offset, whence);
+ if (err)
+ errno = err;
+ return rc;
+}
+
+int
+_fstat_r (struct _reent *r, int fd, struct stat *buf)
+{
+ int rc,err;
+
+ SYSCALL (SYS_fstat, rc, err, fd, buf, 0);
+ if (err)
+ errno = err;
+ return rc;
+}
+
+/* FIXME: Shouldn't this be _exit_r? */
+
+void
+_exit (int ret)
+{
+ int rc,err;
+
+ SYSCALL (SYS_exit, rc, err, ret, 0, 0);
+
+ /* If that failed, use an infinite loop. */
+ while (1)
+ continue;
+}
+
+time_t
+_time (time_t *timer)
+{
+ return 0;
+}
+
+int
+_creat_r (struct _reent *r, const char *path, int mode)
+{
+ return _open_r (r, path, O_CREAT | O_TRUNC, mode);
+}
+
+int
+_getpid_r (struct _reent *r)
+{
+ return 42;
+}
+
+int
+_kill_r (struct _reent *r, int pid, int sig)
+{
+ int rc,err;
+
+ SYSCALL (SYS_kill, rc, err, pid, sig, 0);
+ if (err)
+ errno = err;
+ return rc;
+}