aboutsummaryrefslogtreecommitdiff
path: root/src/link/Coff.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-05-08 16:52:59 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-06-10 20:42:30 -0700
commit275652f620541919087bc92da0d2f9e97c66d3c0 (patch)
tree0b19398252ef29e6b0a6c6758ac90f564a235f13 /src/link/Coff.zig
parente94a81c951905a6b5bcf2a6028589ac1e33d1edd (diff)
downloadzig-275652f620541919087bc92da0d2f9e97c66d3c0.tar.gz
zig-275652f620541919087bc92da0d2f9e97c66d3c0.zip
stage2: move opaque types to InternPool
Diffstat (limited to 'src/link/Coff.zig')
-rw-r--r--src/link/Coff.zig67
1 files changed, 34 insertions, 33 deletions
diff --git a/src/link/Coff.zig b/src/link/Coff.zig
index 6117f1c1de..4e75cfff97 100644
--- a/src/link/Coff.zig
+++ b/src/link/Coff.zig
@@ -1032,20 +1032,20 @@ fn freeAtom(self: *Coff, atom_index: Atom.Index) void {
self.getAtomPtr(atom_index).sym_index = 0;
}
-pub fn updateFunc(self: *Coff, module: *Module, func: *Module.Fn, air: Air, liveness: Liveness) !void {
+pub fn updateFunc(self: *Coff, mod: *Module, func: *Module.Fn, air: Air, liveness: Liveness) !void {
if (build_options.skip_non_native and builtin.object_format != .coff) {
@panic("Attempted to compile for object format that was disabled by build configuration");
}
if (build_options.have_llvm) {
if (self.llvm_object) |llvm_object| {
- return llvm_object.updateFunc(module, func, air, liveness);
+ return llvm_object.updateFunc(mod, func, air, liveness);
}
}
const tracy = trace(@src());
defer tracy.end();
const decl_index = func.owner_decl;
- const decl = module.declPtr(decl_index);
+ const decl = mod.declPtr(decl_index);
const atom_index = try self.getOrCreateAtomForDecl(decl_index);
self.freeUnnamedConsts(decl_index);
@@ -1056,7 +1056,7 @@ pub fn updateFunc(self: *Coff, module: *Module, func: *Module.Fn, air: Air, live
const res = try codegen.generateFunction(
&self.base,
- decl.srcLoc(),
+ decl.srcLoc(mod),
func,
air,
liveness,
@@ -1067,7 +1067,7 @@ pub fn updateFunc(self: *Coff, module: *Module, func: *Module.Fn, air: Air, live
.ok => code_buffer.items,
.fail => |em| {
decl.analysis = .codegen_failure;
- try module.failed_decls.put(module.gpa, decl_index, em);
+ try mod.failed_decls.put(mod.gpa, decl_index, em);
return;
},
};
@@ -1076,7 +1076,7 @@ pub fn updateFunc(self: *Coff, module: *Module, func: *Module.Fn, air: Air, live
// Since we updated the vaddr and the size, each corresponding export
// symbol also needs to be updated.
- return self.updateDeclExports(module, decl_index, module.getDeclExports(decl_index));
+ return self.updateDeclExports(mod, decl_index, mod.getDeclExports(decl_index));
}
pub fn lowerUnnamedConst(self: *Coff, tv: TypedValue, decl_index: Module.Decl.Index) !u32 {
@@ -1110,7 +1110,7 @@ pub fn lowerUnnamedConst(self: *Coff, tv: TypedValue, decl_index: Module.Decl.In
sym.section_number = @intToEnum(coff.SectionNumber, self.rdata_section_index.? + 1);
}
- const res = try codegen.generateSymbol(&self.base, decl.srcLoc(), tv, &code_buffer, .none, .{
+ const res = try codegen.generateSymbol(&self.base, decl.srcLoc(mod), tv, &code_buffer, .none, .{
.parent_atom_index = self.getAtom(atom_index).getSymbolIndex().?,
});
var code = switch (res) {
@@ -1141,19 +1141,19 @@ pub fn lowerUnnamedConst(self: *Coff, tv: TypedValue, decl_index: Module.Decl.In
pub fn updateDecl(
self: *Coff,
- module: *Module,
+ mod: *Module,
decl_index: Module.Decl.Index,
) link.File.UpdateDeclError!void {
if (build_options.skip_non_native and builtin.object_format != .coff) {
@panic("Attempted to compile for object format that was disabled by build configuration");
}
if (build_options.have_llvm) {
- if (self.llvm_object) |llvm_object| return llvm_object.updateDecl(module, decl_index);
+ if (self.llvm_object) |llvm_object| return llvm_object.updateDecl(mod, decl_index);
}
const tracy = trace(@src());
defer tracy.end();
- const decl = module.declPtr(decl_index);
+ const decl = mod.declPtr(decl_index);
if (decl.val.tag() == .extern_fn) {
return; // TODO Should we do more when front-end analyzed extern decl?
@@ -1173,7 +1173,7 @@ pub fn updateDecl(
defer code_buffer.deinit();
const decl_val = if (decl.val.castTag(.variable)) |payload| payload.data.init else decl.val;
- const res = try codegen.generateSymbol(&self.base, decl.srcLoc(), .{
+ const res = try codegen.generateSymbol(&self.base, decl.srcLoc(mod), .{
.ty = decl.ty,
.val = decl_val,
}, &code_buffer, .none, .{
@@ -1183,7 +1183,7 @@ pub fn updateDecl(
.ok => code_buffer.items,
.fail => |em| {
decl.analysis = .codegen_failure;
- try module.failed_decls.put(module.gpa, decl_index, em);
+ try mod.failed_decls.put(mod.gpa, decl_index, em);
return;
},
};
@@ -1192,7 +1192,7 @@ pub fn updateDecl(
// Since we updated the vaddr and the size, each corresponding export
// symbol also needs to be updated.
- return self.updateDeclExports(module, decl_index, module.getDeclExports(decl_index));
+ return self.updateDeclExports(mod, decl_index, mod.getDeclExports(decl_index));
}
fn updateLazySymbolAtom(
@@ -1217,8 +1217,8 @@ fn updateLazySymbolAtom(
const atom = self.getAtomPtr(atom_index);
const local_sym_index = atom.getSymbolIndex().?;
- const src = if (sym.ty.getOwnerDeclOrNull()) |owner_decl|
- mod.declPtr(owner_decl).srcLoc()
+ const src = if (sym.ty.getOwnerDeclOrNull(mod)) |owner_decl|
+ mod.declPtr(owner_decl).srcLoc(mod)
else
Module.SrcLoc{
.file_scope = undefined,
@@ -1262,7 +1262,8 @@ fn updateLazySymbolAtom(
}
pub fn getOrCreateAtomForLazySymbol(self: *Coff, sym: link.File.LazySymbol) !Atom.Index {
- const gop = try self.lazy_syms.getOrPut(self.base.allocator, sym.getDecl());
+ const mod = self.base.options.module.?;
+ const gop = try self.lazy_syms.getOrPut(self.base.allocator, sym.getDecl(mod));
errdefer _ = if (!gop.found_existing) self.lazy_syms.pop();
if (!gop.found_existing) gop.value_ptr.* = .{};
const metadata: struct { atom: *Atom.Index, state: *LazySymbolMetadata.State } = switch (sym.kind) {
@@ -1277,7 +1278,7 @@ pub fn getOrCreateAtomForLazySymbol(self: *Coff, sym: link.File.LazySymbol) !Ato
metadata.state.* = .pending_flush;
const atom = metadata.atom.*;
// anyerror needs to be deferred until flushModule
- if (sym.getDecl() != .none) try self.updateLazySymbolAtom(sym, atom, switch (sym.kind) {
+ if (sym.getDecl(mod) != .none) try self.updateLazySymbolAtom(sym, atom, switch (sym.kind) {
.code => self.text_section_index.?,
.const_data => self.rdata_section_index.?,
});
@@ -1411,7 +1412,7 @@ pub fn freeDecl(self: *Coff, decl_index: Module.Decl.Index) void {
pub fn updateDeclExports(
self: *Coff,
- module: *Module,
+ mod: *Module,
decl_index: Module.Decl.Index,
exports: []const *Module.Export,
) link.File.UpdateDeclExportsError!void {
@@ -1423,7 +1424,7 @@ pub fn updateDeclExports(
// Even in the case of LLVM, we need to notice certain exported symbols in order to
// detect the default subsystem.
for (exports) |exp| {
- const exported_decl = module.declPtr(exp.exported_decl);
+ const exported_decl = mod.declPtr(exp.exported_decl);
if (exported_decl.getFunction() == null) continue;
const winapi_cc = switch (self.base.options.target.cpu.arch) {
.x86 => std.builtin.CallingConvention.Stdcall,
@@ -1433,23 +1434,23 @@ pub fn updateDeclExports(
if (decl_cc == .C and mem.eql(u8, exp.options.name, "main") and
self.base.options.link_libc)
{
- module.stage1_flags.have_c_main = true;
+ mod.stage1_flags.have_c_main = true;
} else if (decl_cc == winapi_cc and self.base.options.target.os.tag == .windows) {
if (mem.eql(u8, exp.options.name, "WinMain")) {
- module.stage1_flags.have_winmain = true;
+ mod.stage1_flags.have_winmain = true;
} else if (mem.eql(u8, exp.options.name, "wWinMain")) {
- module.stage1_flags.have_wwinmain = true;
+ mod.stage1_flags.have_wwinmain = true;
} else if (mem.eql(u8, exp.options.name, "WinMainCRTStartup")) {
- module.stage1_flags.have_winmain_crt_startup = true;
+ mod.stage1_flags.have_winmain_crt_startup = true;
} else if (mem.eql(u8, exp.options.name, "wWinMainCRTStartup")) {
- module.stage1_flags.have_wwinmain_crt_startup = true;
+ mod.stage1_flags.have_wwinmain_crt_startup = true;
} else if (mem.eql(u8, exp.options.name, "DllMainCRTStartup")) {
- module.stage1_flags.have_dllmain_crt_startup = true;
+ mod.stage1_flags.have_dllmain_crt_startup = true;
}
}
}
- if (self.llvm_object) |llvm_object| return llvm_object.updateDeclExports(module, decl_index, exports);
+ if (self.llvm_object) |llvm_object| return llvm_object.updateDeclExports(mod, decl_index, exports);
}
const tracy = trace(@src());
@@ -1457,7 +1458,7 @@ pub fn updateDeclExports(
const gpa = self.base.allocator;
- const decl = module.declPtr(decl_index);
+ const decl = mod.declPtr(decl_index);
const atom_index = try self.getOrCreateAtomForDecl(decl_index);
const atom = self.getAtom(atom_index);
const decl_sym = atom.getSymbol(self);
@@ -1468,12 +1469,12 @@ pub fn updateDeclExports(
if (exp.options.section) |section_name| {
if (!mem.eql(u8, section_name, ".text")) {
- try module.failed_exports.putNoClobber(
- module.gpa,
+ try mod.failed_exports.putNoClobber(
+ mod.gpa,
exp,
try Module.ErrorMsg.create(
gpa,
- decl.srcLoc(),
+ decl.srcLoc(mod),
"Unimplemented: ExportOptions.section",
.{},
),
@@ -1483,12 +1484,12 @@ pub fn updateDeclExports(
}
if (exp.options.linkage == .LinkOnce) {
- try module.failed_exports.putNoClobber(
- module.gpa,
+ try mod.failed_exports.putNoClobber(
+ mod.gpa,
exp,
try Module.ErrorMsg.create(
gpa,
- decl.srcLoc(),
+ decl.srcLoc(mod),
"Unimplemented: GlobalLinkage.LinkOnce",
.{},
),