From 53c2321ff7dae2a6c91c698ece5098d2fb6b74ee Mon Sep 17 00:00:00 2001 From: Julio Merino Date: Thu, 10 Apr 2025 20:30:40 -0700 Subject: [PATCH] Add support for NetBSD/amd64 Signed-off-by: Julio Merino --- src/addr_validate.rs | 2 +- src/profiler.rs | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/addr_validate.rs b/src/addr_validate.rs index cd39bcac..e9d2dab0 100644 --- a/src/addr_validate.rs +++ b/src/addr_validate.rs @@ -28,7 +28,7 @@ fn create_pipe() -> nix::Result<(i32, i32)> { } #[inline] -#[cfg(any(target_os = "macos", target_os = "freebsd"))] +#[cfg(any(target_os = "freebsd", target_os = "macos", target_os = "netbsd"))] fn create_pipe() -> nix::Result<(i32, i32)> { use nix::fcntl::{fcntl, FcntlArg, FdFlag, OFlag}; use nix::unistd::pipe; diff --git a/src/profiler.rs b/src/profiler.rs index 69aeadbd..f58fc5ae 100644 --- a/src/profiler.rs +++ b/src/profiler.rs @@ -233,7 +233,7 @@ struct ErrnoProtector(libc::c_int); impl ErrnoProtector { fn new() -> Self { unsafe { - #[cfg(target_os = "android")] + #[cfg(any(target_os = "android", target_os = "netbsd"))] { let errno = *libc::__errno(); Self(errno) @@ -255,7 +255,7 @@ impl ErrnoProtector { impl Drop for ErrnoProtector { fn drop(&mut self) { unsafe { - #[cfg(target_os = "android")] + #[cfg(any(target_os = "android", target_os = "netbsd"))] { *libc::__errno() = self.0; } @@ -304,9 +304,13 @@ extern "C" fn perf_signal_handler( let addr = unsafe { (*ucontext).uc_mcontext.gregs[libc::REG_RIP as usize] as usize }; - #[cfg(all(target_arch = "x86_64", target_os = "freebsd"))] + #[cfg(target_os = "freebsd")] let addr = unsafe { (*ucontext).uc_mcontext.mc_rip as usize }; + #[cfg(all(target_arch = "x86_64", target_os = "netbsd"))] + let addr = + unsafe { (*ucontext).uc_mcontext.__gregs[libc::_REG_RIP as usize] as usize }; + #[cfg(all(target_arch = "x86_64", target_os = "macos"))] let addr = unsafe { let mcontext = (*ucontext).uc_mcontext; @@ -323,7 +327,7 @@ extern "C" fn perf_signal_handler( ))] let addr = unsafe { (*ucontext).uc_mcontext.pc as usize }; - #[cfg(all(target_arch = "aarch64", target_os = "freebsd"))] + #[cfg(all(target_arch = "aarch64", any(target_os = "freebsd", target_os = "netbsd")))] let addr = unsafe { (*ucontext).mc_gpregs.gp_elr as usize }; #[cfg(all(target_arch = "aarch64", target_os = "macos"))]