@@ -135,7 +135,7 @@ mod imp {
135135 Handler { _data : MAIN_ALTSTACK } ;
136136 }
137137
138- unsafe fn get_stack ( ) -> * mut i8 {
138+ unsafe fn get_stackp ( ) -> * mut libc :: c_void {
139139 let stackp = mmap ( ptr:: null_mut ( ) ,
140140 SIGSTKSZ ,
141141 PROT_READ | PROT_WRITE ,
@@ -145,11 +145,26 @@ mod imp {
145145 if stackp == MAP_FAILED {
146146 panic ! ( "failed to allocate an alternative stack" ) ;
147147 }
148- stackp as * mut i8
148+ stackp
149+ }
150+
151+ #[ cfg( any( target_os = "linux" ,
152+ target_os = "macos" ,
153+ target_os = "bitrig" ,
154+ target_os = "netbsd" ,
155+ target_os = "openbsd" ) ) ]
156+ unsafe fn get_stack ( ) -> libc:: stack_t {
157+ libc:: stack_t { ss_sp : get_stackp ( ) , ss_flags : 0 , ss_size : SIGSTKSZ }
158+ }
159+
160+ #[ cfg( any( target_os = "freebsd" ,
161+ target_os = "dragonfly" ) ) ]
162+ unsafe fn get_stack ( ) -> libc:: stack_t {
163+ libc:: stack_t { ss_sp : get_stackp ( ) as * mut i8 , ss_flags : 0 , ss_size : SIGSTKSZ }
149164 }
150165
151166 pub unsafe fn make_handler ( ) -> Handler {
152- let stack = libc :: stack_t { ss_sp : get_stack ( ) , ss_flags : 0 , ss_size : SIGSTKSZ }
167+ let stack = get_stack ( ) ;
153168 sigaltstack ( & stack, ptr:: null_mut ( ) ) ;
154169 Handler { _data : stack. ss_sp as * mut libc:: c_void }
155170 }
0 commit comments