aboutsummaryrefslogtreecommitdiff
path: root/src/link.zig
diff options
context:
space:
mode:
authorJakub Konka <kubkon@jakubkonka.com>2023-03-16 17:11:44 +0100
committerJakub Konka <kubkon@jakubkonka.com>2023-03-16 17:30:25 +0100
commit76afdd0586dc646bee1f20fd9ff23c044d70a211 (patch)
tree1c7e56b81b76ed53fc27b72e7d0242866417ceb7 /src/link.zig
parente1e414e62a86cc460ef215ea8050c953b68b6080 (diff)
downloadzig-76afdd0586dc646bee1f20fd9ff23c044d70a211.tar.gz
zig-76afdd0586dc646bee1f20fd9ff23c044d70a211.zip
link: move macOS kernel inode cache invalidation to MachO linker
Diffstat (limited to 'src/link.zig')
-rw-r--r--src/link.zig21
1 files changed, 1 insertions, 20 deletions
diff --git a/src/link.zig b/src/link.zig
index e68f9c97d0..a919ffa999 100644
--- a/src/link.zig
+++ b/src/link.zig
@@ -418,26 +418,7 @@ pub const File = struct {
.Exe => {},
}
switch (base.tag) {
- .macho => if (base.file) |f| {
- if (build_options.only_c) unreachable;
- if (comptime builtin.target.isDarwin() and builtin.target.cpu.arch == .aarch64) {
- if (base.options.target.cpu.arch == .aarch64) {
- // XNU starting with Big Sur running on arm64 is caching inodes of running binaries.
- // Any change to the binary will effectively invalidate the kernel's cache
- // resulting in a SIGKILL on each subsequent run. Since when doing incremental
- // linking we're modifying a binary in-place, this will end up with the kernel
- // killing it on every subsequent run. To circumvent it, we will copy the file
- // into a new inode, remove the original file, and rename the copy to match
- // the original file. This is super messy, but there doesn't seem any other
- // way to please the XNU.
- const emit = base.options.emit orelse return;
- try emit.directory.handle.copyFile(emit.sub_path, emit.directory.handle, emit.sub_path, .{});
- }
- }
- f.close();
- base.file = null;
- },
- .coff, .elf, .plan9, .wasm => if (base.file) |f| {
+ .coff, .elf, .macho, .plan9, .wasm => if (base.file) |f| {
if (build_options.only_c) unreachable;
if (base.intermediary_basename != null) {
// The file we have open is not the final file that we want to