aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-04-15 16:05:27 +0300
committerVeikka Tuominen <git@vexu.eu>2022-04-15 16:05:27 +0300
commitef7282bab41fdc95c4aee973de2ba595ca8195d2 (patch)
tree949bef80a15e5bc9179416006084917239c8a539 /src/link
parent845a30624ffc8fab884e2b7000daddb7d49eb5ff (diff)
downloadzig-ef7282bab41fdc95c4aee973de2ba595ca8195d2.tar.gz
zig-ef7282bab41fdc95c4aee973de2ba595ca8195d2.zip
stage2 macho: workaround stage2 bugs
Diffstat (limited to 'src/link')
-rw-r--r--src/link/MachO.zig11
-rw-r--r--src/link/MachO/Archive.zig1
-rw-r--r--src/link/MachO/DebugSymbols.zig3
-rw-r--r--src/link/MachO/Dylib.zig2
-rw-r--r--src/link/MachO/Object.zig3
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,