diff options
Diffstat (limited to 'picorv32/scripts/romload/syscalls.c')
-rw-r--r-- | picorv32/scripts/romload/syscalls.c | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/picorv32/scripts/romload/syscalls.c b/picorv32/scripts/romload/syscalls.c deleted file mode 100644 index 8ea84ca..0000000 --- a/picorv32/scripts/romload/syscalls.c +++ /dev/null @@ -1,95 +0,0 @@ -// An extremely minimalist syscalls.c for newlib -// Based on riscv newlib libgloss/riscv/sys_*.c -// Written by Clifford Wolf. - -#include <sys/stat.h> -#include <unistd.h> -#include <errno.h> - -#define UNIMPL_FUNC(_f) ".globl " #_f "\n.type " #_f ", @function\n" #_f ":\n" - -asm ( - ".text\n" - ".align 2\n" - UNIMPL_FUNC(_open) - UNIMPL_FUNC(_openat) - UNIMPL_FUNC(_lseek) - UNIMPL_FUNC(_stat) - UNIMPL_FUNC(_lstat) - UNIMPL_FUNC(_fstatat) - UNIMPL_FUNC(_isatty) - UNIMPL_FUNC(_access) - UNIMPL_FUNC(_faccessat) - UNIMPL_FUNC(_link) - UNIMPL_FUNC(_unlink) - UNIMPL_FUNC(_execve) - UNIMPL_FUNC(_getpid) - UNIMPL_FUNC(_fork) - UNIMPL_FUNC(_kill) - UNIMPL_FUNC(_wait) - UNIMPL_FUNC(_times) - UNIMPL_FUNC(_gettimeofday) - UNIMPL_FUNC(_ftime) - UNIMPL_FUNC(_utime) - UNIMPL_FUNC(_chown) - UNIMPL_FUNC(_chmod) - UNIMPL_FUNC(_chdir) - UNIMPL_FUNC(_getcwd) - UNIMPL_FUNC(_sysconf) - "j unimplemented_syscall\n" -); - -void unimplemented_syscall() -{ - const char *p = "Unimplemented system call called!\n"; - while (*p) - *(volatile int*)0x10000000 = *(p++); - asm volatile ("ebreak"); - __builtin_unreachable(); -} - -ssize_t _read(int file, void *ptr, size_t len) -{ - // always EOF - return 0; -} - -ssize_t _write(int file, const void *ptr, size_t len) -{ - const void *eptr = ptr + len; - while (ptr != eptr) - *(volatile int*)0x10000000 = *(char*)(ptr++); - return len; -} - -int _close(int file) -{ - // close is called before _exit() - return 0; -} - -int _fstat(int file, struct stat *st) -{ - // fstat is called during libc startup - errno = ENOENT; - return -1; -} - -void *_sbrk(ptrdiff_t incr) -{ - extern unsigned char _end[]; // Defined by linker - static unsigned long heap_end; - - if (heap_end == 0) - heap_end = (long)_end; - - heap_end += incr; - return (void *)(heap_end - incr); -} - -void _exit(int exit_status) -{ - asm volatile ("ebreak"); - __builtin_unreachable(); -} - |