authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-15 16:05:27+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-04-15 16:05:27+03:00
logef7282bab41fdc95c4aee973de2ba595ca8195d2
tree949bef80a15e5bc9179416006084917239c8a539
parent845a30624ffc8fab884e2b7000daddb7d49eb5ff

stage2 macho: workaround stage2 bugs


6 files changed, 14 insertions(+), 9 deletions(-)

src/Sema.zig+2-1
......@@ -12417,7 +12417,8 @@ fn zirPtrType(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air
1241712417 const tracy = trace(@src());
1241812418 defer tracy.end();
1241912419
12420 const src: LazySrcLoc = .unneeded;
12420 // TODO better source location
12421 const src: LazySrcLoc = sema.src;
1242112422 const elem_ty_src: LazySrcLoc = .unneeded;
1242212423 const inst_data = sema.code.instructions.items(.data)[inst].ptr_type;
1242312424 const extra = sema.code.extraData(Zir.Inst.PtrType, inst_data.payload_index);
src/link/MachO.zig+7-4
......@@ -1317,6 +1317,9 @@ pub fn parseDylib(self: *MachO, path: []const u8, opts: DylibCreateOpts) ParseDy
13171317 error.EndOfStream, error.NotDylib => {
13181318 try file.seekTo(0);
13191319
1320 // TODO https://github.com/ziglang/zig/issues/11367
1321 if (@import("builtin").zig_backend != .stage1) return error.Unexpected;
1322
13201323 var lib_stub = LibStub.loadFromFile(self.base.allocator, file) catch {
13211324 dylib.deinit(self.base.allocator);
13221325 return false;
......@@ -5747,7 +5750,6 @@ fn populateLazyBindOffsetsInStubHelper(self: *MachO, buffer: []const u8) !void {
57475750 while (true) {
57485751 const inst = reader.readByte() catch |err| switch (err) {
57495752 error.EndOfStream => break,
5750 else => return err,
57515753 };
57525754 const opcode: u8 = inst & macho.BIND_OPCODE_MASK;
57535755
......@@ -5875,7 +5877,7 @@ fn writeFunctionStarts(self: *MachO) !void {
58755877 mem.set(u8, buffer, 0);
58765878
58775879 var stream = std.io.fixedBufferStream(buffer);
5878 var writer = stream.writer();
5880 const writer = stream.writer();
58795881
58805882 for (offsets.items) |offset| {
58815883 try std.leb.writeULEB128(writer, offset);
......@@ -6236,7 +6238,8 @@ fn writeLoadCommands(self: *MachO) !void {
62366238
62376239 var buffer = try self.base.allocator.alloc(u8, sizeofcmds);
62386240 defer self.base.allocator.free(buffer);
6239 var writer = std.io.fixedBufferStream(buffer).writer();
6241 var fib = std.io.fixedBufferStream(buffer);
6242 const writer = fib.writer();
62406243 for (self.load_commands.items) |lc| {
62416244 try lc.write(writer);
62426245 }
......@@ -6416,7 +6419,7 @@ fn snapshotState(self: *MachO) !void {
64166419 error.Unseekable => try out_file.writer().writeByte('['),
64176420 else => |e| return e,
64186421 }
6419 var writer = out_file.writer();
6422 const writer = out_file.writer();
64206423
64216424 var snapshot = Snapshot{
64226425 .timestamp = std.time.nanoTimestamp(),
src/link/MachO/Archive.zig-1
......@@ -171,7 +171,6 @@ fn parseTableOfContents(self: *Archive, allocator: Allocator, reader: anytype) !
171171 while (true) {
172172 const n_strx = symtab_reader.readIntLittle(u32) catch |err| switch (err) {
173173 error.EndOfStream => break,
174 else => |e| return e,
175174 };
176175 const object_offset = try symtab_reader.readIntLittle(u32);
177176
src/link/MachO/DebugSymbols.zig+2-1
......@@ -472,7 +472,8 @@ fn writeLoadCommands(self: *DebugSymbols, allocator: Allocator) !void {
472472
473473 var buffer = try allocator.alloc(u8, sizeofcmds);
474474 defer allocator.free(buffer);
475 var writer = std.io.fixedBufferStream(buffer).writer();
475 var fib = std.io.fixedBufferStream(buffer);
476 const writer = fib.writer();
476477 for (self.load_commands.items) |lc| {
477478 try lc.write(writer);
478479 }
src/link/MachO/Dylib.zig+1-1
......@@ -64,7 +64,7 @@ pub const Id = struct {
6464 };
6565 }
6666
67 pub fn deinit(id: *Id, allocator: Allocator) void {
67 pub fn deinit(id: Id, allocator: Allocator) void {
6868 allocator.free(id.name);
6969 }
7070
src/link/MachO/Object.zig+2-1
......@@ -492,7 +492,8 @@ pub fn parseIntoAtoms(self: *Object, allocator: Allocator, macho_file: *MachO) !
492492 mem.copy(u8, atom.code.items, code);
493493 }
494494
495 try atom.parseRelocs(relocs, .{
495 // TODO stage2 bug: @alignCast shouldn't be needed
496 try atom.parseRelocs(@alignCast(@alignOf(macho.relocation_info), relocs), .{
496497 .base_addr = sect.addr,
497498 .allocator = allocator,
498499 .object = self,