authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-08-29 22:26:58+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2023-08-29 22:26:58+02:00
logea9f2513a3b57aa4fda7825ca407672ce8d9da31
tree84eadd66dcb7491be6a23a4f44da292e5d207572
parent7e167537c032133b416f36425e29c028c10a9462

macho: format parse error for fat libs to include CPU archs only


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

src/link/MachO.zig+17-6
......@@ -716,6 +716,7 @@ fn resolveLib(
716716const ParseError = error{
717717 UnknownFileType,
718718 InvalidTarget,
719 InvalidTargetFatLibrary,
719720 DylibAlreadyExists,
720721 IncompatibleDylibVersion,
721722 OutOfMemory,
......@@ -856,7 +857,7 @@ pub fn parseFatLibrary(
856857 for (fat_archs) |arch| {
857858 ctx.detected_targets.appendAssumeCapacity(try ctx.arena.dupe(u8, @tagName(arch.tag)));
858859 }
859 return error.InvalidTarget;
860 return error.InvalidTargetFatLibrary;
860861 };
861862 return offset;
862863}
......@@ -4871,7 +4872,7 @@ pub fn handleAndReportParseError(
48714872 switch (err) {
48724873 error.DylibAlreadyExists => {},
48734874 error.UnknownFileType => try self.reportParseError(path, "unknown file type", .{}),
4874 error.InvalidTarget => {
4875 error.InvalidTarget, error.InvalidTargetFatLibrary => {
48754876 var targets_string = std.ArrayList(u8).init(self.base.allocator);
48764877 defer targets_string.deinit();
48774878 try targets_string.writer().writeAll("(");
......@@ -4880,10 +4881,20 @@ pub fn handleAndReportParseError(
48804881 }
48814882 try targets_string.resize(targets_string.items.len - 2);
48824883 try targets_string.writer().writeAll(")");
4883 try self.reportParseError(path, "invalid target: expected '{}', but found '{s}'", .{
4884 Platform.fromTarget(self.base.options.target).fmtTarget(cpu_arch),
4885 targets_string.items,
4886 });
4884
4885 switch (err) {
4886 error.InvalidTarget => try self.reportParseError(
4887 path,
4888 "invalid target: expected '{}', but found '{s}'",
4889 .{ Platform.fromTarget(self.base.options.target).fmtTarget(cpu_arch), targets_string.items },
4890 ),
4891 error.InvalidTargetFatLibrary => try self.reportParseError(
4892 path,
4893 "invalid architecture in univeral library: expected '{s}', but found '{s}'",
4894 .{ @tagName(cpu_arch), targets_string.items },
4895 ),
4896 else => unreachable,
4897 }
48874898 },
48884899 else => |e| try self.reportParseError(path, "{s}: parsing object failed", .{@errorName(e)}),
48894900 }