| ... | ... | @@ -2477,33 +2477,32 @@ fn writeSymbolTable(self: *Zld) !void { |
| 2477 | 2477 | |
| 2478 | 2478 | var locals = std.ArrayList(macho.nlist_64).init(self.allocator); |
| 2479 | 2479 | defer locals.deinit(); |
| 2480 | | try locals.ensureTotalCapacity(self.locals.items.len); |
| 2481 | 2480 | |
| 2482 | | for (self.locals.items) |symbol| { |
| 2481 | var exports = std.ArrayList(macho.nlist_64).init(self.allocator); |
| 2482 | defer exports.deinit(); |
| 2483 | |
| 2484 | for (self.locals.items) |symbol, i| { |
| 2485 | if (i == 0) continue; // skip null symbol |
| 2483 | 2486 | if (symbol.isTemp()) continue; // TODO when merging codepaths, this should go into freelist |
| 2487 | const reg = symbol.payload.regular; |
| 2484 | 2488 | const nlist = try symbol.asNlist(self, &self.strtab); |
| 2485 | | locals.appendAssumeCapacity(nlist); |
| 2489 | if (reg.linkage == .translation_unit) { |
| 2490 | try locals.append(nlist); |
| 2491 | } else { |
| 2492 | try exports.append(nlist); |
| 2493 | } |
| 2486 | 2494 | } |
| 2487 | 2495 | |
| 2488 | | var exports = std.ArrayList(macho.nlist_64).init(self.allocator); |
| 2489 | | defer exports.deinit(); |
| 2490 | | |
| 2491 | 2496 | var undefs = std.ArrayList(macho.nlist_64).init(self.allocator); |
| 2492 | 2497 | defer undefs.deinit(); |
| 2493 | 2498 | var undef_dir = std.StringHashMap(u32).init(self.allocator); |
| 2494 | 2499 | defer undef_dir.deinit(); |
| 2495 | 2500 | |
| 2496 | | for (self.globals.values()) |sym| { |
| 2501 | for (self.imports.items) |sym| { |
| 2497 | 2502 | const nlist = try sym.asNlist(self, &self.strtab); |
| 2498 | | switch (sym.payload) { |
| 2499 | | .regular => try exports.append(nlist), |
| 2500 | | .proxy => { |
| 2501 | | const id = @intCast(u32, undefs.items.len); |
| 2502 | | try undefs.append(nlist); |
| 2503 | | try undef_dir.putNoClobber(sym.name, id); |
| 2504 | | }, |
| 2505 | | else => unreachable, |
| 2506 | | } |
| 2503 | const id = @intCast(u32, undefs.items.len); |
| 2504 | try undefs.append(nlist); |
| 2505 | try undef_dir.putNoClobber(sym.name, id); |
| 2507 | 2506 | } |
| 2508 | 2507 | |
| 2509 | 2508 | const nlocals = locals.items.len; |