From 1d6eae2b188a31cec8d0f95682cefe2a64c8b6bb Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Tue, 12 Aug 2025 19:03:51 -0700 Subject: [PATCH] minor fixes for gathering library members --- src/linker/lnk.c | 2 +- src/linker/lnk_symbol_table.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/linker/lnk.c b/src/linker/lnk.c index 9cc82fb7..a2588938 100644 --- a/src/linker/lnk.c +++ b/src/linker/lnk.c @@ -973,7 +973,7 @@ lnk_queue_lib_member_input(Arena *arena, // lookup member in the lib where pull-in reference is declared LNK_Symbol *best_match = member_symbol; for (LNK_Symbol *s = member_symbol; s != 0; s = s->u.member.next) { - if (s->u.member.v.lib == pull_in_ref->u.member.v.lib) { + if (s->u.member.v.lib == pull_in_ref->u.defined.obj->lib) { best_match = s; break; } diff --git a/src/linker/lnk_symbol_table.c b/src/linker/lnk_symbol_table.c index c04709a9..e27d4bf3 100644 --- a/src/linker/lnk_symbol_table.c +++ b/src/linker/lnk_symbol_table.c @@ -316,7 +316,6 @@ lnk_can_replace_symbol(LNK_SymbolScope scope, LNK_Symbol *dst, LNK_Symbol *src) } } break; case LNK_SymbolScope_Lib: { - // link.exe picks symbol from lib that is discovered first can_replace = lnk_symbol_lib_is_before(src, dst); } break; default: { InvalidPath; } @@ -345,7 +344,7 @@ lnk_on_symbol_replace(LNK_SymbolScope scope, LNK_Symbol *dst, LNK_Symbol *src) } } - // make sure leader section is not removed from the output + // assert leader section is live #if BUILD_DEBUG { COFF_ParsedSymbol src_parsed = lnk_parsed_symbol_from_coff_symbol_idx(src->u.defined.obj, src->u.defined.symbol_idx); @@ -358,7 +357,9 @@ lnk_on_symbol_replace(LNK_SymbolScope scope, LNK_Symbol *dst, LNK_Symbol *src) #endif } break; case LNK_SymbolScope_Lib: { - // nothing to replace + LNK_Symbol *last; + for (last = src; last->u.member.next != 0; last = last->u.member.next); + last->u.member.next = dst; } break; default: { InvalidPath; } }