zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 7dfa64eb263a2dc3453a6667ca2f843202e11b31 (tree)
parent a80ff87a04acff1cd5e5c0496a65d2dbed823c0d
Author: Alex Rønne Petersen <alex@alexrp.com>
Date:   Fri, 29 May 2026 08:20:36 +0200

std.os.linux.xtensa: add call0 support

Diffstat:
Mlib/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 @@ -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 );