Skip to content

Commit ff14d3e

Browse files
committed
fix arm64 alignment issues in signal()
1 parent 41264cb commit ff14d3e

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

src/cstd.zig

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,12 @@ const SignalFn = switch (builtin.zig_backend) {
538538
.stage1 => fn(c_int) callconv(.C) void,
539539
else => *const fn(c_int) callconv(.C) void,
540540
};
541-
export fn signal(sig: c_int, func: SignalFn) callconv(.C) ?SignalFn {
541+
const SignalResult = packed union {
542+
handler: ?SignalFn,
543+
err: isize,
544+
};
545+
export fn signal(sig: c_int, func: SignalFn) callconv(.C) SignalResult {
546+
std.debug.assert(@sizeOf(SignalResult) == @sizeOf(?SignalFn));
542547
if (builtin.os.tag == .linux) {
543548
var action = std.os.Sigaction{
544549
.handler = .{ .handler = func },
@@ -552,12 +557,10 @@ export fn signal(sig: c_int, func: SignalFn) callconv(.C) ?SignalFn {
552557
&action,
553558
&old_action,
554559
))) {
555-
.SUCCESS => return old_action.handler.handler,
560+
.SUCCESS => return SignalResult{ .handler = old_action.handler.handler },
556561
else => |e| {
557562
errno = @enumToInt(e);
558-
// translate-c having a hard time with this one
559-
//return c.SIG_ERR;
560-
return @intToPtr(?SignalFn, @bitCast(usize, @as(isize, -1)));
563+
return SignalResult{ .err = -1 };
561564
},
562565
}
563566
}

0 commit comments

Comments
 (0)