aboutsummaryrefslogtreecommitdiff
path: root/src/link/Wasm.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2022-09-09 13:08:58 +0200
committerGitHub <noreply@github.com>2022-09-09 13:08:58 +0200
commit56b96cd61b0bdb7f5b11a5283fe6dd5b585ef10e (patch)
treea19765f949fd7ce1d1d6fdbcf684a812d30e634a /src/link/Wasm.zig
parenta833bdcd7e6fcfee6e9cc33a3f7de78b16a36941 (diff)
parent5006fb6846ccaa7edb1547588cf1aa08c8decf2b (diff)
downloadzig-56b96cd61b0bdb7f5b11a5283fe6dd5b585ef10e.tar.gz
zig-56b96cd61b0bdb7f5b11a5283fe6dd5b585ef10e.zip
Merge pull request #12772 from ziglang/coff-basic-imports
coff: implement enough of the incremental linker to pass behavior and incremental tests on Windows
Diffstat (limited to 'src/link/Wasm.zig')
-rw-r--r--src/link/Wasm.zig18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig
index 0c5f0e810f..babed64755 100644
--- a/src/link/Wasm.zig
+++ b/src/link/Wasm.zig
@@ -695,12 +695,10 @@ pub fn deinit(self: *Wasm) void {
gpa.free(segment_info.name);
}
for (self.objects.items) |*object| {
- object.file.?.close();
object.deinit(gpa);
}
for (self.archives.items) |*archive| {
- archive.file.close();
archive.deinit(gpa);
}
@@ -3218,14 +3216,26 @@ fn writeVecSectionHeader(file: fs.File, offset: u64, section: wasm.Section, size
buf[0] = @enumToInt(section);
leb.writeUnsignedFixed(5, buf[1..6], size);
leb.writeUnsignedFixed(5, buf[6..], items);
- try file.pwriteAll(&buf, offset);
+
+ if (builtin.target.os.tag == .windows) {
+ // https://github.com/ziglang/zig/issues/12783
+ const curr_pos = try file.getPos();
+ try file.pwriteAll(&buf, offset);
+ try file.seekTo(curr_pos);
+ } else try file.pwriteAll(&buf, offset);
}
fn writeCustomSectionHeader(file: fs.File, offset: u64, size: u32) !void {
var buf: [1 + 5]u8 = undefined;
buf[0] = 0; // 0 = 'custom' section
leb.writeUnsignedFixed(5, buf[1..6], size);
- try file.pwriteAll(&buf, offset);
+
+ if (builtin.target.os.tag == .windows) {
+ // https://github.com/ziglang/zig/issues/12783
+ const curr_pos = try file.getPos();
+ try file.pwriteAll(&buf, offset);
+ try file.seekTo(curr_pos);
+ } else try file.pwriteAll(&buf, offset);
}
fn emitLinkSection(self: *Wasm, file: fs.File, arena: Allocator, symbol_table: *std.AutoArrayHashMap(SymbolLoc, u32)) !void {