workaround for image base address

This commit is contained in:
Nikita Smith
2025-05-19 11:10:03 -07:00
committed by Ryan Fleury
parent 971f6ec368
commit d5297e01ac
+9 -1
View File
@@ -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) {