From 54fad8a89cc54c575b3bf3cd6cc3dfadb7d2d1d0 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Thu, 24 Jul 2025 16:02:25 -0700 Subject: [PATCH] validate strong symbol interp type --- src/linker/lnk.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/linker/lnk.c b/src/linker/lnk.c index 69fb277e..49bd67f9 100644 --- a/src/linker/lnk.c +++ b/src/linker/lnk.c @@ -1107,9 +1107,13 @@ THREAD_POOL_TASK_FUNC(lnk_weak_symbol_finder) LNK_SymbolNode *symbol_n = task->lookup_node_arr.v[symbol_idx]; LNK_Symbol *symbol = symbol_n->data; - LNK_Symbol *has_strong_defn = lnk_symbol_table_search(task->symtab, LNK_SymbolScope_Defined, symbol->name); - if (has_strong_defn) { - continue; + LNK_Symbol *defn = lnk_symbol_table_search(task->symtab, LNK_SymbolScope_Defined, symbol->name); + if (defn) { + COFF_ParsedSymbol defn_parsed = lnk_parsed_symbol_from_defined(defn); + COFF_SymbolValueInterpType defn_interp = coff_interp_from_parsed_symbol(defn_parsed); + if (defn_interp != COFF_SymbolValueInterp_Weak) { + continue; + } } LNK_Symbol *has_import = lnk_symbol_table_search(task->symtab, LNK_SymbolScope_Import, symbol->name); if (has_import) {