Commit 47c0464e86

Alex Rønne Petersen <alex@alexrp.com>
2024-07-24 17:41:18
start: Explicitly clear the link register on mips and mips64 just in case.
The kernel does this as required, but we cannot trust dynamic linkers to do it.
1 parent 1b13d74
Changed files (1)
lib
lib/std/start.zig
@@ -329,8 +329,8 @@ fn _start() callconv(.Naked) noreturn {
             \\ jsr (%%pc, %%a0)
             ,
             .mips, .mipsel =>
-            // The lr is already zeroed on entry, as specified by the ABI.
-            \\ addiu $fp, $zero, 0
+            \\ move $fp, $0
+            \\ move $ra, $0
             \\ move $a0, $sp
             \\ .set push
             \\ .set noat
@@ -340,8 +340,8 @@ fn _start() callconv(.Naked) noreturn {
             \\ j %[posixCallMainAndExit]
             ,
             .mips64, .mips64el =>
-            // The lr is already zeroed on entry, as specified by the ABI.
-            \\ addiu $fp, $zero, 0
+            \\ move $fp, $0
+            \\ move $ra, $0
             \\ move $a0, $sp
             \\ .set push
             \\ .set noat