authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-04-08 16:55:13+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2021-04-13 10:56:03+02:00
log65c27d51f691524f63e964ad04cb12e3a77c5a9b
tree2884e28092ab5f3b4003bec7bbc17e2d1a4c3d0f
parent421102ba724370d04f14016006141a51c0f3e296

zld: limit exports to just main entrypoint


1 files changed, 10 insertions(+), 14 deletions(-)

src/link/MachO/Zld.zig+10-14
......@@ -2406,26 +2406,22 @@ fn writeExportInfo(self: *Zld) !void {
24062406 defer trie.deinit();
24072407
24082408 const text_segment = self.load_commands.items[self.text_segment_cmd_index.?].Segment;
2409 for (self.symtab.items()) |entry| {
2410 switch (entry.value.tag) {
2411 .Weak, .Strong => {},
2412 else => continue,
2413 }
2414 const name = entry.key;
2415 const symbol = entry.value.inner;
24162409
2417 assert(symbol.n_value >= text_segment.inner.vmaddr);
2410 // TODO export items for dylibs
2411 const sym = self.symtab.get("_main") orelse return error.MissingMainEntrypoint;
2412 assert(sym.inner.n_value >= text_segment.inner.vmaddr);
24182413
2419 try trie.put(.{
2420 .name = name,
2421 .vmaddr_offset = symbol.n_value - text_segment.inner.vmaddr,
2422 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
2423 });
2424 }
2414 try trie.put(.{
2415 .name = "_main",
2416 .vmaddr_offset = sym.inner.n_value - text_segment.inner.vmaddr,
2417 .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR,
2418 });
24252419
24262420 try trie.finalize();
2421
24272422 var buffer = try self.allocator.alloc(u8, @intCast(usize, trie.size));
24282423 defer self.allocator.free(buffer);
2424
24292425 var stream = std.io.fixedBufferStream(buffer);
24302426 const nwritten = try trie.write(stream.writer());
24312427 assert(nwritten == trie.size);