From 7dfa64eb263a2dc3453a6667ca2f843202e11b31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Fri, 29 May 2026 08:20:36 +0200 Subject: [PATCH] std.os.linux.xtensa: add call0 support --- lib/std/os/linux/xtensa.zig | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/lib/std/os/linux/xtensa.zig b/lib/std/os/linux/xtensa.zig index a54c8f13d2040cff3d31a3426f812258df1faece..95b81eb4d1ba7882dacc3b29f082eb3331695a81 100644 --- a/lib/std/os/linux/xtensa.zig +++ b/lib/std/os/linux/xtensa.zig @@ -115,9 +115,10 @@ pub fn clone() callconv(.naked) u32 { // // syscall(SYS_clone, flags, stack, ptid, tls, ctid) // a2 a6, a3, a4, a5, a8 - asm volatile ( + if (builtin.abi != .call0) asm volatile ( \\ entry sp, 16 - \\ + ); + asm volatile ( \\ movi a8, -16 \\ and a3, a3, a8 \\ @@ -128,10 +129,29 @@ pub fn clone() callconv(.naked) u32 { \\ mov a8, a6 \\ mov a6, a4 \\ mov a4, a8 + ); + if (builtin.abi == .call0) asm volatile ( + \\ l32i a8, sp, 0 + ) else asm volatile ( \\ l32i a8, sp, 16 + ); + asm volatile ( \\ movi a2, 116 // SYS_clone \\ syscall + ); + if (builtin.abi == .call0) asm volatile ( + \\ beqz a2, 1f + \\ // parent + \\ ret \\ + \\ // child + \\1: + \\ movi a15, 0 + \\ movi a0, 0 + \\ + \\ mov a2, a10 + \\ callx0 a9 + ) else asm volatile ( \\ beqz a2, 1f \\ // parent \\ retw @@ -143,6 +163,8 @@ pub fn clone() callconv(.naked) u32 { \\ \\ mov a6, a10 \\ callx4 a9 + ); + asm volatile ( \\ movi a2, 118 // SYS_exit \\ syscall ); -- 2.54.0