2023-12-26 23:57:20 +00:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2023 Andrius Štikonas <andrius@stikonas.eu>
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
*/
|
|
|
|
|
2023-12-28 22:13:02 +00:00
|
|
|
void *syscall_table;
|
|
|
|
void *_brk;
|
2023-12-26 23:57:20 +00:00
|
|
|
|
2023-12-27 23:04:40 +00:00
|
|
|
int sys_read(int fd, char* buf, unsigned count, void, void, void)
|
|
|
|
{
|
|
|
|
return read(fd, buf, count);
|
|
|
|
}
|
|
|
|
|
|
|
|
int sys_write(int fd, char* buf, unsigned count, void, void, void)
|
|
|
|
{
|
|
|
|
return write(fd, buf, count);
|
|
|
|
}
|
|
|
|
|
|
|
|
int sys_open(char* name, int flag, int mode, void, void, void)
|
|
|
|
{
|
|
|
|
return open(name, flag, mode);
|
|
|
|
}
|
|
|
|
|
2023-12-29 00:15:23 +00:00
|
|
|
int sys_close(int fd, void, void, void, void, void)
|
|
|
|
{
|
|
|
|
return close(fd);
|
|
|
|
}
|
|
|
|
|
2023-12-28 18:40:35 +00:00
|
|
|
int sys_lseek(int fd, int offset, int whence, void, void, void)
|
|
|
|
{
|
|
|
|
return lseek(fd, offset, whence);
|
|
|
|
}
|
|
|
|
|
2023-12-28 22:13:02 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-12-27 23:04:40 +00:00
|
|
|
void sys_exit(unsigned value, void, void, void, void, void)
|
2023-12-26 23:57:20 +00:00
|
|
|
{
|
|
|
|
exit(value);
|
|
|
|
}
|
|
|
|
|
2023-12-29 00:06:45 +00:00
|
|
|
int sys_mkdir(char const* a, mode_t b, void, void, void, void)
|
|
|
|
{
|
|
|
|
return mkdir(a, b);
|
|
|
|
}
|
|
|
|
|
2023-12-26 23:57:20 +00:00
|
|
|
void init_syscalls()
|
|
|
|
{
|
|
|
|
syscall_table = calloc(256, sizeof(void*));
|
2023-12-27 23:04:40 +00:00
|
|
|
syscall_table[0] = sys_read;
|
|
|
|
syscall_table[1] = sys_write;
|
|
|
|
syscall_table[2] = sys_open;
|
2023-12-29 00:15:23 +00:00
|
|
|
syscall_table[3] = sys_close;
|
2023-12-28 18:40:35 +00:00
|
|
|
syscall_table[8] = sys_lseek;
|
2023-12-28 22:13:02 +00:00
|
|
|
syscall_table[12] = sys_brk;
|
2023-12-26 23:57:20 +00:00
|
|
|
syscall_table[60] = sys_exit;
|
2023-12-29 00:06:45 +00:00
|
|
|
syscall_table[83] = sys_mkdir;
|
2023-12-26 23:57:20 +00:00
|
|
|
}
|