diff options
author | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2000-02-17 19:39:52 +0000 |
commit | 8a0efa53e44919bcf5ccb1d3353618a82afdf8bc (patch) | |
tree | 68c3dbf3f2c6fd5d49777def9914d77b5cd4589d /newlib/libc/sys/m88kbug/syscalls.c | |
parent | 1fd5e000ace55b323124c7e556a7a864b972a5c4 (diff) | |
download | cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.gz cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.tar.bz2 cygnal-8a0efa53e44919bcf5ccb1d3353618a82afdf8bc.zip |
import newlib-2000-02-17 snapshot
Diffstat (limited to 'newlib/libc/sys/m88kbug/syscalls.c')
-rw-r--r-- | newlib/libc/sys/m88kbug/syscalls.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/newlib/libc/sys/m88kbug/syscalls.c b/newlib/libc/sys/m88kbug/syscalls.c new file mode 100644 index 000000000..32f42a925 --- /dev/null +++ b/newlib/libc/sys/m88kbug/syscalls.c @@ -0,0 +1,131 @@ +/* Operating system and traps for mvme187bug, the motorolola BUG + monitor for m88k */ + +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/times.h> +#include <errno.h> + +#include "sys/systraps.h" + +static void writechar(int c) { + register int n asm ("r2"); + n = c; + SYSTRAP(OUTCHR); + return; +} + +static int readchar(void) { + register int n asm ("r2"); + SYSTRAP(INCHR); + return(n); +} + +int read(int file, char *ptr, int len) { + int todo; + + for (todo = len; todo; --todo) { + *ptr++ = readchar(); + } + + return(len); +} + +int lseek(int file, int ptr, int dir) { + return 0; +} + +int write(int file, char *ptr, int len) { + int todo; + + for (todo = len; todo; --todo) { + writechar(*ptr++); + } + return(len); +} + +int close(int file) { + return(-1); +} + +caddr_t sbrk(int incr) { + extern char end; /* Defined by the linker */ + static char *heap_end; + char *prev_heap_end; + + if (heap_end == 0) + { + heap_end = &end; + } + prev_heap_end = heap_end; + if (heap_end + incr > stack_ptr) + { + _write (1, "Heap and stack collision\n", 25); + abort (); + } + heap_end += incr; + return((caddr_t) prev_heap_end); +} + +int isatty(int file) { + return(1); +} + +int fstat(int file, struct stat *st) { + st->st_mode = S_IFCHR; + return(0); +} + +int stat(char *filename, struct stat *st) { + st->st_mode = S_IFCHR; + return(0); +} + +int open(const char *path, int flags) { + return(0); +} + + +int _exit() { + SYSTRAP(RETURN); +} + +int execve(char *name, char **argv, char **env) { + errno = ENOMEM; + return(-1); +} + +int fork() { + errno = EAGAIN; + return(-1); +} + +int getpid() { + return(1); +} + +int kill(int pid, int sig) { + errno = EINVAL; + return(-1); +} + +int link(char *old, char *new) { + errno = EMLINK; + return(-1); +} + +clock_t times(struct tms *buf) { + return(-1); +} + +int unlink(char *name) { + errno = ENOENT; + return(-1); +} + +int wait(int *status) { + errno = ECHILD; + return(-1); +} + +/* end of syscalls.c */ |