authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-18 19:15:06+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-01-24 12:34:41+01:00
log9a78173ee0019c6b0bd1a73926d1413f603b20ac
treede17ab440008a1270aaeb417c590ee47f4542685
parenta79a038e61541d6faffaab70c82a18a812c2e9df

macho: implement ZigObject.flushModule


1 files changed, 27 insertions(+), 3 deletions(-)

src/link/MachO/ZigObject.zig+27-3
......@@ -223,9 +223,33 @@ pub fn getInputSection(self: ZigObject, atom: Atom, macho_file: *MachO) macho.se
223223}
224224
225225pub fn flushModule(self: *ZigObject, macho_file: *MachO) !void {
226 _ = self;
227 _ = macho_file;
228 @panic("TODO flushModule");
226 // Handle any lazy symbols that were emitted by incremental compilation.
227 if (self.lazy_syms.getPtr(.none)) |metadata| {
228 const zcu = macho_file.base.comp.module.?;
229
230 // Most lazy symbols can be updated on first use, but
231 // anyerror needs to wait for everything to be flushed.
232 if (metadata.text_state != .unused) self.updateLazySymbol(
233 macho_file,
234 link.File.LazySymbol.initDecl(.code, null, zcu),
235 metadata.text_symbol_index,
236 ) catch |err| return switch (err) {
237 error.CodegenFail => error.FlushFailure,
238 else => |e| e,
239 };
240 if (metadata.const_state != .unused) self.updateLazySymbol(
241 macho_file,
242 link.File.LazySymbol.initDecl(.const_data, null, zcu),
243 metadata.const_symbol_index,
244 ) catch |err| return switch (err) {
245 error.CodegenFail => error.FlushFailure,
246 else => |e| e,
247 };
248 }
249 for (self.lazy_syms.values()) |*metadata| {
250 if (metadata.text_state != .unused) metadata.text_state = .flushed;
251 if (metadata.const_state != .unused) metadata.const_state = .flushed;
252 }
229253}
230254
231255pub fn getDeclVAddr(