authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-04 08:50:31+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-04 09:14:15+01:00
log533c88158ee2d0653e0d1f618371d56d81786214
tree268223790dc17a655bdfe2051e6399a49534bacb
parentbd0416aeb6926225001b2f58a89115cc296708d7

elf: actually capture positionals when linking static library


1 files changed, 6 insertions(+), 3 deletions(-)

src/link/Elf.zig+6-3
...@@ -1217,6 +1217,8 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node...@@ -1217,6 +1217,8 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
1217 Compilation.dump_argv(argv.items);1217 Compilation.dump_argv(argv.items);
1218 }1218 }
12191219
1220 if (self.zigObjectPtr()) |zig_object| try zig_object.flushModule(self);
1221
1220 // Here we will parse input positional and library files (if referenced).1222 // Here we will parse input positional and library files (if referenced).
1221 // This will roughly match in any linker backend we support.1223 // This will roughly match in any linker backend we support.
1222 var positionals = std.ArrayList(Compilation.LinkObject).init(arena);1224 var positionals = std.ArrayList(Compilation.LinkObject).init(arena);
...@@ -1284,6 +1286,8 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node...@@ -1284,6 +1286,8 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
1284 try positionals.append(.{ .path = ssp.full_object_path });1286 try positionals.append(.{ .path = ssp.full_object_path });
1285 }1287 }
12861288
1289 if (self.isStaticLib()) return self.flushStaticLib(comp, positionals.items);
1290
1287 for (positionals.items) |obj| {1291 for (positionals.items) |obj| {
1288 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };1292 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };
1289 self.parsePositional(obj.path, obj.must_link, &parse_ctx) catch |err|1293 self.parsePositional(obj.path, obj.must_link, &parse_ctx) catch |err|
...@@ -1383,9 +1387,6 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node...@@ -1383,9 +1387,6 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
1383 if (csu.crtend) |v| try positionals.append(.{ .path = v });1387 if (csu.crtend) |v| try positionals.append(.{ .path = v });
1384 if (csu.crtn) |v| try positionals.append(.{ .path = v });1388 if (csu.crtn) |v| try positionals.append(.{ .path = v });
13851389
1386 if (self.zigObjectPtr()) |zig_object| try zig_object.flushModule(self);
1387 if (self.isStaticLib()) return self.flushStaticLib(comp, positionals.items);
1388
1389 for (positionals.items) |obj| {1390 for (positionals.items) |obj| {
1390 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };1391 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };
1391 self.parsePositional(obj.path, obj.must_link, &parse_ctx) catch |err|1392 self.parsePositional(obj.path, obj.must_link, &parse_ctx) catch |err|
...@@ -1531,6 +1532,7 @@ pub fn flushStaticLib(...@@ -1531,6 +1532,7 @@ pub fn flushStaticLib(
1531 var err = try self.addErrorWithNotes(1);1532 var err = try self.addErrorWithNotes(1);
1532 try err.addMsg(self, "fatal linker error: too many input positionals", .{});1533 try err.addMsg(self, "fatal linker error: too many input positionals", .{});
1533 try err.addNote(self, "TODO implement linking objects into an static library", .{});1534 try err.addNote(self, "TODO implement linking objects into an static library", .{});
1535 return;
1534 }1536 }
1535 const gpa = self.base.allocator;1537 const gpa = self.base.allocator;
15361538
...@@ -1636,6 +1638,7 @@ pub fn flushObject(self: *Elf, comp: *Compilation) link.File.FlushError!void {...@@ -1636,6 +1638,7 @@ pub fn flushObject(self: *Elf, comp: *Compilation) link.File.FlushError!void {
1636 var err = try self.addErrorWithNotes(1);1638 var err = try self.addErrorWithNotes(1);
1637 try err.addMsg(self, "fatal linker error: too many input positionals", .{});1639 try err.addMsg(self, "fatal linker error: too many input positionals", .{});
1638 try err.addNote(self, "TODO implement '-r' option", .{});1640 try err.addNote(self, "TODO implement '-r' option", .{});
1641 return;
1639 }1642 }
16401643
1641 self.claimUnresolvedObject();1644 self.claimUnresolvedObject();