From ef782edab20b82b08762ffc9eee0c5995c89b175 Mon Sep 17 00:00:00 2001 From: Matheus Date: Mon, 17 Oct 2022 14:29:29 -0300 Subject: [PATCH] syscalls: clock_get --- src/arch/x86_64/syscall.asm | 4 +++- src/sys/syscalls/clock_get.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/sys/syscalls/clock_get.c diff --git a/src/arch/x86_64/syscall.asm b/src/arch/x86_64/syscall.asm index c5710b74..11fa0941 100644 --- a/src/arch/x86_64/syscall.asm +++ b/src/arch/x86_64/syscall.asm @@ -34,7 +34,8 @@ extern syscall_fchmodat extern syscall_openat extern syscall_chroot extern syscall_mkdirat -func_count equ 33 +extern syscall_clock_gettime +func_count equ 34 func_table: @@ -71,6 +72,7 @@ func_table: dq syscall_openat dq syscall_chroot dq syscall_mkdirat + dq syscall_clock_gettime section .text global asm_syscall_entry diff --git a/src/sys/syscalls/clock_get.c b/src/sys/syscalls/clock_get.c new file mode 100644 index 00000000..0c1a898e --- /dev/null +++ b/src/sys/syscalls/clock_get.c @@ -0,0 +1,33 @@ +#include +#include +#include +#include +#include + +#define CLOCK_REALTIME 0 + +syscallret syscall_clock_gettime(int clockid, struct timespec *tp){ + + syscallret retv; + retv.errno = 0; + + if(tp > USER_SPACE_END){ + retv.errno = EFAULT; + retv.ret = -1; + return retv; + } + + switch(clockid){ + case CLOCK_REALTIME: + *tp = arch_timekeeper_gettime(); + break; + default: + retv.errno = EINVAL; + + } + + retv.ret = retv.errno ? -1 : 0; + + return retv; + +}