summaryrefslogtreecommitdiffstats
path: root/picorv32/scripts/romload/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'picorv32/scripts/romload/syscalls.c')
-rw-r--r--picorv32/scripts/romload/syscalls.c95
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();
-}
-