LibC: Reorder some syscalls

This commit is contained in:
Bananymous 2023-06-11 03:28:43 +03:00
parent 5aed186827
commit 8be28012ee
2 changed files with 27 additions and 19 deletions

View File

@ -114,12 +114,6 @@ namespace Kernel
return ret.value()->pid(); return ret.value()->pid();
} }
long sys_sleep(unsigned int seconds)
{
PIT::sleep(seconds * 1000);
return 0;
}
long sys_exec(const char* pathname, const char* const* argv, const char* const* envp) long sys_exec(const char* pathname, const char* const* argv, const char* const* envp)
{ {
auto ret = Process::current().exec(pathname, argv, envp); auto ret = Process::current().exec(pathname, argv, envp);
@ -128,6 +122,12 @@ namespace Kernel
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
} }
long sys_sleep(unsigned int seconds)
{
PIT::sleep(seconds * 1000);
return 0;
}
long sys_wait(pid_t pid, int* stat_loc, int options) long sys_wait(pid_t pid, int* stat_loc, int options)
{ {
auto ret = Process::current().wait(pid, stat_loc, options); auto ret = Process::current().wait(pid, stat_loc, options);
@ -219,12 +219,12 @@ namespace Kernel
case SYS_FORK: case SYS_FORK:
ret = sys_fork_trampoline(); ret = sys_fork_trampoline();
break; break;
case SYS_SLEEP:
ret = sys_sleep((unsigned int)arg1);
break;
case SYS_EXEC: case SYS_EXEC:
ret = sys_exec((const char*)arg1, (const char* const*)arg2, (const char* const*)arg3); ret = sys_exec((const char*)arg1, (const char* const*)arg2, (const char* const*)arg3);
break; break;
case SYS_SLEEP:
ret = sys_sleep((unsigned int)arg1);
break;
case SYS_WAIT: case SYS_WAIT:
ret = sys_wait((pid_t)arg1, (int*)arg2, (int)arg3); ret = sys_wait((pid_t)arg1, (int*)arg2, (int)arg3);
break; break;

View File

@ -77,12 +77,27 @@ long syscall(long syscall, ...)
ret = Kernel::syscall(SYS_OPEN, (uintptr_t)path, oflags); ret = Kernel::syscall(SYS_OPEN, (uintptr_t)path, oflags);
break; break;
} }
case SYS_OPENAT:
{
int fd = va_arg(args, int);
const char* path = va_arg(args, const char*);
int oflags = va_arg(args, int);
ret = Kernel::syscall(SYS_OPENAT, fd, (uintptr_t)path, oflags);
break;
}
case SYS_ALLOC: case SYS_ALLOC:
{ {
size_t bytes = va_arg(args, size_t); size_t bytes = va_arg(args, size_t);
ret = Kernel::syscall(SYS_ALLOC, bytes); ret = Kernel::syscall(SYS_ALLOC, bytes);
break; break;
} }
case SYS_REALLOC:
{
void* ptr = va_arg(args, void*);
size_t size = va_arg(args, size_t);
ret = Kernel::syscall(SYS_REALLOC, (uintptr_t)ptr, size);
break;
}
case SYS_FREE: case SYS_FREE:
{ {
void* ptr = va_arg(args, void*); void* ptr = va_arg(args, void*);
@ -120,12 +135,6 @@ long syscall(long syscall, ...)
ret = Kernel::syscall(SYS_FORK); ret = Kernel::syscall(SYS_FORK);
break; break;
} }
case SYS_SLEEP:
{
unsigned int seconds = va_arg(args, unsigned int);
ret = Kernel::syscall(SYS_SLEEP, seconds);
break;
}
case SYS_EXEC: case SYS_EXEC:
{ {
const char* pathname = va_arg(args, const char*); const char* pathname = va_arg(args, const char*);
@ -134,11 +143,10 @@ long syscall(long syscall, ...)
ret = Kernel::syscall(SYS_EXEC, (uintptr_t)pathname, (uintptr_t)argv, (uintptr_t)envp); ret = Kernel::syscall(SYS_EXEC, (uintptr_t)pathname, (uintptr_t)argv, (uintptr_t)envp);
break; break;
} }
case SYS_REALLOC: case SYS_SLEEP:
{ {
void* ptr = va_arg(args, void*); unsigned int seconds = va_arg(args, unsigned int);
size_t size = va_arg(args, size_t); ret = Kernel::syscall(SYS_SLEEP, seconds);
ret = Kernel::syscall(SYS_REALLOC, (uintptr_t)ptr, size);
break; break;
} }
case SYS_WAIT: case SYS_WAIT: