aboutsummaryrefslogtreecommitdiff
path: root/src/link.zig
diff options
context:
space:
mode:
authorjacob gw <jacoblevgw@gmail.com>2021-06-01 16:07:08 -0400
committerAndrew Kelley <andrew@ziglang.org>2021-07-08 14:10:49 -0700
commit34c21affa2429cf07042eb2f225ee59194998802 (patch)
treeb75283e0215fa3e5de31c1995e71a56f35942c28 /src/link.zig
parent1f0b77b3b88112ef458f62c23df72003c843e7cc (diff)
downloadzig-34c21affa2429cf07042eb2f225ee59194998802.tar.gz
zig-34c21affa2429cf07042eb2f225ee59194998802.zip
initial plan9 boilerplate
The code now compiles and fails with Plan9ObjectFormatUnimplemented
Diffstat (limited to 'src/link.zig')
-rw-r--r--src/link.zig25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/link.zig b/src/link.zig
index 9c1be16b9c..e5eb45ec91 100644
--- a/src/link.zig
+++ b/src/link.zig
@@ -150,6 +150,7 @@ pub const File = struct {
elf: Elf.SrcFn,
coff: Coff.SrcFn,
macho: MachO.SrcFn,
+ plan9: Plan9.SrcFn,
c: C.FnBlock,
wasm: Wasm.FnData,
spirv: SpirV.FnData,
@@ -159,6 +160,7 @@ pub const File = struct {
elf: Elf.Export,
coff: void,
macho: MachO.Export,
+ plan9: Plan9.Export,
c: void,
wasm: void,
spirv: void,
@@ -189,6 +191,7 @@ pub const File = struct {
.elf => &(try Elf.createEmpty(allocator, options)).base,
.macho => &(try MachO.createEmpty(allocator, options)).base,
.wasm => &(try Wasm.createEmpty(allocator, options)).base,
+ .plan9 => return &(try Plan9.createEmpty(allocator, options)).base,
.c => unreachable, // Reported error earlier.
.spirv => &(try SpirV.createEmpty(allocator, options)).base,
.hex => return error.HexObjectFormatUnimplemented,
@@ -209,6 +212,7 @@ pub const File = struct {
.spirv => &(try SpirV.createEmpty(allocator, options)).base,
.hex => return error.HexObjectFormatUnimplemented,
.raw => return error.RawObjectFormatUnimplemented,
+ .plan9 => return error.Plan9ObjectFormatUnimplemented,
};
}
// Open a temporary object file, not the final output file because we want to link with LLD.
@@ -225,6 +229,7 @@ pub const File = struct {
.spirv => &(try SpirV.openPath(allocator, sub_path, options)).base,
.hex => return error.HexObjectFormatUnimplemented,
.raw => return error.RawObjectFormatUnimplemented,
+ .plan9 => return error.Plan9ObjectFormatUnimplemented,
};
if (use_lld) {
@@ -243,7 +248,7 @@ pub const File = struct {
pub fn makeWritable(base: *File) !void {
switch (base.tag) {
- .coff, .elf, .macho => {
+ .coff, .elf, .macho, .plan9 => {
if (base.file != null) return;
const emit = base.options.emit orelse return;
base.file = try emit.directory.handle.createFile(emit.sub_path, .{
@@ -288,7 +293,7 @@ pub const File = struct {
f.close();
base.file = null;
},
- .coff, .elf => if (base.file) |f| {
+ .coff, .elf, .plan9 => if (base.file) |f| {
if (base.intermediary_basename != null) {
// The file we have open is not the final file that we want to
// make executable, so we don't have to close it.
@@ -313,6 +318,7 @@ pub const File = struct {
.c => return @fieldParentPtr(C, "base", base).updateDecl(module, decl),
.wasm => return @fieldParentPtr(Wasm, "base", base).updateDecl(module, decl),
.spirv => return @fieldParentPtr(SpirV, "base", base).updateDecl(module, decl),
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).updateDecl(module, decl),
}
}
@@ -326,6 +332,7 @@ pub const File = struct {
.elf => return @fieldParentPtr(Elf, "base", base).updateDeclLineNumber(module, decl),
.macho => return @fieldParentPtr(MachO, "base", base).updateDeclLineNumber(module, decl),
.c => return @fieldParentPtr(C, "base", base).updateDeclLineNumber(module, decl),
+ .plan9 => @panic("PLAN 9 DEBUG INFO"),
.wasm, .spirv => {},
}
}
@@ -340,6 +347,7 @@ pub const File = struct {
.macho => return @fieldParentPtr(MachO, "base", base).allocateDeclIndexes(decl),
.c => return @fieldParentPtr(C, "base", base).allocateDeclIndexes(decl),
.wasm => return @fieldParentPtr(Wasm, "base", base).allocateDeclIndexes(decl),
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).allocateDeclIndexes(decl),
.spirv => {},
}
}
@@ -393,6 +401,11 @@ pub const File = struct {
parent.deinit();
base.allocator.destroy(parent);
},
+ .plan9 => {
+ const parent = @fieldParentPtr(Plan9, "base", base);
+ parent.deinit();
+ base.allocator.destroy(parent);
+ },
}
}
@@ -425,6 +438,7 @@ pub const File = struct {
.c => return @fieldParentPtr(C, "base", base).flush(comp),
.wasm => return @fieldParentPtr(Wasm, "base", base).flush(comp),
.spirv => return @fieldParentPtr(SpirV, "base", base).flush(comp),
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).flush(comp),
}
}
@@ -438,6 +452,7 @@ pub const File = struct {
.c => return @fieldParentPtr(C, "base", base).flushModule(comp),
.wasm => return @fieldParentPtr(Wasm, "base", base).flushModule(comp),
.spirv => return @fieldParentPtr(SpirV, "base", base).flushModule(comp),
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).flushModule(comp),
}
}
@@ -451,6 +466,7 @@ pub const File = struct {
.c => @fieldParentPtr(C, "base", base).freeDecl(decl),
.wasm => @fieldParentPtr(Wasm, "base", base).freeDecl(decl),
.spirv => @fieldParentPtr(SpirV, "base", base).freeDecl(decl),
+ .plan9 => @fieldParentPtr(Plan9, "base", base).freeDecl(decl),
}
}
@@ -459,6 +475,7 @@ pub const File = struct {
.coff => return @fieldParentPtr(Coff, "base", base).error_flags,
.elf => return @fieldParentPtr(Elf, "base", base).error_flags,
.macho => return @fieldParentPtr(MachO, "base", base).error_flags,
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).error_flags,
.c => return .{ .no_entry_point_found = false },
.wasm, .spirv => return ErrorFlags{},
}
@@ -481,6 +498,7 @@ pub const File = struct {
.c => return @fieldParentPtr(C, "base", base).updateDeclExports(module, decl, exports),
.wasm => return @fieldParentPtr(Wasm, "base", base).updateDeclExports(module, decl, exports),
.spirv => return @fieldParentPtr(SpirV, "base", base).updateDeclExports(module, decl, exports),
+ .plan9 => return @fieldParentPtr(Plan9, "base", base).updateDeclExports(module, decl, exports),
}
}
@@ -489,6 +507,7 @@ pub const File = struct {
.coff => return @fieldParentPtr(Coff, "base", base).getDeclVAddr(decl),
.elf => return @fieldParentPtr(Elf, "base", base).getDeclVAddr(decl),
.macho => return @fieldParentPtr(MachO, "base", base).getDeclVAddr(decl),
+ .plan9 => @panic("GET VADDR"),
.c => unreachable,
.wasm => unreachable,
.spirv => unreachable,
@@ -633,6 +652,7 @@ pub const File = struct {
c,
wasm,
spirv,
+ plan9,
};
pub const ErrorFlags = struct {
@@ -641,6 +661,7 @@ pub const File = struct {
pub const C = @import("link/C.zig");
pub const Coff = @import("link/Coff.zig");
+ pub const Plan9 = @import("link/Plan9.zig");
pub const Elf = @import("link/Elf.zig");
pub const MachO = @import("link/MachO.zig");
pub const SpirV = @import("link/SpirV.zig");