From 65c27d51f691524f63e964ad04cb12e3a77c5a9b Mon Sep 17 00:00:00 2001 From: Jakub Konka Date: Thu, 8 Apr 2021 16:55:13 +0200 Subject: [PATCH] zld: limit exports to just main entrypoint --- src/link/MachO/Zld.zig | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/src/link/MachO/Zld.zig b/src/link/MachO/Zld.zig index fe203cedc6..5702b5ccf6 100644 --- a/src/link/MachO/Zld.zig +++ b/src/link/MachO/Zld.zig @@ -2406,26 +2406,22 @@ fn writeExportInfo(self: *Zld) !void { defer trie.deinit(); const text_segment = self.load_commands.items[self.text_segment_cmd_index.?].Segment; - for (self.symtab.items()) |entry| { - switch (entry.value.tag) { - .Weak, .Strong => {}, - else => continue, - } - const name = entry.key; - const symbol = entry.value.inner; - assert(symbol.n_value >= text_segment.inner.vmaddr); + // TODO export items for dylibs + const sym = self.symtab.get("_main") orelse return error.MissingMainEntrypoint; + assert(sym.inner.n_value >= text_segment.inner.vmaddr); - try trie.put(.{ - .name = name, - .vmaddr_offset = symbol.n_value - text_segment.inner.vmaddr, - .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR, - }); - } + try trie.put(.{ + .name = "_main", + .vmaddr_offset = sym.inner.n_value - text_segment.inner.vmaddr, + .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR, + }); try trie.finalize(); + var buffer = try self.allocator.alloc(u8, @intCast(usize, trie.size)); defer self.allocator.free(buffer); + var stream = std.io.fixedBufferStream(buffer); const nwritten = try trie.write(stream.writer()); assert(nwritten == trie.size);