From e8eb9778cccd2f2d23027d9e0d73d7053bf92efe Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Tue, 1 Mar 2022 22:03:18 +0100 Subject: codegen: lower field_ptr to memory across linking backends This requires generating an addend for the target relocation as the field pointer might point at a field inner to the container. --- src/link/Plan9.zig | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/link/Plan9.zig') diff --git a/src/link/Plan9.zig b/src/link/Plan9.zig index 4648a6a673..8096b2d38c 100644 --- a/src/link/Plan9.zig +++ b/src/link/Plan9.zig @@ -304,10 +304,12 @@ pub fn updateDecl(self: *Plan9, module: *Module, decl: *Module.Decl) !void { const decl_val = if (decl.val.castTag(.variable)) |payload| payload.data.init else decl.val; // TODO we need the symbol index for symbol in the table of locals for the containing atom const sym_index = decl.link.plan9.sym_index orelse 0; - const res = try codegen.generateSymbol(&self.base, @intCast(u32, sym_index), decl.srcLoc(), .{ + const res = try codegen.generateSymbol(&self.base, decl.srcLoc(), .{ .ty = decl.ty, .val = decl_val, - }, &code_buffer, .{ .none = .{} }); + }, &code_buffer, .{ .none = .{} }, .{ + .parent_atom_index = @intCast(u32, sym_index), + }); const code = switch (res) { .externally_managed => |x| x, .appended => code_buffer.items, @@ -752,9 +754,8 @@ pub fn allocateDeclIndexes(self: *Plan9, decl: *Module.Decl) !void { _ = self; _ = decl; } -pub fn getDeclVAddr(self: *Plan9, decl: *const Module.Decl, parent_atom_index: u32, offset: u64) !u64 { - _ = parent_atom_index; - _ = offset; +pub fn getDeclVAddr(self: *Plan9, decl: *const Module.Decl, reloc_info: link.File.RelocInfo) !u64 { + _ = reloc_info; if (decl.ty.zigTypeTag() == .Fn) { var start = self.bases.text; var it_file = self.fn_decl_table.iterator(); -- cgit v1.2.3