aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJacob G-W <jacoblevgw@gmail.com>2021-06-01 22:48:20 -0400
committerAndrew Kelley <andrew@ziglang.org>2021-07-08 14:10:49 -0700
commit798162e5095aff130395ee542c0c0948f95180c9 (patch)
treebaa971347a8bad4f2df54dff23f750c6066eff84 /src/codegen.zig
parent34c21affa2429cf07042eb2f225ee59194998802 (diff)
downloadzig-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.zig16
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| {