From d5297e01acbced57446c525732bbe8ba1e7a49d7 Mon Sep 17 00:00:00 2001 From: Nikita Smith Date: Mon, 19 May 2025 11:10:03 -0700 Subject: [PATCH] workaround for image base address --- src/linker/lnk.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/linker/lnk.c b/src/linker/lnk.c index 47264f38..b4623c28 100644 --- a/src/linker/lnk.c +++ b/src/linker/lnk.c @@ -1140,9 +1140,17 @@ THREAD_POOL_TASK_FUNC(lnk_obj_reloc_patcher) } else if (obj->header.machine != COFF_MachineType_Unknown) { NotImplemented; } + symbol_secnum = 0; symbol_secoff = 0; - symbol_voff = safe_cast_u32(symbol.value); + // There aren't enough bits in COFF symbol to store full image base address, + // so we special case __ImageBase. A better solution would be to add + // a 64-bit symbol format to COFF. + if (str8_match(symbol.name, str8_lit("__ImageBase"), 0)) { + symbol_voff = 0; + } else { + symbol_voff = symbol.value - task->image_base; + } } else if (interp == COFF_SymbolValueInterp_Weak) { // unresolved weak } else if (interp == COFF_SymbolValueInterp_Undefined) {