authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-29 20:44:03+01:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-10-29 20:44:43+01:00
logb2bc44e0d5e5edde083ec281aa0575b16478d881
tree4a6ce20e045dc66c657777c073b4cdb4a34069bd
parenta7119d4269f0c31281cd472aab6228593378b294
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

std.os.linux: fix restore for powerpc/powerpc64

sigreturn and rt_sigreturn are distinct syscalls on PowerPC.

2 files changed, 30 insertions(+), 2 deletions(-)

lib/std/os/linux/powerpc.zig+15-1
...@@ -232,7 +232,21 @@ pub fn clone() callconv(.naked) u32 {...@@ -232,7 +232,21 @@ pub fn clone() callconv(.naked) u32 {
232 );232 );
233}233}
234234
235pub const restore = restore_rt;235pub fn restore() callconv(.naked) noreturn {
236 switch (builtin.zig_backend) {
237 .stage2_c => asm volatile (
238 \\ li 0, %[number]
239 \\ sc
240 :
241 : [number] "i" (@intFromEnum(SYS.sigreturn)),
242 ),
243 else => asm volatile (
244 \\ sc
245 :
246 : [number] "{r0}" (@intFromEnum(SYS.sigreturn)),
247 ),
248 }
249}
236250
237pub fn restore_rt() callconv(.naked) noreturn {251pub fn restore_rt() callconv(.naked) noreturn {
238 switch (builtin.zig_backend) {252 switch (builtin.zig_backend) {
lib/std/os/linux/powerpc64.zig+15-1
...@@ -217,7 +217,21 @@ pub fn clone() callconv(.naked) u64 {...@@ -217,7 +217,21 @@ pub fn clone() callconv(.naked) u64 {
217 );217 );
218}218}
219219
220pub const restore = restore_rt;220pub fn restore() callconv(.naked) noreturn {
221 switch (builtin.zig_backend) {
222 .stage2_c => asm volatile (
223 \\ li 0, %[number]
224 \\ sc
225 :
226 : [number] "i" (@intFromEnum(SYS.sigreturn)),
227 ),
228 else => asm volatile (
229 \\ sc
230 :
231 : [number] "{r0}" (@intFromEnum(SYS.sigreturn)),
232 ),
233 }
234}
221235
222pub fn restore_rt() callconv(.naked) noreturn {236pub fn restore_rt() callconv(.naked) noreturn {
223 switch (builtin.zig_backend) {237 switch (builtin.zig_backend) {