aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-08-29 22:26:58 +0200
committerJakub Konka <kubkon@jakubkonka.com>2023-08-29 22:26:58 +0200
commitea9f2513a3b57aa4fda7825ca407672ce8d9da31 (patch)
tree84eadd66dcb7491be6a23a4f44da292e5d207572 /src
parent7e167537c032133b416f36425e29c028c10a9462 (diff)
downloadzig-ea9f2513a3b57aa4fda7825ca407672ce8d9da31.tar.gz
zig-ea9f2513a3b57aa4fda7825ca407672ce8d9da31.zip
macho: format parse error for fat libs to include CPU archs only
Diffstat (limited to 'src')
-rw-r--r--src/link/MachO.zig23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig
index b5eb7910e0..59781f38af 100644
--- a/src/link/MachO.zig
+++ b/src/link/MachO.zig
@@ -716,6 +716,7 @@ fn resolveLib(
const ParseError = error{
UnknownFileType,
InvalidTarget,
+ InvalidTargetFatLibrary,
DylibAlreadyExists,
IncompatibleDylibVersion,
OutOfMemory,
@@ -856,7 +857,7 @@ pub fn parseFatLibrary(
for (fat_archs) |arch| {
ctx.detected_targets.appendAssumeCapacity(try ctx.arena.dupe(u8, @tagName(arch.tag)));
}
- return error.InvalidTarget;
+ return error.InvalidTargetFatLibrary;
};
return offset;
}
@@ -4871,7 +4872,7 @@ pub fn handleAndReportParseError(
switch (err) {
error.DylibAlreadyExists => {},
error.UnknownFileType => try self.reportParseError(path, "unknown file type", .{}),
- error.InvalidTarget => {
+ error.InvalidTarget, error.InvalidTargetFatLibrary => {
var targets_string = std.ArrayList(u8).init(self.base.allocator);
defer targets_string.deinit();
try targets_string.writer().writeAll("(");
@@ -4880,10 +4881,20 @@ pub fn handleAndReportParseError(
}
try targets_string.resize(targets_string.items.len - 2);
try targets_string.writer().writeAll(")");
- try self.reportParseError(path, "invalid target: expected '{}', but found '{s}'", .{
- Platform.fromTarget(self.base.options.target).fmtTarget(cpu_arch),
- targets_string.items,
- });
+
+ switch (err) {
+ error.InvalidTarget => try self.reportParseError(
+ path,
+ "invalid target: expected '{}', but found '{s}'",
+ .{ Platform.fromTarget(self.base.options.target).fmtTarget(cpu_arch), targets_string.items },
+ ),
+ error.InvalidTargetFatLibrary => try self.reportParseError(
+ path,
+ "invalid architecture in univeral library: expected '{s}', but found '{s}'",
+ .{ @tagName(cpu_arch), targets_string.items },
+ ),
+ else => unreachable,
+ }
},
else => |e| try self.reportParseError(path, "{s}: parsing object failed", .{@errorName(e)}),
}