aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKoakuma <koachan@protonmail.com>2020-10-24 19:58:01 +0700
committerKoakuma <koachan@protonmail.com>2020-10-24 20:05:37 +0700
commit73e62f22ecf25e58db343a45dfce35fccd8a4fa3 (patch)
tree42de12f18260e61bd28c3e81112a1cbd427cd8dd /lib
parent792526c0bd45754bced18298573ad2a145a7141e (diff)
downloadzig-73e62f22ecf25e58db343a45dfce35fccd8a4fa3.tar.gz
zig-73e62f22ecf25e58db343a45dfce35fccd8a4fa3.zip
Fix sigaction(2) call on sparc64
Diffstat (limited to 'lib')
-rw-r--r--lib/std/os/linux.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig
index a17c99a6a9..bb8ce00efe 100644
--- a/lib/std/os/linux.zig
+++ b/lib/std/os/linux.zig
@@ -818,7 +818,12 @@ pub fn sigaction(sig: u6, noalias act: *const Sigaction, noalias oact: ?*Sigacti
var ksa_old: k_sigaction = undefined;
const ksa_mask_size = @sizeOf(@TypeOf(ksa_old.mask));
@memcpy(@ptrCast([*]u8, &ksa.mask), @ptrCast([*]const u8, &act.mask), ksa_mask_size);
- const result = syscall4(.rt_sigaction, sig, @ptrToInt(&ksa), @ptrToInt(&ksa_old), ksa_mask_size);
+ const result = switch (builtin.arch) {
+ // The sparc version of rt_sigaction needs the restorer function to be passed as an argument too.
+ .sparc, .sparcv9 => syscall5(.rt_sigaction, sig,
+ @ptrToInt(&ksa), @ptrToInt(&ksa_old), @ptrToInt(ksa.restorer), ksa_mask_size),
+ else => syscall4(.rt_sigaction, sig, @ptrToInt(&ksa), @ptrToInt(&ksa_old), ksa_mask_size),
+ };
const err = getErrno(result);
if (err != 0) {
return result;