diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2023-03-28 21:42:55 +0200 |
|---|---|---|
| committer | Jakub Konka <kubkon@jakubkonka.com> | 2023-03-28 21:42:55 +0200 |
| commit | cde722a7117b6da129d3c49dabd445136ed5edb5 (patch) | |
| tree | 5fa9aae95c52832d53d0b2ee3f4a635e28135bf9 /src/link/Coff | |
| parent | 25f3175217dace219af643bce7bd28913a970362 (diff) | |
| download | zig-cde722a7117b6da129d3c49dabd445136ed5edb5.tar.gz zig-cde722a7117b6da129d3c49dabd445136ed5edb5.zip | |
coff: put section growing in helper; only mark section if actually resolved
Diffstat (limited to 'src/link/Coff')
| -rw-r--r-- | src/link/Coff/ImportTable.zig | 2 | ||||
| -rw-r--r-- | src/link/Coff/Relocation.zig | 8 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/link/Coff/ImportTable.zig b/src/link/Coff/ImportTable.zig index ba58af2fe0..c3ba77e855 100644 --- a/src/link/Coff/ImportTable.zig +++ b/src/link/Coff/ImportTable.zig @@ -121,7 +121,7 @@ pub fn fmtDebug(itab: ImportTable, ctx: Context) std.fmt.Formatter(fmt) { return .{ .data = .{ .itab = itab, .ctx = ctx } }; } -const ImportIndex = u32; +pub const ImportIndex = u32; const ImportTable = @This(); const std = @import("std"); diff --git a/src/link/Coff/Relocation.zig b/src/link/Coff/Relocation.zig index 4e2f772524..37bd3e292f 100644 --- a/src/link/Coff/Relocation.zig +++ b/src/link/Coff/Relocation.zig @@ -72,12 +72,14 @@ pub fn getTargetAddress(self: Relocation, coff_file: *const Coff) ?u32 { } } -pub fn resolve(self: Relocation, atom_index: Atom.Index, code: []u8, coff_file: *Coff) void { +/// Returns `false` if obtaining the target address has been deferred until `flushModule`. +/// This can happen when trying to resolve address of an import table entry ahead of time. +pub fn resolve(self: Relocation, atom_index: Atom.Index, code: []u8, coff_file: *Coff) bool { const atom = coff_file.getAtom(atom_index); const source_sym = atom.getSymbol(coff_file); const source_vaddr = source_sym.value + self.offset; - const target_vaddr = self.getTargetAddress(coff_file) orelse return; + const target_vaddr = self.getTargetAddress(coff_file) orelse return false; const target_vaddr_with_addend = target_vaddr + self.addend; log.debug(" ({x}: [() => 0x{x} ({s})) ({s}) ", .{ @@ -100,6 +102,8 @@ pub fn resolve(self: Relocation, atom_index: Atom.Index, code: []u8, coff_file: .x86, .x86_64 => self.resolveX86(ctx), else => unreachable, // unhandled target architecture } + + return true; } const Context = struct { |
