authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-09-25 01:31:24+02:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2025-09-25 01:31:24+02:00
log91b0adc4c15a273b7a8a94371941a3f3f7fd2232
tree9fcf6e043cecae0285e2ecb05b5c939e8ea7d93e
parent4a344de651de757f01d9139ce0fbda7935048cf5
parentc73df65ded64f0918b9654a8a4133e80444f8701
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #25231 from taylordotfish/bugfix/ppc-restore_rt

Fix `restore_rt` on PowerPC and remove unnecessary clobbers

15 files changed, 43 insertions(+), 27 deletions(-)

lib/std/os/linux/aarch64.zig+2-2
......@@ -141,12 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
141141 \\ svc #0
142142 :
143143 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
144 : .{ .memory = true }),
144 ),
145145 else => asm volatile (
146146 \\ svc #0
147147 :
148148 : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)),
149 : .{ .memory = true }),
149 ),
150150 }
151151}
152152
lib/std/os/linux/arm.zig+2-2
......@@ -150,12 +150,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
150150 \\ svc #0
151151 :
152152 : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
153 : .{ .memory = true }),
153 ),
154154 else => asm volatile (
155155 \\ svc #0
156156 :
157157 : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)),
158 : .{ .memory = true }),
158 ),
159159 }
160160}
161161
lib/std/os/linux/hexagon.zig+1-1
......@@ -135,7 +135,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
135135 \\ trap0(#0)
136136 :
137137 : [number] "{r6}" (@intFromEnum(SYS.rt_sigreturn)),
138 : .{ .memory = true });
138 );
139139}
140140
141141pub const F = struct {
lib/std/os/linux/loongarch64.zig+1-1
......@@ -143,7 +143,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
143143 \\ syscall 0
144144 :
145145 : [number] "r" (@intFromEnum(SYS.rt_sigreturn)),
146 : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true });
146 );
147147}
148148
149149pub const msghdr = extern struct {
lib/std/os/linux/m68k.zig+1-1
......@@ -148,7 +148,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
148148 asm volatile ("trap #0"
149149 :
150150 : [number] "{d0}" (@intFromEnum(SYS.rt_sigreturn)),
151 : .{ .memory = true });
151 );
152152}
153153
154154pub const F = struct {
lib/std/os/linux/mips.zig+1-1
......@@ -254,7 +254,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
254254 \\ syscall
255255 :
256256 : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
257 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
257 );
258258}
259259
260260pub const F = struct {
lib/std/os/linux/mips64.zig+1-1
......@@ -233,7 +233,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
233233 \\ syscall
234234 :
235235 : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)),
236 : .{ .r1 = true, .r3 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r24 = true, .r25 = true, .hi = true, .lo = true, .memory = true });
236 );
237237}
238238
239239pub const F = struct {
lib/std/os/linux/powerpc.zig+13-5
......@@ -247,11 +247,19 @@ pub fn clone() callconv(.naked) usize {
247247pub const restore = restore_rt;
248248
249249pub fn restore_rt() callconv(.naked) noreturn {
250 asm volatile (
251 \\ sc
252 :
253 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
254 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
250 switch (@import("builtin").zig_backend) {
251 .stage2_c => asm volatile (
252 \\ li 0, %[number]
253 \\ sc
254 :
255 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
256 ),
257 else => _ = asm volatile (
258 \\ sc
259 :
260 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
261 ),
262 }
255263}
256264
257265pub const F = struct {
lib/std/os/linux/powerpc64.zig+13-5
......@@ -232,11 +232,19 @@ pub fn clone() callconv(.naked) usize {
232232pub const restore = restore_rt;
233233
234234pub fn restore_rt() callconv(.naked) noreturn {
235 asm volatile (
236 \\ sc
237 :
238 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
239 : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true });
235 switch (@import("builtin").zig_backend) {
236 .stage2_c => asm volatile (
237 \\ li 0, %[number]
238 \\ sc
239 :
240 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
241 ),
242 else => _ = asm volatile (
243 \\ sc
244 :
245 : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)),
246 ),
247 }
240248}
241249
242250pub const F = struct {
lib/std/os/linux/riscv32.zig+1-1
......@@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
142142 \\ ecall
143143 :
144144 : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
145 : .{ .memory = true });
145 );
146146}
147147
148148pub const F = struct {
lib/std/os/linux/riscv64.zig+1-1
......@@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
142142 \\ ecall
143143 :
144144 : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)),
145 : .{ .memory = true });
145 );
146146}
147147
148148pub const F = struct {
lib/std/os/linux/s390x.zig+1-1
......@@ -154,7 +154,7 @@ pub fn restore_rt() callconv(.naked) noreturn {
154154 \\svc 0
155155 :
156156 : [number] "{r1}" (@intFromEnum(SYS.rt_sigreturn)),
157 : .{ .memory = true });
157 );
158158}
159159
160160pub const F = struct {
lib/std/os/linux/thumb.zig+1-1
......@@ -151,5 +151,5 @@ pub fn restore_rt() callconv(.naked) noreturn {
151151 \\ svc #0
152152 :
153153 : [number] "I" (@intFromEnum(SYS.rt_sigreturn)),
154 : .{ .memory = true });
154 );
155155}
lib/std/os/linux/x86.zig+2-2
......@@ -187,12 +187,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
187187 \\ int $0x80
188188 :
189189 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
190 : .{ .memory = true }),
190 ),
191191 else => asm volatile (
192192 \\ int $0x80
193193 :
194194 : [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)),
195 : .{ .memory = true }),
195 ),
196196 }
197197}
198198
lib/std/os/linux/x86_64.zig+2-2
......@@ -137,12 +137,12 @@ pub fn restore_rt() callconv(.naked) noreturn {
137137 \\ syscall
138138 :
139139 : [number] "i" (@intFromEnum(SYS.rt_sigreturn)),
140 : .{ .rcx = true, .r11 = true, .memory = true }),
140 ),
141141 else => asm volatile (
142142 \\ syscall
143143 :
144144 : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)),
145 : .{ .rcx = true, .r11 = true, .memory = true }),
145 ),
146146 }
147147}
148148