diff --git a/lib/std/start.zig b/lib/std/start.zig index b3c192216fe1cf1b3e124c71ebcbc4dd37cf0c80..5ff0ce9dfe8c2bf6d18825b6ae0d184d610274c6 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -487,14 +487,22 @@ fn _start() callconv(.naked) noreturn { \\ sub %%sp, 2047, %%sp \\ ba,a %[posixCallMainAndExit] , - .xtensa, .xtensaeb => - // a0 = LR, a7 = FP, a1 = SP - \\ movi a0, 0 - \\ movi a7, 0 - \\ mov a6, sp - \\ movi a8, -16 - \\ and sp, sp, a8 - \\ call4 %[posixCallMainAndExit] + .xtensa, .xtensaeb => if (builtin.abi == .call0) + // a0 = LR, a15 = FP, a1 = SP + \\ movi a0, 0 + \\ movi a15, 0 + \\ mov a2, sp + \\ movi a8, -16 + \\ and sp, sp, a8 + \\ call0 %[posixCallMainAndExit] + else + // a0 = LR, a7 = FP, a1 = SP + \\ movi a0, 0 + \\ movi a7, 0 + \\ mov a6, sp + \\ movi a8, -16 + \\ and sp, sp, a8 + \\ call4 %[posixCallMainAndExit] , else => @compileError("unsupported arch"), }