From b2bc44e0d5e5edde083ec281aa0575b16478d881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 29 Oct 2025 20:44:03 +0100 Subject: [PATCH] std.os.linux: fix restore for powerpc/powerpc64 sigreturn and rt_sigreturn are distinct syscalls on PowerPC. --- lib/std/os/linux/powerpc.zig | 16 +++++++++++++++- lib/std/os/linux/powerpc64.zig | 16 +++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index 46197d9085..d96a9d67f0 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -232,7 +232,21 @@ pub fn clone() callconv(.naked) u32 { ); } -pub const restore = restore_rt; +pub fn restore() callconv(.naked) noreturn { + switch (builtin.zig_backend) { + .stage2_c => asm volatile ( + \\ li 0, %[number] + \\ sc + : + : [number] "i" (@intFromEnum(SYS.sigreturn)), + ), + else => asm volatile ( + \\ sc + : + : [number] "{r0}" (@intFromEnum(SYS.sigreturn)), + ), + } +} pub fn restore_rt() callconv(.naked) noreturn { switch (builtin.zig_backend) { diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index 6ff666910f..d1663feaa8 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -217,7 +217,21 @@ pub fn clone() callconv(.naked) u64 { ); } -pub const restore = restore_rt; +pub fn restore() callconv(.naked) noreturn { + switch (builtin.zig_backend) { + .stage2_c => asm volatile ( + \\ li 0, %[number] + \\ sc + : + : [number] "i" (@intFromEnum(SYS.sigreturn)), + ), + else => asm volatile ( + \\ sc + : + : [number] "{r0}" (@intFromEnum(SYS.sigreturn)), + ), + } +} pub fn restore_rt() callconv(.naked) noreturn { switch (builtin.zig_backend) {