diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2025-09-25 01:31:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-25 01:31:24 +0200 |
| commit | 91b0adc4c15a273b7a8a94371941a3f3f7fd2232 (patch) | |
| tree | 9fcf6e043cecae0285e2ecb05b5c939e8ea7d93e /lib | |
| parent | 4a344de651de757f01d9139ce0fbda7935048cf5 (diff) | |
| parent | c73df65ded64f0918b9654a8a4133e80444f8701 (diff) | |
| download | zig-91b0adc4c15a273b7a8a94371941a3f3f7fd2232.tar.gz zig-91b0adc4c15a273b7a8a94371941a3f3f7fd2232.zip | |
Merge pull request #25231 from taylordotfish/bugfix/ppc-restore_rt
Fix `restore_rt` on PowerPC and remove unnecessary clobbers
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/std/os/linux/aarch64.zig | 4 | ||||
| -rw-r--r-- | lib/std/os/linux/arm.zig | 4 | ||||
| -rw-r--r-- | lib/std/os/linux/hexagon.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/loongarch64.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/m68k.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/mips.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/mips64.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/powerpc.zig | 18 | ||||
| -rw-r--r-- | lib/std/os/linux/powerpc64.zig | 18 | ||||
| -rw-r--r-- | lib/std/os/linux/riscv32.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/riscv64.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/s390x.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/thumb.zig | 2 | ||||
| -rw-r--r-- | lib/std/os/linux/x86.zig | 4 | ||||
| -rw-r--r-- | lib/std/os/linux/x86_64.zig | 4 |
15 files changed, 43 insertions, 27 deletions
diff --git a/lib/std/os/linux/aarch64.zig b/lib/std/os/linux/aarch64.zig index 2565e8984c..5fcf04c58b 100644 --- a/lib/std/os/linux/aarch64.zig +++ b/lib/std/os/linux/aarch64.zig @@ -141,12 +141,12 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ svc #0 : : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), else => asm volatile ( \\ svc #0 : : [number] "{x8}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), } } diff --git a/lib/std/os/linux/arm.zig b/lib/std/os/linux/arm.zig index 1b9bc913f8..5f41607efe 100644 --- a/lib/std/os/linux/arm.zig +++ b/lib/std/os/linux/arm.zig @@ -150,12 +150,12 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ svc #0 : : [number] "I" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), else => asm volatile ( \\ svc #0 : : [number] "{r7}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), } } diff --git a/lib/std/os/linux/hexagon.zig b/lib/std/os/linux/hexagon.zig index a3acbee50b..0568173cdf 100644 --- a/lib/std/os/linux/hexagon.zig +++ b/lib/std/os/linux/hexagon.zig @@ -135,7 +135,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ trap0(#0) : : [number] "{r6}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/loongarch64.zig b/lib/std/os/linux/loongarch64.zig index 617a65d757..5a237739bb 100644 --- a/lib/std/os/linux/loongarch64.zig +++ b/lib/std/os/linux/loongarch64.zig @@ -143,7 +143,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ syscall 0 : : [number] "r" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .r12 = true, .r13 = true, .r14 = true, .r15 = true, .r16 = true, .r17 = true, .r18 = true, .r19 = true, .r20 = true, .memory = true }); + ); } pub const msghdr = extern struct { diff --git a/lib/std/os/linux/m68k.zig b/lib/std/os/linux/m68k.zig index fde03e3fa9..78851c3928 100644 --- a/lib/std/os/linux/m68k.zig +++ b/lib/std/os/linux/m68k.zig @@ -148,7 +148,7 @@ pub fn restore_rt() callconv(.naked) noreturn { asm volatile ("trap #0" : : [number] "{d0}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/mips.zig b/lib/std/os/linux/mips.zig index 0293fb83e8..0958cf5a4b 100644 --- a/lib/std/os/linux/mips.zig +++ b/lib/std/os/linux/mips.zig @@ -254,7 +254,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ syscall : : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .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 }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/mips64.zig b/lib/std/os/linux/mips64.zig index db6e5dc1ea..bb05e26531 100644 --- a/lib/std/os/linux/mips64.zig +++ b/lib/std/os/linux/mips64.zig @@ -233,7 +233,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ syscall : : [number] "{$2}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .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 }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/powerpc.zig b/lib/std/os/linux/powerpc.zig index a77ecab16b..3e876bb3f0 100644 --- a/lib/std/os/linux/powerpc.zig +++ b/lib/std/os/linux/powerpc.zig @@ -247,11 +247,19 @@ pub fn clone() callconv(.naked) usize { pub const restore = restore_rt; pub fn restore_rt() callconv(.naked) noreturn { - asm volatile ( - \\ sc - : - : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }); + switch (@import("builtin").zig_backend) { + .stage2_c => asm volatile ( + \\ li 0, %[number] + \\ sc + : + : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), + ), + else => _ = asm volatile ( + \\ sc + : + : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), + ), + } } pub const F = struct { diff --git a/lib/std/os/linux/powerpc64.zig b/lib/std/os/linux/powerpc64.zig index 1e42dc88c8..70b11a86bb 100644 --- a/lib/std/os/linux/powerpc64.zig +++ b/lib/std/os/linux/powerpc64.zig @@ -232,11 +232,19 @@ pub fn clone() callconv(.naked) usize { pub const restore = restore_rt; pub fn restore_rt() callconv(.naked) noreturn { - asm volatile ( - \\ sc - : - : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true, .cr0 = true, .r4 = true, .r5 = true, .r6 = true, .r7 = true, .r8 = true, .r9 = true, .r10 = true, .r11 = true, .r12 = true }); + switch (@import("builtin").zig_backend) { + .stage2_c => asm volatile ( + \\ li 0, %[number] + \\ sc + : + : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), + ), + else => _ = asm volatile ( + \\ sc + : + : [number] "{r0}" (@intFromEnum(SYS.rt_sigreturn)), + ), + } } pub const F = struct { diff --git a/lib/std/os/linux/riscv32.zig b/lib/std/os/linux/riscv32.zig index 31e97743dc..c86882ad6c 100644 --- a/lib/std/os/linux/riscv32.zig +++ b/lib/std/os/linux/riscv32.zig @@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ ecall : : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/riscv64.zig b/lib/std/os/linux/riscv64.zig index 3498fb8fba..028a1b2fbd 100644 --- a/lib/std/os/linux/riscv64.zig +++ b/lib/std/os/linux/riscv64.zig @@ -142,7 +142,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ ecall : : [number] "{x17}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/s390x.zig b/lib/std/os/linux/s390x.zig index 50109aa35f..620aedfb69 100644 --- a/lib/std/os/linux/s390x.zig +++ b/lib/std/os/linux/s390x.zig @@ -154,7 +154,7 @@ pub fn restore_rt() callconv(.naked) noreturn { \\svc 0 : : [number] "{r1}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } pub const F = struct { diff --git a/lib/std/os/linux/thumb.zig b/lib/std/os/linux/thumb.zig index 5146355d77..3e13bad1d8 100644 --- a/lib/std/os/linux/thumb.zig +++ b/lib/std/os/linux/thumb.zig @@ -151,5 +151,5 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ svc #0 : : [number] "I" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }); + ); } diff --git a/lib/std/os/linux/x86.zig b/lib/std/os/linux/x86.zig index 8a2310ebed..0ffe9c2956 100644 --- a/lib/std/os/linux/x86.zig +++ b/lib/std/os/linux/x86.zig @@ -187,12 +187,12 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ int $0x80 : : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), else => asm volatile ( \\ int $0x80 : : [number] "{eax}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .memory = true }), + ), } } diff --git a/lib/std/os/linux/x86_64.zig b/lib/std/os/linux/x86_64.zig index cf9714dd13..583fad872d 100644 --- a/lib/std/os/linux/x86_64.zig +++ b/lib/std/os/linux/x86_64.zig @@ -137,12 +137,12 @@ pub fn restore_rt() callconv(.naked) noreturn { \\ syscall : : [number] "i" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .rcx = true, .r11 = true, .memory = true }), + ), else => asm volatile ( \\ syscall : : [number] "{rax}" (@intFromEnum(SYS.rt_sigreturn)), - : .{ .rcx = true, .r11 = true, .memory = true }), + ), } } |
