authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-29 08:20:36+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-05-29 09:40:38+02:00
log7dfa64eb263a2dc3453a6667ca2f843202e11b31
tree5c14595b8296a872b8879f75767fb7f7a0dd6c13
parenta80ff87a04acff1cd5e5c0496a65d2dbed823c0d
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux.xtensa: add call0 support


1 files changed, 24 insertions(+), 2 deletions(-)

lib/std/os/linux/xtensa.zig+24-2
......@@ -115,9 +115,10 @@ pub fn clone() callconv(.naked) u32 {
115115 //
116116 // syscall(SYS_clone, flags, stack, ptid, tls, ctid)
117117 // a2 a6, a3, a4, a5, a8
118 asm volatile (
118 if (builtin.abi != .call0) asm volatile (
119119 \\ entry sp, 16
120 \\
120 );
121 asm volatile (
121122 \\ movi a8, -16
122123 \\ and a3, a3, a8
123124 \\
......@@ -128,10 +129,29 @@ pub fn clone() callconv(.naked) u32 {
128129 \\ mov a8, a6
129130 \\ mov a6, a4
130131 \\ mov a4, a8
132 );
133 if (builtin.abi == .call0) asm volatile (
134 \\ l32i a8, sp, 0
135 ) else asm volatile (
131136 \\ l32i a8, sp, 16
137 );
138 asm volatile (
132139 \\ movi a2, 116 // SYS_clone
133140 \\ syscall
141 );
142 if (builtin.abi == .call0) asm volatile (
143 \\ beqz a2, 1f
144 \\ // parent
145 \\ ret
146 \\
147 \\ // child
148 \\1:
149 \\ movi a15, 0
150 \\ movi a0, 0
134151 \\
152 \\ mov a2, a10
153 \\ callx0 a9
154 ) else asm volatile (
135155 \\ beqz a2, 1f
136156 \\ // parent
137157 \\ retw
......@@ -143,6 +163,8 @@ pub fn clone() callconv(.naked) u32 {
143163 \\
144164 \\ mov a6, a10
145165 \\ callx4 a9
166 );
167 asm volatile (
146168 \\ movi a2, 118 // SYS_exit
147169 \\ syscall
148170 );