| ... | @@ -2406,26 +2406,22 @@ fn writeExportInfo(self: *Zld) !void { | ... | @@ -2406,26 +2406,22 @@ fn writeExportInfo(self: *Zld) !void { |
| 2406 | defer trie.deinit(); | 2406 | defer trie.deinit(); |
| 2407 | | 2407 | |
| 2408 | const text_segment = self.load_commands.items[self.text_segment_cmd_index.?].Segment; | 2408 | 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; | | |
| 2416 | | 2409 | |
| 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); |
| 2418 | | 2413 | |
| 2419 | try trie.put(.{ | 2414 | try trie.put(.{ |
| 2420 | .name = name, | 2415 | .name = "_main", |
| 2421 | .vmaddr_offset = symbol.n_value - text_segment.inner.vmaddr, | 2416 | .vmaddr_offset = sym.inner.n_value - text_segment.inner.vmaddr, |
| 2422 | .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR, | 2417 | .export_flags = macho.EXPORT_SYMBOL_FLAGS_KIND_REGULAR, |
| 2423 | }); | 2418 | }); |
| 2424 | } | | |
| 2425 | | 2419 | |
| 2426 | try trie.finalize(); | 2420 | try trie.finalize(); |
| | 2421 | |
| 2427 | var buffer = try self.allocator.alloc(u8, @intCast(usize, trie.size)); | 2422 | var buffer = try self.allocator.alloc(u8, @intCast(usize, trie.size)); |
| 2428 | defer self.allocator.free(buffer); | 2423 | defer self.allocator.free(buffer); |
| | 2424 | |
| 2429 | var stream = std.io.fixedBufferStream(buffer); | 2425 | var stream = std.io.fixedBufferStream(buffer); |
| 2430 | const nwritten = try trie.write(stream.writer()); | 2426 | const nwritten = try trie.write(stream.writer()); |
| 2431 | assert(nwritten == trie.size); | 2427 | assert(nwritten == trie.size); |