1 use crate::prelude::*;
2 
3 pub type boolean_t = c_uint;
4 pub type mcontext_t = *mut __darwin_mcontext64;
5 
6 s! {
7     pub struct ucontext_t {
8         pub uc_onstack: c_int,
9         pub uc_sigmask: crate::sigset_t,
10         pub uc_stack: crate::stack_t,
11         pub uc_link: *mut crate::ucontext_t,
12         pub uc_mcsize: usize,
13         pub uc_mcontext: mcontext_t,
14     }
15 
16     pub struct __darwin_mcontext64 {
17         pub __es: __darwin_x86_exception_state64,
18         pub __ss: __darwin_x86_thread_state64,
19         pub __fs: __darwin_x86_float_state64,
20     }
21 
22     pub struct __darwin_x86_exception_state64 {
23         pub __trapno: u16,
24         pub __cpu: u16,
25         pub __err: u32,
26         pub __faultvaddr: u64,
27     }
28 
29     pub struct __darwin_x86_thread_state64 {
30         pub __rax: u64,
31         pub __rbx: u64,
32         pub __rcx: u64,
33         pub __rdx: u64,
34         pub __rdi: u64,
35         pub __rsi: u64,
36         pub __rbp: u64,
37         pub __rsp: u64,
38         pub __r8: u64,
39         pub __r9: u64,
40         pub __r10: u64,
41         pub __r11: u64,
42         pub __r12: u64,
43         pub __r13: u64,
44         pub __r14: u64,
45         pub __r15: u64,
46         pub __rip: u64,
47         pub __rflags: u64,
48         pub __cs: u64,
49         pub __fs: u64,
50         pub __gs: u64,
51     }
52 
53     pub struct __darwin_x86_float_state64 {
54         pub __fpu_reserved: [c_int; 2],
55         __fpu_fcw: c_short,
56         __fpu_fsw: c_short,
57         pub __fpu_ftw: u8,
58         pub __fpu_rsrv1: u8,
59         pub __fpu_fop: u16,
60         pub __fpu_ip: u32,
61         pub __fpu_cs: u16,
62         pub __fpu_rsrv2: u16,
63         pub __fpu_dp: u32,
64         pub __fpu_ds: u16,
65         pub __fpu_rsrv3: u16,
66         pub __fpu_mxcsr: u32,
67         pub __fpu_mxcsrmask: u32,
68         pub __fpu_stmm0: __darwin_mmst_reg,
69         pub __fpu_stmm1: __darwin_mmst_reg,
70         pub __fpu_stmm2: __darwin_mmst_reg,
71         pub __fpu_stmm3: __darwin_mmst_reg,
72         pub __fpu_stmm4: __darwin_mmst_reg,
73         pub __fpu_stmm5: __darwin_mmst_reg,
74         pub __fpu_stmm6: __darwin_mmst_reg,
75         pub __fpu_stmm7: __darwin_mmst_reg,
76         pub __fpu_xmm0: __darwin_xmm_reg,
77         pub __fpu_xmm1: __darwin_xmm_reg,
78         pub __fpu_xmm2: __darwin_xmm_reg,
79         pub __fpu_xmm3: __darwin_xmm_reg,
80         pub __fpu_xmm4: __darwin_xmm_reg,
81         pub __fpu_xmm5: __darwin_xmm_reg,
82         pub __fpu_xmm6: __darwin_xmm_reg,
83         pub __fpu_xmm7: __darwin_xmm_reg,
84         pub __fpu_xmm8: __darwin_xmm_reg,
85         pub __fpu_xmm9: __darwin_xmm_reg,
86         pub __fpu_xmm10: __darwin_xmm_reg,
87         pub __fpu_xmm11: __darwin_xmm_reg,
88         pub __fpu_xmm12: __darwin_xmm_reg,
89         pub __fpu_xmm13: __darwin_xmm_reg,
90         pub __fpu_xmm14: __darwin_xmm_reg,
91         pub __fpu_xmm15: __darwin_xmm_reg,
92         // this field is actually [u8; 96], but defining it with a bigger type
93         // allows us to auto-implement traits for it since the length of the
94         // array is less than 32
95         __fpu_rsrv4: [u32; 24],
96         pub __fpu_reserved1: c_int,
97     }
98 
99     pub struct __darwin_mmst_reg {
100         pub __mmst_reg: [c_char; 10],
101         pub __mmst_rsrv: [c_char; 6],
102     }
103 
104     pub struct __darwin_xmm_reg {
105         pub __xmm_reg: [c_char; 16],
106     }
107 
108     pub struct malloc_introspection_t {
109         _private: [crate::uintptr_t; 16], // FIXME(macos): keeping private for now
110     }
111 
112     // FIXME(1.0): This should not implement `PartialEq`
113     #[allow(unpredictable_function_pointer_comparisons)]
114     pub struct malloc_zone_t {
115         _reserved1: *mut c_void,
116         _reserved2: *mut c_void,
117         pub size:
118             Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, ptr: *const c_void) -> size_t>,
119         pub malloc:
120             Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, size: size_t) -> *mut c_void>,
121         pub calloc: Option<
122             unsafe extern "C" fn(
123                 zone: *mut malloc_zone_t,
124                 num_items: size_t,
125                 size: size_t,
126             ) -> *mut c_void,
127         >,
128         pub valloc:
129             Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, size: size_t) -> *mut c_void>,
130         pub free: Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, ptr: *mut c_void)>,
131         pub realloc: Option<
132             unsafe extern "C" fn(
133                 zone: *mut malloc_zone_t,
134                 ptr: *mut c_void,
135                 size: size_t,
136             ) -> *mut c_void,
137         >,
138         pub destroy: Option<unsafe extern "C" fn(zone: *mut malloc_zone_t)>,
139         pub zone_name: *const c_char,
140         pub batch_malloc: Option<
141             unsafe extern "C" fn(
142                 zone: *mut malloc_zone_t,
143                 size: size_t,
144                 results: *mut *mut c_void,
145                 num_requested: c_uint,
146             ) -> c_uint,
147         >,
148         pub batch_free: Option<
149             unsafe extern "C" fn(
150                 zone: *mut malloc_zone_t,
151                 to_be_freed: *mut *mut c_void,
152                 num_to_be_freed: c_uint,
153             ),
154         >,
155         pub introspect: *mut malloc_introspection_t,
156         pub version: c_uint,
157         pub memalign: Option<
158             unsafe extern "C" fn(
159                 zone: *mut malloc_zone_t,
160                 alignment: size_t,
161                 size: size_t,
162             ) -> *mut c_void,
163         >,
164         pub free_definite_size:
165             Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, ptr: *mut c_void, size: size_t)>,
166         pub pressure_relief:
167             Option<unsafe extern "C" fn(zone: *mut malloc_zone_t, goal: size_t) -> size_t>,
168         pub claimed_address: Option<
169             unsafe extern "C" fn(zone: *mut malloc_zone_t, ptr: *mut c_void) -> crate::boolean_t,
170         >,
171     }
172 }
173 
174 s_no_extra_traits! {
175     #[allow(missing_debug_implementations)]
176     #[repr(align(16))]
177     pub struct max_align_t {
178         priv_: [f64; 2],
179     }
180 }
181