authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-04 08:11:07+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-11-04 09:14:05+01:00
logbd0416aeb6926225001b2f58a89115cc296708d7
treed2508fd55805bb5232308a612227c8c7733339c7
parent9cf3ebe524dcc3fe6e80174041c8ed6687cbfcaa

elf: flag errors on hitting unimplemented codepaths


1 files changed, 18 insertions(+), 2 deletions(-)

src/link/Elf.zig+18-2
...@@ -1384,7 +1384,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node...@@ -1384,7 +1384,7 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
1384 if (csu.crtn) |v| try positionals.append(.{ .path = v });1384 if (csu.crtn) |v| try positionals.append(.{ .path = v });
13851385
1386 if (self.zigObjectPtr()) |zig_object| try zig_object.flushModule(self);1386 if (self.zigObjectPtr()) |zig_object| try zig_object.flushModule(self);
1387 if (self.isStaticLib()) return self.flushStaticLib(comp);1387 if (self.isStaticLib()) return self.flushStaticLib(comp, positionals.items);
13881388
1389 for (positionals.items) |obj| {1389 for (positionals.items) |obj| {
1390 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };1390 var parse_ctx: ParseErrorCtx = .{ .detected_cpu_arch = undefined };
...@@ -1521,8 +1521,17 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node...@@ -1521,8 +1521,17 @@ pub fn flushModule(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node
1521 }1521 }
1522}1522}
15231523
1524pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void {1524pub fn flushStaticLib(
1525 self: *Elf,
1526 comp: *Compilation,
1527 positionals: []const Compilation.LinkObject,
1528) link.File.FlushError!void {
1525 _ = comp;1529 _ = comp;
1530 if (positionals.len > 0) {
1531 var err = try self.addErrorWithNotes(1);
1532 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 }
1526 const gpa = self.base.allocator;1535 const gpa = self.base.allocator;
15271536
1528 // First, we flush relocatable object file generated with our backends.1537 // First, we flush relocatable object file generated with our backends.
...@@ -1622,6 +1631,13 @@ pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void...@@ -1622,6 +1631,13 @@ pub fn flushStaticLib(self: *Elf, comp: *Compilation) link.File.FlushError!void
16221631
1623pub fn flushObject(self: *Elf, comp: *Compilation) link.File.FlushError!void {1632pub fn flushObject(self: *Elf, comp: *Compilation) link.File.FlushError!void {
1624 _ = comp;1633 _ = comp;
1634
1635 if (self.objects.items.len > 0) {
1636 var err = try self.addErrorWithNotes(1);
1637 try err.addMsg(self, "fatal linker error: too many input positionals", .{});
1638 try err.addNote(self, "TODO implement '-r' option", .{});
1639 }
1640
1625 self.claimUnresolvedObject();1641 self.claimUnresolvedObject();
16261642
1627 try self.initSections();1643 try self.initSections();