From 61208676c6dfd5bd800d34f51315840d1834c97f Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Wed, 26 Aug 2026 20:18:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(main):=20=5Fstart=20=E5=8A=A0=20stackrealig?= =?UTF-8?q?n=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=8F=98=E5=8F=82=E5=87=BD?= =?UTF-8?q?=E6=95=B0=20movaps=20#GP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因链:_start 由 bootloader jmp 进入(rsp≡0 mod 16),编译器/llc 按 call 约定对齐函数帧(假设入口 rsp≡8 mod 16)→ 帧整体偏 8 → _start 内所有调用 rsp≡8 mod 16 → __init__ 的 float 变参调用(snprintf %.2f 保存 xmm)movaps #GP(cr4.OSFXSR 已启用、地址 16 对齐仍 #GP 正是此因)。 加 t.attr.stackrealign 使 _start 序言动态重对齐栈,与入口约定无关。 --- VKernel/Kernel/main.vp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/VKernel/Kernel/main.vp b/VKernel/Kernel/main.vp index c227fd2..01f3988 100644 --- a/VKernel/Kernel/main.vp +++ b/VKernel/Kernel/main.vp @@ -395,7 +395,9 @@ class ViperKernel: VKP: ViperKernel | t.CPtr -@c.Attribute(t.attr.section(".text.startup"), t.attr.aligned(16)) +# stackrealign:_start 由 bootloader jmp 进入(rsp≡0 mod 16),llc 按 call 约定 +# 假设入口 rsp≡8 → 帧偏 8 → 变参函数 movaps #GP。动态重对齐栈修复。 +@c.Attribute(t.attr.section(".text.startup"), t.attr.aligned(16), t.attr.stackrealign) def _start() -> t.CInt: global VKP, BootInfo saved_rdi: t.CUnsignedLong