/* FR30 system call emulation code Copyright (C) 1998, 2010 Free Software Foundation, Inc. Contributed by Cygnus Solutions. */ #include #include "../syscall.h" int _read (file, ptr, len) int file; char * ptr; int len; { asm ("ldi:8 %0, r0" :: "i" (SYS_read) : "r0"); asm ("int #10"); return; } int _lseek (file, ptr, dir) int file; int ptr; int dir; { asm ("ldi:8 %0, r0" :: "i" (SYS_lseek) : "r0"); asm ("int #10"); return; } int _write (file, ptr, len) int file; char * ptr; int len; { asm ("ldi:8 %0, r0" :: "i" (SYS_write) : "r0"); asm ("int #10"); return; } int _open (path, flags) const char * path; int flags; { asm ("ldi:8 %0, r0" :: "i" (SYS_open) : "r0"); asm ("int #10"); return; } int _close (file) int file; { asm ("ldi:8 %0, r0" :: "i" (SYS_close) : "r0"); asm ("int #10"); return 0; } void _exit (n) int n; { asm ("ldi:8 %0, r0" :: "i" (SYS_exit) : "r0"); asm ("int #10"); } caddr_t _sbrk (incr) int incr; { extern char end asm ("_end"); /* Defined by the linker */ extern int __stack; /* Defined by linker script. */ static char * heap_end; char * prev_heap_end; if (heap_end == NULL) heap_end = & end; prev_heap_end = heap_end; #if 0 if (heap_end + incr > __stack) { _write ( 1, "_sbrk: Heap and stack collision\n", 32); abort (); } #endif heap_end += incr; return (caddr_t) prev_heap_end; } int _fstat (file, st) int file; struct stat * st; { st->st_mode = S_IFCHR; return 0; } int _unlink () { return -1; } int _isatty (fd) int fd; { return 0; } int _raise () { return 0; } int _times () { return 0; } int _kill (pid, sig) int pid; int sig; { return 0; } int _getpid (void) { return 0; }