From bc68aae677b2bae8d8243aa55f2af89e2b7a1bd3 Mon Sep 17 00:00:00 2001 From: Ashwin Naren Date: Sun, 11 Jan 2026 21:28:04 -0800 Subject: [PATCH] stub sys_clock_nanosleep # Conflicts: # src/arch/arm64/exceptions/syscall.rs --- etc/syscalls_linux_aarch64.md | 2 +- src/arch/arm64/exceptions/syscall.rs | 10 +++++++++- src/process/sleep.rs | 12 ++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/etc/syscalls_linux_aarch64.md b/etc/syscalls_linux_aarch64.md index c132db3..c96f386 100644 --- a/etc/syscalls_linux_aarch64.md +++ b/etc/syscalls_linux_aarch64.md @@ -115,7 +115,7 @@ | 0x70 (112) | clock_settime | (const clockid_t which_clock, const struct __kernel_timespec *tp) | __arm64_sys_clock_settime | false | | 0x71 (113) | clock_gettime | (const clockid_t which_clock, struct __kernel_timespec *tp) | __arm64_sys_clock_gettime | true | | 0x72 (114) | clock_getres | (const clockid_t which_clock, struct __kernel_timespec *tp) | __arm64_sys_clock_getres | false | -| 0x73 (115) | clock_nanosleep | (const clockid_t which_clock, int flags, const struct __kernel_timespec *rqtp, struct __kernel_timespec *rmtp) | __arm64_sys_clock_nanosleep | false | +| 0x73 (115) | clock_nanosleep | (const clockid_t which_clock, int flags, const struct __kernel_timespec *rqtp, struct __kernel_timespec *rmtp) | __arm64_sys_clock_nanosleep | partially | | 0x74 (116) | syslog | (int type, char *buf, int len) | __arm64_sys_syslog | false | | 0x75 (117) | ptrace | (long request, long pid, unsigned long addr, unsigned long data) | __arm64_sys_ptrace | partially | | 0x76 (118) | sched_setparam | (pid_t pid, struct sched_param *param) | __arm64_sys_sched_setparam | false | diff --git a/src/arch/arm64/exceptions/syscall.rs b/src/arch/arm64/exceptions/syscall.rs index 1d59699..801e185 100644 --- a/src/arch/arm64/exceptions/syscall.rs +++ b/src/arch/arm64/exceptions/syscall.rs @@ -57,7 +57,7 @@ use crate::{ }, prctl::sys_prctl, ptrace::{TracePoint, ptrace_stop, sys_ptrace}, - sleep::sys_nanosleep, + sleep::{sys_clock_nanosleep, sys_nanosleep}, thread_group::{ Pgid, pid::{sys_getpgid, sys_getpid, sys_getppid, sys_setpgid}, @@ -316,6 +316,14 @@ pub async fn handle_syscall() { 0x63 => sys_set_robust_list(TUA::from_value(arg1 as _), arg2 as _).await, 0x65 => sys_nanosleep(TUA::from_value(arg1 as _), TUA::from_value(arg2 as _)).await, 0x71 => sys_clock_gettime(arg1 as _, TUA::from_value(arg2 as _)).await, + 0x73 => { + sys_clock_nanosleep( + arg1 as _, + TUA::from_value(arg2 as _), + TUA::from_value(arg3 as _), + ) + .await + } 0x75 => { sys_ptrace( arg1 as _, diff --git a/src/process/sleep.rs b/src/process/sleep.rs index 3b7e680..59964ba 100644 --- a/src/process/sleep.rs +++ b/src/process/sleep.rs @@ -9,3 +9,15 @@ pub async fn sys_nanosleep(rqtp: TUA, _rmtp: TUA) -> Result< Ok(0) } + +pub async fn sys_clock_nanosleep( + _clock_id: i32, + rqtp: TUA, + _rmtp: TUA, +) -> Result { + let timespec = TimeSpec::copy_from_user(rqtp).await?; + + sleep(timespec.into()).await; + + Ok(0) +}