| ... | @@ -169,7 +169,9 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: | ... | @@ -169,7 +169,9 @@ pub extern fn clone(func: fn (arg: usize) callconv(.C) u8, stack: usize, flags: |
| 169 | | 169 | |
| 170 | pub const restore = restore_rt; | 170 | pub const restore = restore_rt; |
| 171 | | 171 | |
| 172 | pub fn restore_rt() callconv(.Naked) void { | 172 | // Need to use C ABI here instead of naked |
| | 173 | // to prevent an infinite loop when calling rt_sigreturn. |
| | 174 | pub fn restore_rt() callconv(.C) void { |
| 173 | return asm volatile ("t 0x6d" | 175 | return asm volatile ("t 0x6d" |
| 174 | : | 176 | : |
| 175 | : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn)) | 177 | : [number] "{g1}" (@enumToInt(SYS.rt_sigreturn)) |