commit dd75302563f5cc0c67907b5c8a724e69379893f0 (tree) parent e3840817d7a8a3e9e69a7b0e6f3c7f2ce8c8d029 Author: Koakuma <koachan@protonmail.com> Date: Tue, 3 Aug 2021 22:24:11 +0700 Linux/SPARCv9: use C calling convention for restore_rt This is needed to prevent infinite loop when calling rt_sigreturn. Diffstat:
| M | lib/std/os/linux/sparc64.zig | | | 4 | +++- |
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/std/os/linux/sparc64.zig b/lib/std/os/linux/sparc64.zig @@ -169,7 +169,9 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: pub const restore = restore_rt; -pub fn restore_rt() callconv(.Naked) void { +// Need to use C ABI here instead of naked +// to prevent an infinite loop when calling rt_sigreturn. +pub fn restore_rt() callconv(.C) void { return asm volatile ("t 0x6d" : : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn))