From 5c96192c196c3a43f43de26c8256ed9a784f5140 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= Date: Wed, 24 Jul 2024 17:38:54 +0200 Subject: [PATCH] start: Add a comment explaining our paranoid stance on ABI guarantees. --- lib/std/start.zig | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/std/start.zig b/lib/std/start.zig index 9d4edd16bf..21baacc764 100644 --- a/lib/std/start.zig +++ b/lib/std/start.zig @@ -272,6 +272,12 @@ fn _start() callconv(.Naked) noreturn { : [tos] "={rax}" (-> *std.os.plan9.Tos), ); } + + // Note that we maintain a very low level of trust with regards to ABI guarantees at this point. + // We will redundantly align the stack, clear the link register, etc. While e.g. the Linux + // kernel is usually good about upholding the ABI guarantees, the same cannot be said of dynamic + // linkers; musl's ldso, for example, opts to not align the stack when invoking the dynamic + // linker explicitly. asm volatile (switch (native_arch) { .x86_64 => \\ xorl %%ebp, %%ebp