aboutsummaryrefslogtreecommitdiff
path: root/src/link/Plan9.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-03-01 22:03:18 +0100
committerJakub Konka <kubkon@jakubkonka.com>2022-03-01 22:03:18 +0100
commite8eb9778cccd2f2d23027d9e0d73d7053bf92efe (patch)
treea658c7381f29593222e059ad541d006afd9e310c /src/link/Plan9.zig
parent543bee0adf2d3b036654fa0983c16ff7023f504c (diff)
downloadzig-e8eb9778cccd2f2d23027d9e0d73d7053bf92efe.tar.gz
zig-e8eb9778cccd2f2d23027d9e0d73d7053bf92efe.zip
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.
Diffstat (limited to 'src/link/Plan9.zig')
-rw-r--r--src/link/Plan9.zig11
1 files changed, 6 insertions, 5 deletions
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();