authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-08 20:27:51+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2026-08-09 16:56:25+02:00
log71a0bc027304562f7c6ffc5acc95c3ee11c7cf1b
tree7d5bcb786e76bdb36c1eaf4ff6e33056121d1d17
parent511a5c6e192e562b830c30b95820cb37321d98f7
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux.alpha: fix some bugs in the clone assembly


1 files changed, 8 insertions(+), 8 deletions(-)

lib/std/os/linux/alpha.zig+8-8
......@@ -295,8 +295,8 @@ pub fn clone() callconv(.naked) u64 {
295295 // a0 = $16, a1 = $17, a2 = $18, a3 = $19,
296296 // a4 = $20, a5 = $21, sp = $30, v0 = $0
297297 \\ # Save function pointer and argument pointer on new thread stack
298 \\ ldi $1, -8
299 \\ and $17, $17, $1
298 \\ ldi $1, -16
299 \\ and $17, $1, $17
300300 \\ lda $17, -16($17)
301301 \\ stq $16, 0($17)
302302 \\ stq $19, 8($17)
......@@ -323,16 +323,16 @@ pub fn clone() callconv(.naked) u64 {
323323 \\ .cfi_undefined $26
324324 );
325325 asm volatile (
326 // v0 = $0, t9 = $23, a0 = $16, ra = $26, sp = $30, fp = $15
326 // v0 = $0, a0 = $16, ra = $26, sp = $30, fp = $15, pv = $27
327327 \\ mov 0, $15
328328 \\
329 \\ ldq $23, 0($30)
329 \\ ldq $27, 0($30)
330330 \\ ldq $16, 8($30)
331331 \\ lda $30, 16($30)
332 \\ jsr $26, ($23)
332 \\ jsr $26, ($27)
333333 \\
334334 \\ mov $0, $16
335 \\ ldi $0, 1 # SYS_EXIT
335 \\ ldi $0, 1 # SYS_exit
336336 \\ callsys
337337 );
338338}
......@@ -341,7 +341,7 @@ pub fn restore() noreturn {
341341 asm volatile (
342342 // v0 = $0, a0 = $16, sp = $30
343343 \\ mov $30, $16
344 \\ ldi $0, 103 # SIGRETURN
344 \\ ldi $0, 103 # SYS_sigreturn
345345 \\ callsys
346346 );
347347}
......@@ -350,7 +350,7 @@ pub fn restore_rt() noreturn {
350350 asm volatile (
351351 // v0 = $0, a0 = $16, sp = $30
352352 \\ mov $30, $16
353 \\ ldi $0, 351 # RT_SIGRETURN
353 \\ ldi $0, 351 # SYS_rt_sigreturn
354354 \\ callsys
355355 );
356356}