diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-04-15 16:05:27 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-04-15 16:05:27 +0300 |
| commit | ef7282bab41fdc95c4aee973de2ba595ca8195d2 (patch) | |
| tree | 949bef80a15e5bc9179416006084917239c8a539 /src/link | |
| parent | 845a30624ffc8fab884e2b7000daddb7d49eb5ff (diff) | |
| download | zig-ef7282bab41fdc95c4aee973de2ba595ca8195d2.tar.gz zig-ef7282bab41fdc95c4aee973de2ba595ca8195d2.zip | |
stage2 macho: workaround stage2 bugs
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/MachO.zig | 11 | ||||
| -rw-r--r-- | src/link/MachO/Archive.zig | 1 | ||||
| -rw-r--r-- | src/link/MachO/DebugSymbols.zig | 3 | ||||
| -rw-r--r-- | src/link/MachO/Dylib.zig | 2 | ||||
| -rw-r--r-- | src/link/MachO/Object.zig | 3 |
5 files changed, 12 insertions, 8 deletions
diff --git a/src/link/MachO.zig b/src/link/MachO.zig index d359a3fd5d..fa1ba2835a 100644 --- a/src/link/MachO.zig +++ b/src/link/MachO.zig @@ -1317,6 +1317,9 @@ pub fn parseDylib(self: *MachO, path: []const u8, opts: DylibCreateOpts) ParseDy error.EndOfStream, error.NotDylib => { try file.seekTo(0); + // TODO https://github.com/ziglang/zig/issues/11367 + if (@import("builtin").zig_backend != .stage1) return error.Unexpected; + var lib_stub = LibStub.loadFromFile(self.base.allocator, file) catch { dylib.deinit(self.base.allocator); return false; @@ -5747,7 +5750,6 @@ fn populateLazyBindOffsetsInStubHelper(self: *MachO, buffer: []const u8) !void { while (true) { const inst = reader.readByte() catch |err| switch (err) { error.EndOfStream => break, - else => return err, }; const opcode: u8 = inst & macho.BIND_OPCODE_MASK; @@ -5875,7 +5877,7 @@ fn writeFunctionStarts(self: *MachO) !void { mem.set(u8, buffer, 0); var stream = std.io.fixedBufferStream(buffer); - var writer = stream.writer(); + const writer = stream.writer(); for (offsets.items) |offset| { try std.leb.writeULEB128(writer, offset); @@ -6236,7 +6238,8 @@ fn writeLoadCommands(self: *MachO) !void { var buffer = try self.base.allocator.alloc(u8, sizeofcmds); defer self.base.allocator.free(buffer); - var writer = std.io.fixedBufferStream(buffer).writer(); + var fib = std.io.fixedBufferStream(buffer); + const writer = fib.writer(); for (self.load_commands.items) |lc| { try lc.write(writer); } @@ -6416,7 +6419,7 @@ fn snapshotState(self: *MachO) !void { error.Unseekable => try out_file.writer().writeByte('['), else => |e| return e, } - var writer = out_file.writer(); + const writer = out_file.writer(); var snapshot = Snapshot{ .timestamp = std.time.nanoTimestamp(), diff --git a/src/link/MachO/Archive.zig b/src/link/MachO/Archive.zig index 1ebb122423..e8d981b4ae 100644 --- a/src/link/MachO/Archive.zig +++ b/src/link/MachO/Archive.zig @@ -171,7 +171,6 @@ fn parseTableOfContents(self: *Archive, allocator: Allocator, reader: anytype) ! while (true) { const n_strx = symtab_reader.readIntLittle(u32) catch |err| switch (err) { error.EndOfStream => break, - else => |e| return e, }; const object_offset = try symtab_reader.readIntLittle(u32); diff --git a/src/link/MachO/DebugSymbols.zig b/src/link/MachO/DebugSymbols.zig index aa7a29fcd1..5fac857422 100644 --- a/src/link/MachO/DebugSymbols.zig +++ b/src/link/MachO/DebugSymbols.zig @@ -472,7 +472,8 @@ fn writeLoadCommands(self: *DebugSymbols, allocator: Allocator) !void { var buffer = try allocator.alloc(u8, sizeofcmds); defer allocator.free(buffer); - var writer = std.io.fixedBufferStream(buffer).writer(); + var fib = std.io.fixedBufferStream(buffer); + const writer = fib.writer(); for (self.load_commands.items) |lc| { try lc.write(writer); } diff --git a/src/link/MachO/Dylib.zig b/src/link/MachO/Dylib.zig index 7593593cbc..26bac50144 100644 --- a/src/link/MachO/Dylib.zig +++ b/src/link/MachO/Dylib.zig @@ -64,7 +64,7 @@ pub const Id = struct { }; } - pub fn deinit(id: *Id, allocator: Allocator) void { + pub fn deinit(id: Id, allocator: Allocator) void { allocator.free(id.name); } diff --git a/src/link/MachO/Object.zig b/src/link/MachO/Object.zig index 255d7053d4..c8ebb4b8b5 100644 --- a/src/link/MachO/Object.zig +++ b/src/link/MachO/Object.zig @@ -492,7 +492,8 @@ pub fn parseIntoAtoms(self: *Object, allocator: Allocator, macho_file: *MachO) ! mem.copy(u8, atom.code.items, code); } - try atom.parseRelocs(relocs, .{ + // TODO stage2 bug: @alignCast shouldn't be needed + try atom.parseRelocs(@alignCast(@alignOf(macho.relocation_info), relocs), .{ .base_addr = sect.addr, .allocator = allocator, .object = self, |
