From 7fabf886fc35dac9d2b38c8aef7a25d5f57ec76f Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 14 Sep 2026 16:54:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(vpi):=20=E8=BF=94=E5=9B=9E=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E7=B4=A2=E5=BC=95=E9=87=8D=E5=BB=BA=E7=9A=84=E9=94=AE?= =?UTF-8?q?=E9=95=BF=E5=B8=B8=E9=87=8F=E6=8B=BC=E5=86=99=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E4=B8=BA=20VPI=5FKEY=5FLEN?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _vpi_rebuild_ret_idx 里把键长写成了不存在的 VPI_RET_KEY_LEN(参数侧另有 VPI_PARAM_KEY_LEN=224,本文件仅定义 VPI_KEY_LEN=224 与 VPI_PARAM_KEY_LEN)。此前该未定义标识符被旧规则按类型零值兜底编成 0,使重放偏移 ri*0 恒为 0(每条键都从第 0 条键位置读取),返回注解索引重建结果错误;因探测用 live 键比较,表现为未命中回退线性扫描——结果仍正确但索引形同无效。 这解释了此前实测中 _lookup_vpi_ret_annot 加索引后仍有约 913K 次 strcmp(返回侧索引一直未生效),而参数侧索引生效并从榜单消失。改为本文件既有且返回侧一致使用的 VPI_KEY_LEN(malloc/memset/查找/写入各处均用该常量)。 --- App/lib/Stub/StubGen/VpiReader.vp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/App/lib/Stub/StubGen/VpiReader.vp b/App/lib/Stub/StubGen/VpiReader.vp index bce892e..8210b49 100644 --- a/App/lib/Stub/StubGen/VpiReader.vp +++ b/App/lib/Stub/StubGen/VpiReader.vp @@ -184,7 +184,7 @@ def _vpi_rebuild_ret_idx(new_cap: int) -> int: ri: int for ri in range(_g_vpi_ret_count): if _vpi_idx_insert(new_idx, new_cap, ri, - _g_vpi_ret_keys + ri * VPI_RET_KEY_LEN) != 0: + _g_vpi_ret_keys + ri * VPI_KEY_LEN) != 0: fail = 1 break if fail != 0: