| ... | ... | @@ -1284,17 +1284,14 @@ fn resolveSymbols(self: *Zld) !void { |
| 1284 | 1284 | } |
| 1285 | 1285 | |
| 1286 | 1286 | // Second pass, resolve symbols in static libraries. |
| 1287 | | var next: usize = 0; |
| 1288 | | var hit: bool = undefined; |
| 1289 | | while (true) { |
| 1290 | | var archive = &self.archives.items[next]; |
| 1291 | | hit = false; |
| 1292 | | |
| 1293 | | for (self.symtab.items()) |entry| { |
| 1294 | | if (entry.value.tag != .undef) continue; |
| 1295 | | |
| 1296 | | const sym_name = entry.value.name; |
| 1297 | | |
| 1287 | var next_sym: usize = 0; |
| 1288 | var nsyms: usize = self.symtab.items().len; |
| 1289 | while (next_sym < nsyms) : (next_sym += 1) { |
| 1290 | const sym = self.symtab.items()[next_sym]; |
| 1291 | if (sym.value.tag != .undef) continue; |
| 1292 | |
| 1293 | const sym_name = sym.value.name; |
| 1294 | for (self.archives.items) |archive| { |
| 1298 | 1295 | // Check if the entry exists in a static archive. |
| 1299 | 1296 | const offsets = archive.toc.get(sym_name) orelse { |
| 1300 | 1297 | // No hit. |
| ... | ... | @@ -1307,18 +1304,9 @@ fn resolveSymbols(self: *Zld) !void { |
| 1307 | 1304 | try self.objects.append(self.allocator, object); |
| 1308 | 1305 | try self.resolveSymbolsInObject(object_id); |
| 1309 | 1306 | |
| 1310 | | hit = true; |
| 1307 | nsyms = self.symtab.items().len; |
| 1311 | 1308 | break; |
| 1312 | 1309 | } |
| 1313 | | |
| 1314 | | if (!hit) { |
| 1315 | | // Next archive. |
| 1316 | | next += 1; |
| 1317 | | if (next == self.archives.items.len) { |
| 1318 | | break; |
| 1319 | | } |
| 1320 | | archive = &self.archives.items[next]; |
| 1321 | | } |
| 1322 | 1310 | } |
| 1323 | 1311 | |
| 1324 | 1312 | // Third pass, resolve symbols in dynamic libraries. |