diff --git a/posix-runner/syscalls.c b/posix-runner/syscalls.c index b2080d1..332ba8a 100644 --- a/posix-runner/syscalls.c +++ b/posix-runner/syscalls.c @@ -4,7 +4,8 @@ * SPDX-License-Identifier: GPL-3.0-or-later */ -void* syscall_table; +void *syscall_table; +void *_brk; int sys_read(int fd, char* buf, unsigned count, void, void, void) { @@ -26,6 +27,23 @@ int sys_lseek(int fd, int offset, int whence, void, void, void) return lseek(fd, offset, whence); } +int sys_brk(void* addr, void, void, void, void, void) +{ + if (_brk == NULL) { + _brk = calloc(1, 128 * 1024 * 1024); + if (_brk == NULL) { + return addr; + } + } + if (addr == NULL) { + return _brk; + } + else { + _brk = addr; + return _brk; + } +} + void sys_exit(unsigned value, void, void, void, void, void) { exit(value); @@ -38,5 +56,6 @@ void init_syscalls() syscall_table[1] = sys_write; syscall_table[2] = sys_open; syscall_table[8] = sys_lseek; + syscall_table[12] = sys_brk; syscall_table[60] = sys_exit; }