cfg_if::cfg_if! {
if #[cfg(target_arch = "x86_64")] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf([u64; 8]);
} else if #[cfg(target_arch = "x86")] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf([u32; 6]);
} else if #[cfg(target_arch = "arm")] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf([u64; 32]);
} else if #[cfg(target_arch = "aarch64")] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf([u64; 22]);
} else if #[cfg(target_arch = "riscv64")] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf {
__pc: u64,
__regs: [u64; 12],
__sp: u64,
__fpregs: [f64; 12],
}
} else if #[cfg(target_arch = "s390x" )] {
#[repr(C)]
#[doc(hidden)]
#[allow(non_camel_case_types)]
pub struct __jmp_buf{
__gregs: [u64; 10],
__fpregs: [f64; 8],
}
}
}
#[repr(C)]
pub struct JmpBuf {
__jmp_buf: __jmp_buf,
__fl: u32,
__ss: [u32; 32],
}
unsafe extern "C" {
#[cfg_attr(target_env = "gnu", link_name = "__sigsetjmp")]
pub fn sigsetjmp(jb: *mut JmpBuf, save_mask: i32) -> i32;
pub fn siglongjmp(jb: *mut JmpBuf, val: i32) -> !;
}