aboutsummaryrefslogtreecommitdiff
path: root/lib/std/Build/Step/CheckObject.zig
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2025-11-20 17:48:35 +0000
committerGitHub <noreply@github.com>2025-11-20 17:48:35 +0000
commit8a73fc8d8ee0065e4d07e473ce6ab095cebfaece (patch)
tree36bed2955666bdfce7b96e2f33c9409bd26f03c1 /lib/std/Build/Step/CheckObject.zig
parenta9568ed2963298864e5c9a92a3eafe81771128ff (diff)
parenta87b5332319b20347916f77e57253e2df4b2a3af (diff)
downloadzig-8a73fc8d8ee0065e4d07e473ce6ab095cebfaece.tar.gz
zig-8a73fc8d8ee0065e4d07e473ce6ab095cebfaece.zip
Merge pull request #25981 from mlugg/macos-fuzz-2
make the fuzzer vaguely work on macOS
Diffstat (limited to 'lib/std/Build/Step/CheckObject.zig')
-rw-r--r--lib/std/Build/Step/CheckObject.zig29
1 files changed, 14 insertions, 15 deletions
diff --git a/lib/std/Build/Step/CheckObject.zig b/lib/std/Build/Step/CheckObject.zig
index d9935d4f3d..ab10d368b2 100644
--- a/lib/std/Build/Step/CheckObject.zig
+++ b/lib/std/Build/Step/CheckObject.zig
@@ -729,10 +729,10 @@ const MachODumper = struct {
imports: std.ArrayListUnmanaged([]const u8) = .empty,
fn parse(ctx: *ObjectContext) !void {
- var it = ctx.getLoadCommandIterator();
+ var it = try ctx.getLoadCommandIterator();
var i: usize = 0;
- while (it.next()) |cmd| {
- switch (cmd.cmd()) {
+ while (try it.next()) |cmd| {
+ switch (cmd.hdr.cmd) {
.SEGMENT_64 => {
const seg = cmd.cast(macho.segment_command_64).?;
try ctx.segments.append(ctx.gpa, seg);
@@ -771,14 +771,13 @@ const MachODumper = struct {
return mem.sliceTo(@as([*:0]const u8, @ptrCast(ctx.strtab.items.ptr + off)), 0);
}
- fn getLoadCommandIterator(ctx: ObjectContext) macho.LoadCommandIterator {
- const data = ctx.data[@sizeOf(macho.mach_header_64)..][0..ctx.header.sizeofcmds];
- return .{ .ncmds = ctx.header.ncmds, .buffer = data };
+ fn getLoadCommandIterator(ctx: ObjectContext) !macho.LoadCommandIterator {
+ return .init(&ctx.header, ctx.data[@sizeOf(macho.mach_header_64)..]);
}
- fn getLoadCommand(ctx: ObjectContext, cmd: macho.LC) ?macho.LoadCommandIterator.LoadCommand {
- var it = ctx.getLoadCommandIterator();
- while (it.next()) |lc| if (lc.cmd() == cmd) {
+ fn getLoadCommand(ctx: ObjectContext, cmd: macho.LC) !?macho.LoadCommandIterator.LoadCommand {
+ var it = try ctx.getLoadCommandIterator();
+ while (try it.next()) |lc| if (lc.hdr.cmd == cmd) {
return lc;
};
return null;
@@ -872,9 +871,9 @@ const MachODumper = struct {
\\LC {d}
\\cmd {s}
\\cmdsize {d}
- , .{ index, @tagName(lc.cmd()), lc.cmdsize() });
+ , .{ index, @tagName(lc.hdr.cmd), lc.hdr.cmdsize });
- switch (lc.cmd()) {
+ switch (lc.hdr.cmd) {
.SEGMENT_64 => {
const seg = lc.cast(macho.segment_command_64).?;
try writer.writeByte('\n');
@@ -1592,9 +1591,9 @@ const MachODumper = struct {
.headers => {
try ObjectContext.dumpHeader(ctx.header, writer);
- var it = ctx.getLoadCommandIterator();
+ var it = try ctx.getLoadCommandIterator();
var i: usize = 0;
- while (it.next()) |cmd| {
+ while (try it.next()) |cmd| {
try ObjectContext.dumpLoadCommand(cmd, i, writer);
try writer.writeByte('\n');
@@ -1615,7 +1614,7 @@ const MachODumper = struct {
.dyld_weak_bind,
.dyld_lazy_bind,
=> {
- const cmd = ctx.getLoadCommand(.DYLD_INFO_ONLY) orelse
+ const cmd = try ctx.getLoadCommand(.DYLD_INFO_ONLY) orelse
return step.fail("no dyld info found", .{});
const lc = cmd.cast(macho.dyld_info_command).?;
@@ -1649,7 +1648,7 @@ const MachODumper = struct {
},
.exports => blk: {
- if (ctx.getLoadCommand(.DYLD_INFO_ONLY)) |cmd| {
+ if (try ctx.getLoadCommand(.DYLD_INFO_ONLY)) |cmd| {
const lc = cmd.cast(macho.dyld_info_command).?;
if (lc.export_size > 0) {
const data = ctx.data[lc.export_off..][0..lc.export_size];