std.start: add alpha support

This commit is contained in:
Alex Rønne Petersen 2025-10-23 04:53:14 +02:00
parent 340d6ce1bf
commit 252e1fd7ec
No known key found for this signature in database

View File

@ -195,9 +195,10 @@ fn _start() callconv(.naked) noreturn {
// This is the first userspace frame. Prevent DWARF-based unwinders from unwinding further. We
// prevent FP-based unwinders from unwinding further by zeroing the register below.
if (builtin.unwind_tables != .none or !builtin.strip_debug_info) asm volatile (switch (native_arch) {
.aarch64, .aarch64_be => ".cfi_undefined lr",
.alpha => ".cfi_undefined $26",
.arc, .arceb => ".cfi_undefined blink",
.arm, .armeb, .thumb, .thumbeb => "", // https://github.com/llvm/llvm-project/issues/115891
.aarch64, .aarch64_be => ".cfi_undefined lr",
.csky => ".cfi_undefined lr",
.hexagon => ".cfi_undefined r31",
.loongarch32, .loongarch64 => ".cfi_undefined 1",
@ -253,6 +254,18 @@ fn _start() callconv(.naked) noreturn {
\\ and sp, x0, #-16
\\ b %[posixCallMainAndExit]
,
.alpha =>
// $15 = FP, $26 = LR, $29 = GP, $30 = SP
\\ br $29, 1f
\\1:
\\ ldgp $29, 0($29)
\\ mov 0, $15
\\ mov 0, $26
\\ mov $30, $16
\\ ldi $1, -16
\\ and $30, $30, $1
\\ jsr $26, %[posixCallMainAndExit]
,
.arc, .arceb =>
// ARC v1 and v2 had a very low stack alignment requirement of 4; v3 increased it to 16.
\\ mov fp, 0