From d0b512f1598a7758dbc1f248356917b9d975cd9e Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 27 Aug 2026 01:08:37 +0800 Subject: [PATCH] =?UTF-8?q?debug(elf,main):=20=E6=89=93=E5=8D=B0=20read=5F?= =?UTF-8?q?len=20=E4=B8=8E=20spawn=5Felf=20=E8=BF=94=E5=9B=9E=20pid=20?= =?UTF-8?q?=E5=AE=9E=E9=99=85=E5=80=BC=E2=80=94=E2=80=94fat32.read=20?= =?UTF-8?q?=E5=86=85=E9=83=A8=20br=3D64=20=E4=BD=86=20load=5Felf=20?= =?UTF-8?q?=E6=94=B6=E5=88=B0=20<64=E3=80=81spawn=20ret=20pid=3D1=20?= =?UTF-8?q?=E4=BD=86=20main=20=E6=94=B6=E5=88=B0=200=EF=BC=8C=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E8=B7=A8=E6=A8=A1=E5=9D=97=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E9=97=B4=E6=AD=87=E6=80=A7=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VKernel/Kernel/execrunner/elf.vp | 5 +++++ VKernel/Kernel/main.vp | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/VKernel/Kernel/execrunner/elf.vp b/VKernel/Kernel/execrunner/elf.vp index c5438f3..fedc766 100644 --- a/VKernel/Kernel/execrunner/elf.vp +++ b/VKernel/Kernel/execrunner/elf.vp @@ -130,6 +130,11 @@ def load_elf(path: t.CConst | str, do_map: t.CInt = 1) -> t.CVoid | t.CPtr: ehdr_buf: t.CArray[t.CUInt8T, 64] string.memset(c.Addr(ehdr_buf), 0, 64) read_len: t.CUInt32T = fat32.read(fp, c.Addr(ehdr_buf), 64) + # [DIAG] read_len 实际值(fat32.read 内部打印 br=64 但 load_elf 收到 <64 + # 触发 "failed to read ehdr" —— 跨模块返回值间歇性丢失) + _dbrl: t.CArray[t.CChar, 64] + viperlib.snprintf(c.Addr(_dbrl), 64, "[elf] read_len=%lu\n", read_len) + serial.puts(c.Addr(_dbrl)) if read_len < 64: serial.puts("[elf] failed to read ehdr\n") fat32.close(fp) diff --git a/VKernel/Kernel/main.vp b/VKernel/Kernel/main.vp index 01f3988..ead55cc 100644 --- a/VKernel/Kernel/main.vp +++ b/VKernel/Kernel/main.vp @@ -243,6 +243,10 @@ class ViperKernel: viperlib.snprintf(c.Addr(slog), 64, "[main] Hello spawned as pid=%d\n", hello_pid) serial.puts(slog) term_pid: t.CInt = elf.spawn_elf("/APPS/terminal.elf") + # [DIAG] spawn_elf 返回 pid=1 但 main 收到 0 —— 跨模块返回值间歇性丢失 + _dbtp: t.CArray[t.CChar, 64] + viperlib.snprintf(c.Addr(_dbtp), 64, "[main] term_pid=%d\n", term_pid) + serial.puts(c.Addr(_dbtp)) if term_pid < 0: serial.puts("[main] Terminal spawn failed\n") else: