diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2001-01-19 01:25:13 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2001-01-19 01:25:13 +0000 |
commit | a302b48c21aaf08f166b8514705b87f1331c147f (patch) | |
tree | 66ba2814d00a53aed3a3df2b0c6ab6a34a2e2735 /newlib/libc/sys/arc/syscalls.c | |
parent | 74a3cd0a4f15c1c9dfe4044d7a54b420e5a5f7f6 (diff) | |
download | cygnal-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.c | 130 |
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; +} |