diff options
| author | Jacob G-W <jacoblevgw@gmail.com> | 2021-06-01 22:48:20 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-07-08 14:10:49 -0700 |
| commit | 798162e5095aff130395ee542c0c0948f95180c9 (patch) | |
| tree | baa971347a8bad4f2df54dff23f750c6066eff84 /src/codegen.zig | |
| parent | 34c21affa2429cf07042eb2f225ee59194998802 (diff) | |
| download | zig-798162e5095aff130395ee542c0c0948f95180c9.tar.gz zig-798162e5095aff130395ee542c0c0948f95180c9.zip | |
plan9 linker: make runnable binaries
We can now run binaries! (they segfault, but still run!)
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index 6b9bd633d0..61607407d3 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -2556,9 +2556,19 @@ fn Function(comptime arch: std.Target.Cpu.Arch) type { } else { return self.fail(inst.base.src, "TODO implement calling runtime known function pointer", .{}); } - } else { - unreachable; - } + } else if (self.bin_file.cast(link.File.Plan9)) |p9| { + if (inst.func.value()) |func_value| { + if (func_value.castTag(.function)) |func_payload| { + try p9.addCallReloc(self.code, .{ + .caller = p9.cur_decl, + .callee = func_payload.data.owner_decl, + .offset_in_caller = self.code.items.len, + }); + } else return self.fail(inst.base.src, "TODO implement calling extern fn on plan9", .{}); + } else { + return self.fail(inst.base.src, "TODO implement calling runtime known function pointer", .{}); + } + } else unreachable; switch (info.return_value) { .register => |reg| { |
