From 80b7ce5bb1cd2066f8e21dc04d9127fb068b03c9 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Mon, 19 Oct 2026 12:45:06 +0800 Subject: [PATCH] =?UTF-8?q?fix(mangle):=20=E6=99=AE=E9=80=9A=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E6=B8=85=E9=99=A4=E8=A3=B8=E5=90=8D=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getcwd/chdir/system 等 os 包装函数不再进入 _export_funcs 裸名集合,按模块 SHA1 区分,消除重复符号。 --- lib/core/Handles/HandlesFunctions.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/core/Handles/HandlesFunctions.py b/lib/core/Handles/HandlesFunctions.py index fba00a2..8542a3c 100644 --- a/lib/core/Handles/HandlesFunctions.py +++ b/lib/core/Handles/HandlesFunctions.py @@ -1206,8 +1206,9 @@ class FunctionHandle(BaseHandle): # 同名用户函数应使用 SHA1 前缀,而非被误判为外部 C 函数返回裸名) Gen._current_module_func_names.add(FuncName) # 移除导入污染:用户函数未显式标记导出,但名称在 _export_funcs 中(来自导入的同名 C 库函数) - if not IsUserMarkedExport and FuncName in Gen._export_funcs: + if not IsUserMarkedExport: Gen._export_funcs.discard(FuncName) + Gen._export_funcs.discard(Node.name) MangledName: str = Node.name if _is_extern_node else Gen._mangle_func_name(FuncName) # 自动取址模式:查表侧统一按**真实发射名**(func.name,即 MangledName)查 # (FuncGen._adjust_args)。签名阶段(_GetFunctionSignatureLlvm)只能按逻辑名 @@ -1729,8 +1730,9 @@ class FunctionHandle(BaseHandle): # 注册当前模块定义的函数名,使 _mangle_func_name 跳过 _export_extern_funcs 检查 Gen._current_module_func_names.add(FuncName) # 移除导入污染:用户函数未显式标记导出,但名称在 _export_funcs 中(来自导入的同名 C 库函数) - if not IsUserMarkedExport and FuncName in Gen._export_funcs: + if not IsUserMarkedExport: Gen._export_funcs.discard(FuncName) + Gen._export_funcs.discard(Node.name) MangledName = Gen._mangle_func_name(FuncName) # 补登记:module.globals 已有同名函数(stub 声明 / 调用点先建)但未登记到 # Gen.functions 时,先登记再走下方判定 —— 否则 1750 分支裸建 ir.Function