aboutsummaryrefslogtreecommitdiff
path: root/src/link.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2023-03-02 22:37:07 -0700
committerAndrew Kelley <andrew@ziglang.org>2023-03-15 10:48:13 -0700
commit9bf63b09963ca6ea1179dfaa9142498556bfac9d (patch)
tree61bc3e7308c21eb2dab6432a358be97e896edb1b /src/link.zig
parent7ffdbb3b855ef9e4aa25a8ac911fce752a71e16d (diff)
downloadzig-9bf63b09963ca6ea1179dfaa9142498556bfac9d.tar.gz
zig-9bf63b09963ca6ea1179dfaa9142498556bfac9d.zip
stage2: avoid linux-only APIs on other operating systems
Diffstat (limited to 'src/link.zig')
-rw-r--r--src/link.zig26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/link.zig b/src/link.zig
index 96931dd79e..e68f9c97d0 100644
--- a/src/link.zig
+++ b/src/link.zig
@@ -264,7 +264,7 @@ pub const File = struct {
/// of this linking operation.
lock: ?Cache.Lock = null,
- child_pid: ?std.os.pid_t = null,
+ child_pid: ?std.ChildProcess.Id = null,
/// Attempts incremental linking, if the file already exists. If
/// incremental linking fails, falls back to truncating the file and
@@ -388,10 +388,14 @@ pub const File = struct {
});
try emit.directory.handle.copyFile(emit.sub_path, emit.directory.handle, tmp_sub_path, .{});
try emit.directory.handle.rename(tmp_sub_path, emit.sub_path);
-
- switch (std.os.errno(std.os.linux.ptrace(std.os.linux.PTRACE.ATTACH, pid, 0, 0, 0))) {
- .SUCCESS => {},
- else => |errno| log.warn("ptrace failure: {s}", .{@tagName(errno)}),
+ switch (builtin.os.tag) {
+ .linux => {
+ switch (std.os.errno(std.os.linux.ptrace(std.os.linux.PTRACE.ATTACH, pid, 0, 0, 0))) {
+ .SUCCESS => {},
+ else => |errno| log.warn("ptrace failure: {s}", .{@tagName(errno)}),
+ }
+ },
+ else => return error.HotSwapUnavailableOnHostOperatingSystem,
}
}
base.file = try emit.directory.handle.createFile(emit.sub_path, .{
@@ -444,9 +448,14 @@ pub const File = struct {
base.file = null;
if (base.child_pid) |pid| {
- switch (std.os.errno(std.os.linux.ptrace(std.os.linux.PTRACE.DETACH, pid, 0, 0, 0))) {
- .SUCCESS => {},
- else => |errno| log.warn("ptrace failure: {s}", .{@tagName(errno)}),
+ switch (builtin.os.tag) {
+ .linux => {
+ switch (std.os.errno(std.os.linux.ptrace(std.os.linux.PTRACE.DETACH, pid, 0, 0, 0))) {
+ .SUCCESS => {},
+ else => |errno| log.warn("ptrace failure: {s}", .{@tagName(errno)}),
+ }
+ },
+ else => return error.HotSwapUnavailableOnHostOperatingSystem,
}
}
},
@@ -487,6 +496,7 @@ pub const File = struct {
NetNameDeleted,
DeviceBusy,
InvalidArgument,
+ HotSwapUnavailableOnHostOperatingSystem,
};
/// Called from within the CodeGen to lower a local variable instantion as an unnamed