fix(kernel): 分裂 2MB 大页使 .rodata 真正只读,加页表与格式串校验诊断并禁用 App 自动启动
This commit is contained in:
1 parent
efa99a8c4b
commit
2a03330a9d
4 files changed
+110
-73
No files matched your search
@@ -1816,7 +1816,19 @@ def desktop_thread(arg: t.CVoid | t.CPtr) -> t.CInt:
|
||||
if _elapsed_ms > 0:
|
||||
_fps_val = t.CUInt32T(t.CUInt64T(_perf_frames) * 1000 / _elapsed_ms)
|
||||
string.memset(c.Addr(_perf_buf), 0, 256)
|
||||
viperlib.snprintf(c.Addr(_perf_buf), 256, "[perf] fps=%u wall=%lu work=%lu mouse=%lu kbd=%lu render=%lu(bg=%lu win=%lu cur=%lu fb=%lu) dirty=%d vsync=%d\n", _fps_val, t.CUInt64T(_elapsed_ms), t.CUInt64T(_perf_t_total), t.CUInt64T(_perf_t_mouse), t.CUInt64T(_perf_t_kbd), t.CUInt64T(_perf_t_render), t.CUInt64T(_perf_t_bg), t.CUInt64T(_perf_t_win), t.CUInt64T(_perf_t_cur), t.CUInt64T(_perf_t_fb), _dirty_count, _vblank_ok)
|
||||
# [DIAG] .rodata 格式串校验:win=%lu/work=%lu 曾出现 ' / , 字节破坏(越界写)。
|
||||
# 校验和变化 → 确认为真实内存破坏(配合 .rodata 只读后 #PF 定位写源);
|
||||
# 校验和不变 → 疑似 printf/串口输出伪影,走另一条排查线。
|
||||
_perf_fmt_str: str = "[perf] fps=%u wall=%lu work=%lu mouse=%lu kbd=%lu render=%lu(bg=%lu win=%lu cur=%lu fb=%lu) dirty=%d vsync=%d\n"
|
||||
_fmt_sum: t.CUInt32T = 0
|
||||
_fi: t.CInt = 0
|
||||
while _fi < 110:
|
||||
_fmt_sum = _fmt_sum + t.CUInt32T(t.CUInt8T(_perf_fmt_str[_fi]))
|
||||
_fi += 1
|
||||
_chk_buf: t.CArray[t.CChar, 48]
|
||||
viperlib.snprintf(c.Addr(_chk_buf), 48, "[chk] sum=%u\n", _fmt_sum)
|
||||
serial.puts(c.Addr(_chk_buf))
|
||||
viperlib.snprintf(c.Addr(_perf_buf), 256, _perf_fmt_str, _fps_val, t.CUInt64T(_elapsed_ms), t.CUInt64T(_perf_t_total), t.CUInt64T(_perf_t_mouse), t.CUInt64T(_perf_t_kbd), t.CUInt64T(_perf_t_render), t.CUInt64T(_perf_t_bg), t.CUInt64T(_perf_t_win), t.CUInt64T(_perf_t_cur), t.CUInt64T(_perf_t_fb), _dirty_count, _vblank_ok)
|
||||
serial.puts(_perf_buf)
|
||||
_perf_t_mouse = 0
|
||||
_perf_t_kbd = 0
|
||||
|
||||
Reference in new issue
Block a user