aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2025-09-25 01:31:24 +0200
committerGitHub <noreply@github.com>2025-09-25 01:31:24 +0200
commit91b0adc4c15a273b7a8a94371941a3f3f7fd2232 (patch)
tree9fcf6e043cecae0285e2ecb05b5c939e8ea7d93e /lib
parent4a344de651de757f01d9139ce0fbda7935048cf5 (diff)
parentc73df65ded64f0918b9654a8a4133e80444f8701 (diff)
downloadzig-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.zig4
-rw-r--r--lib/std/os/linux/arm.zig4
-rw-r--r--lib/std/os/linux/hexagon.zig2
-rw-r--r--lib/std/os/linux/loongarch64.zig2
-rw-r--r--lib/std/os/linux/m68k.zig2
-rw-r--r--lib/std/os/linux/mips.zig2
-rw-r--r--lib/std/os/linux/mips64.zig2
-rw-r--r--lib/std/os/linux/powerpc.zig18
-rw-r--r--lib/std/os/linux/powerpc64.zig18
-rw-r--r--lib/std/os/linux/riscv32.zig2
-rw-r--r--lib/std/os/linux/riscv64.zig2
-rw-r--r--lib/std/os/linux/s390x.zig2
-rw-r--r--lib/std/os/linux/thumb.zig2
-rw-r--r--lib/std/os/linux/x86.zig4
-rw-r--r--lib/std/os/linux/x86_64.zig4
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 }),
+ ),
}
}