Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/asm_based.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ where
extern "C" {
#[cfg_attr(target_os = "macos", link_name = "_setjmp")]
#[cfg_attr(target_os = "linux", link_name = "_setjmp")]
#[cfg_attr(target_os = "freebsd", link_name = "setjmp")]
fn find_your_targets_setjmp(env: JmpBuf) -> c_int;
}
let setjmp = find_your_targets_setjmp;
Expand Down Expand Up @@ -207,6 +208,7 @@ where
extern "C" {
#[cfg_attr(target_os = "macos", link_name = "sigsetjmp")]
#[cfg_attr(target_os = "linux", link_name = "__sigsetjmp")]
#[cfg_attr(target_os = "freebsd", link_name = "sigsetjmp")]
fn find_your_targets_sigsetjmp(env: SigJmpBuf, savemask: c_int) -> c_int;
}
let sigsetjmp = find_your_targets_sigsetjmp;
Expand Down
27 changes: 27 additions & 0 deletions src/freebsd_compat.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
use core::marker::PhantomData;

#[cfg(target_arch = "aarch64")]
const JMP_BUF_SIZE: usize = 32 * 4;
#[cfg(target_arch = "x86_64")]
const JMP_BUF_SIZE: usize = 12 * 2;
#[cfg(target_arch = "riscv64")]
const JMP_BUF_SIZE: usize = 64 * 2;

/// `JmpBufFields` are the accessible fields when viewed via a JmpBuf pointer.
/// But also: You shouldn't be poking at these!
#[repr(C)]
pub struct JmpBufFields {
_buf: [u32; JMP_BUF_SIZE],
_neither_send_nor_sync: PhantomData<*const u8>,
}

/// `SigJmpBufFields` are the accessible fields when viewed via a SigJmpBuf pointer.
/// But also: You shouldn't be poking at these!
#[repr(C)]
pub struct SigJmpBufFields {
_buf: [u32; JMP_BUF_SIZE],
_neither_send_nor_sync: PhantomData<*const u8>,
}

pub type JmpBufStruct = JmpBufFields;
pub type SigJmpBufStruct = SigJmpBufFields;
4 changes: 4 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,14 @@ use libc::c_int;
mod glibc_compat;
#[cfg_attr(not(target_os = "macos"), allow(dead_code))]
mod macos_compat;
#[cfg_attr(not(target_os = "freebsd"), allow(dead_code))]
mod freebsd_compat;
#[cfg(target_os = "linux")]
use glibc_compat as struct_defs;
#[cfg(target_os = "macos")]
use macos_compat as struct_defs;
#[cfg(target_os = "freebsd")]
use freebsd_compat as struct_defs;

pub use crate::struct_defs::{JmpBufFields, JmpBufStruct};
pub use crate::struct_defs::{SigJmpBufFields, SigJmpBufStruct};
Expand Down