Handler { _data: MAIN_ALTSTACK };
}
- #[cfg(any(target_os = "linux",
- target_os = "macos",
- target_os = "bitrig",
- target_os = "netbsd",
- target_os = "openbsd"))]
- unsafe fn get_stack() -> libc::stack_t {
- let stackp = mmap(ptr::null_mut(),
- SIGSTKSZ,
- PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANON,
- -1,
- 0);
- if stackp == MAP_FAILED {
- panic!("failed to allocate an alternative stack");
- }
- libc::stack_t { ss_sp: stackp, ss_flags: 0, ss_size: SIGSTKSZ }
- }
-
- #[cfg(any(target_os = "dragonfly",
- target_os = "freebsd"))]
- unsafe fn get_stack() -> libc::stack_t {
+ unsafe fn get_stack() -> *mut i8 {
let stackp = mmap(ptr::null_mut(),
SIGSTKSZ,
PROT_READ | PROT_WRITE,
if stackp == MAP_FAILED {
panic!("failed to allocate an alternative stack");
}
- libc::stack_t { ss_sp: stackp as *mut i8, ss_flags: 0, ss_size: SIGSTKSZ }
+ stackp as *mut i8
}
-
pub unsafe fn make_handler() -> Handler {
- let stack = get_stack();
+ let stack = libc::stack_t { ss_sp: get_stack(), ss_flags: 0, ss_size: SIGSTKSZ }
sigaltstack(&stack, ptr::null_mut());
Handler { _data: stack.ss_sp as *mut libc::c_void }
}