| ... | ... | @@ -2406,26 +2406,22 @@ fn writeExportInfo(self: *Zld) !void { |
| 2406 | 2406 | defer trie.deinit(); |
| 2407 | 2407 | |
| 2408 | 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(.{ |
| 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 | }); |
| 2425 | 2419 | |
| 2426 | 2420 | try trie.finalize(); |
| 2421 | |
| 2427 | 2422 | var buffer = try self.allocator.alloc(u8, @intCast(usize, trie.size)); |
| 2428 | 2423 | defer self.allocator.free(buffer); |
| 2424 | |
| 2429 | 2425 | var stream = std.io.fixedBufferStream(buffer); |
| 2430 | 2426 | const nwritten = try trie.write(stream.writer()); |
| 2431 | 2427 | assert(nwritten == trie.size); |