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(...@@ -716,6 +716,7 @@ fn resolveLib(
716const ParseError = error{716const ParseError = error{
717 UnknownFileType,717 UnknownFileType,
718 InvalidTarget,718 InvalidTarget,
719 InvalidTargetFatLibrary,
719 DylibAlreadyExists,720 DylibAlreadyExists,
720 IncompatibleDylibVersion,721 IncompatibleDylibVersion,
721 OutOfMemory,722 OutOfMemory,
...@@ -856,7 +857,7 @@ pub fn parseFatLibrary(...@@ -856,7 +857,7 @@ pub fn parseFatLibrary(
856 for (fat_archs) |arch| {857 for (fat_archs) |arch| {
857 ctx.detected_targets.appendAssumeCapacity(try ctx.arena.dupe(u8, @tagName(arch.tag)));858 ctx.detected_targets.appendAssumeCapacity(try ctx.arena.dupe(u8, @tagName(arch.tag)));
858 }859 }
859 return error.InvalidTarget;860 return error.InvalidTargetFatLibrary;
860 };861 };
861 return offset;862 return offset;
862}863}
...@@ -4871,7 +4872,7 @@ pub fn handleAndReportParseError(...@@ -4871,7 +4872,7 @@ pub fn handleAndReportParseError(
4871 switch (err) {4872 switch (err) {
4872 error.DylibAlreadyExists => {},4873 error.DylibAlreadyExists => {},
4873 error.UnknownFileType => try self.reportParseError(path, "unknown file type", .{}),4874 error.UnknownFileType => try self.reportParseError(path, "unknown file type", .{}),
4874 error.InvalidTarget => {4875 error.InvalidTarget, error.InvalidTargetFatLibrary => {
4875 var targets_string = std.ArrayList(u8).init(self.base.allocator);4876 var targets_string = std.ArrayList(u8).init(self.base.allocator);
4876 defer targets_string.deinit();4877 defer targets_string.deinit();
4877 try targets_string.writer().writeAll("(");4878 try targets_string.writer().writeAll("(");
...@@ -4880,10 +4881,20 @@ pub fn handleAndReportParseError(...@@ -4880,10 +4881,20 @@ pub fn handleAndReportParseError(
4880 }4881 }
4881 try targets_string.resize(targets_string.items.len - 2);4882 try targets_string.resize(targets_string.items.len - 2);
4882 try targets_string.writer().writeAll(")");4883 try targets_string.writer().writeAll(")");
4883 try self.reportParseError(path, "invalid target: expected '{}', but found '{s}'", .{4884
4884 Platform.fromTarget(self.base.options.target).fmtTarget(cpu_arch),4885 switch (err) {
4885 targets_string.items,4886 error.InvalidTarget => try self.reportParseError(
4886 });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 }
4887 },4898 },
4888 else => |e| try self.reportParseError(path, "{s}: parsing object failed", .{@errorName(e)}),4899 else => |e| try self.reportParseError(path, "{s}: parsing object failed", .{@errorName(e)}),
4889 }4900 }