@@ -135,7 +135,7 @@ mod imp {
135
135
Handler { _data : MAIN_ALTSTACK } ;
136
136
}
137
137
138
- unsafe fn get_stack ( ) -> * mut i8 {
138
+ unsafe fn get_stackp ( ) -> * mut libc :: c_void {
139
139
let stackp = mmap ( ptr:: null_mut ( ) ,
140
140
SIGSTKSZ ,
141
141
PROT_READ | PROT_WRITE ,
@@ -145,11 +145,26 @@ mod imp {
145
145
if stackp == MAP_FAILED {
146
146
panic ! ( "failed to allocate an alternative stack" ) ;
147
147
}
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 }
149
164
}
150
165
151
166
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 ( ) ;
153
168
sigaltstack ( & stack, ptr:: null_mut ( ) ) ;
154
169
Handler { _data : stack. ss_sp as * mut libc:: c_void }
155
170
}
0 commit comments