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) {