From 4193ea8239264c7ee6891e9ef5ee756e13833fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Thu, 23 Oct 2025 06:18:22 +0200 Subject: [PATCH] std.start: add sh support --- lib/std/start.zig | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/std/start.zig b/lib/std/start.zig index 7e45bc42ea..4cf2a0956b 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -212,6 +212,7 @@ fn _start() callconv(.naked) noreturn { else ".cfi_undefined ra", .s390x => ".cfi_undefined %%r14", + .sh, .sheb => ".cfi_undefined pr", .sparc, .sparc64 => ".cfi_undefined %%i7", .x86 => ".cfi_undefined %%eip", .x86_64 => ".cfi_undefined %%rip", @@ -455,6 +456,21 @@ fn _start() callconv(.naked) noreturn { \\ stg %%r0, 0(%%r15) \\ jg %[posixCallMainAndExit] , + .sh, .sheb => + // r14 = FP, r15 = SP, pr = LR + \\ mov #0, r0 + \\ lds r0, pr + \\ mov r0, r14 + \\ mov r15, r4 + \\ mov #-4, r0 + \\ and r0, r15 + \\ mov.l 2f, r1 + \\1: + \\ bsrf r1 + \\2: + \\ .balign 4 + \\ .long %[posixCallMainAndExit]@PCREL - (1b + 4 - .) + , .sparc => // argc is stored after a register window (16 registers * 4 bytes). // i7 = LR