# --- T2-COPYRIGHT-BEGIN --- # t2/package/*/musl/up-next-clock-nanosleep.patch # Copyright (C) 2026 The T2 SDE Project # SPDX-License-Identifier: GPL-2.0 or patched project license # --- T2-COPYRIGHT-END --- From: René Rebe Subject: [PATCH] clock_nanosleep: don't assume nanosleep syscall exists Backport of the upstream commits cb0cdc2e and 5e9972ea, not in 1.2.6. A port with only 64-bit time system calls, like i860, has no nanosleep system call. Drop this with the next musl release. For the musl-1.2.6 release tarball. Tested in the MAME magicst2 model only, not on real hardware. Signed-off-by: René Rebe Co-Authored-By: Claude Opus 5.5 --- src/time/clock_nanosleep.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/time/clock_nanosleep.c b/src/time/clock_nanosleep.c index e195499c..8b5e214e 100644 --- a/src/time/clock_nanosleep.c +++ b/src/time/clock_nanosleep.c @@ -5,6 +5,15 @@ #define IS32BIT(x) !((x)+0x80000000ULL>>32) #define CLAMP(x) (int)(IS32BIT(x) ? (x) : 0x7fffffffU+((0ULL+(x))>>63)) +static int __sys_nanosleep_cp(const void *req, void *rem) +{ +#ifdef SYS_nanosleep + return __syscall_cp(SYS_nanosleep, req, rem); +#else + return __syscall_cp(SYS_clock_nanosleep, CLOCK_REALTIME, 0, req, rem); +#endif +} + int __clock_nanosleep(clockid_t clk, int flags, const struct timespec *req, struct timespec *rem) { if (clk == CLOCK_THREAD_CPUTIME_ID) return EINVAL; @@ -20,7 +29,7 @@ int __clock_nanosleep(clockid_t clk, int flags, const struct timespec *req, stru long long extra = s - CLAMP(s); long ts32[2] = { CLAMP(s), ns }; if (clk == CLOCK_REALTIME && !flags) - r = __syscall_cp(SYS_nanosleep, &ts32, &ts32); + r = __sys_nanosleep_cp(&ts32, &ts32); else r = __syscall_cp(SYS_clock_nanosleep, clk, flags, &ts32, &ts32); if (r==-EINTR && rem && !(flags & TIMER_ABSTIME)) { @@ -30,7 +39,7 @@ int __clock_nanosleep(clockid_t clk, int flags, const struct timespec *req, stru return -r; #else if (clk == CLOCK_REALTIME && !flags) - return -__syscall_cp(SYS_nanosleep, req, rem); + return -__sys_nanosleep_cp(req, rem); return -__syscall_cp(SYS_clock_nanosleep, clk, flags, req, rem); #endif }