1 pub type c_char = i8; 2 pub type c_long = i32; 3 pub type c_ulong = u32; 4 pub type wchar_t = i32; 5 pub type time_t = i32; 6 pub type suseconds_t = i32; 7 pub type register_t = i32; 8 9 s_no_extra_traits! { 10 pub struct mcontext_t { 11 pub mc_onstack: register_t, 12 pub mc_gs: register_t, 13 pub mc_fs: register_t, 14 pub mc_es: register_t, 15 pub mc_ds: register_t, 16 pub mc_edi: register_t, 17 pub mc_esi: register_t, 18 pub mc_ebp: register_t, 19 pub mc_isp: register_t, 20 pub mc_ebx: register_t, 21 pub mc_edx: register_t, 22 pub mc_ecx: register_t, 23 pub mc_eax: register_t, 24 pub mc_trapno: register_t, 25 pub mc_err: register_t, 26 pub mc_eip: register_t, 27 pub mc_cs: register_t, 28 pub mc_eflags: register_t, 29 pub mc_esp: register_t, 30 pub mc_ss: register_t, 31 pub mc_len: ::c_int, 32 pub mc_fpformat: ::c_int, 33 pub mc_ownedfp: ::c_int, 34 pub mc_flags: register_t, 35 pub mc_fpstate: [[::c_int; 32]; 4], 36 pub mc_fsbase: register_t, 37 pub mc_gsbase: register_t, 38 pub mc_xfpustate: register_t, 39 pub mc_xfpustate_len: register_t, 40 pub mc_spare2: [::c_int; 4], 41 } 42 } 43 44 s! { 45 pub struct stat { 46 pub st_dev: ::dev_t, 47 pub st_ino: ::ino_t, 48 pub st_mode: ::mode_t, 49 pub st_nlink: ::nlink_t, 50 pub st_uid: ::uid_t, 51 pub st_gid: ::gid_t, 52 pub st_rdev: ::dev_t, 53 pub st_atime: ::time_t, 54 pub st_atime_nsec: ::c_long, 55 pub st_mtime: ::time_t, 56 pub st_mtime_nsec: ::c_long, 57 pub st_ctime: ::time_t, 58 pub st_ctime_nsec: ::c_long, 59 pub st_size: ::off_t, 60 pub st_blocks: ::blkcnt_t, 61 pub st_blksize: ::blksize_t, 62 pub st_flags: ::fflags_t, 63 pub st_gen: u32, 64 pub st_lspare: i32, 65 pub st_birthtime: ::time_t, 66 pub st_birthtime_nsec: ::c_long, 67 __unused: [u8; 8], 68 } 69 70 pub struct ucontext_t { 71 pub uc_sigmask: ::sigset_t, 72 pub uc_mcontext: ::mcontext_t, 73 pub uc_link: *mut ::ucontext_t, 74 pub uc_stack: ::stack_t, 75 pub uc_flags: ::c_int, 76 __spare__: [::c_int; 4], 77 } 78 } 79 80 // should be pub(crate), but that requires Rust 1.18.0 81 cfg_if! { 82 if #[cfg(libc_const_size_of)] { 83 #[doc(hidden)] 84 pub const _ALIGNBYTES: usize = ::mem::size_of::<::c_long>() - 1; 85 } else { 86 #[doc(hidden)] 87 pub const _ALIGNBYTES: usize = 4 - 1; 88 } 89 } 90 91 cfg_if! { 92 if #[cfg(feature = "extra_traits")] { 93 impl PartialEq for mcontext_t { 94 fn eq(&self, other: &mcontext_t) -> bool { 95 self.mc_onstack == other.mc_onstack && 96 self.mc_gs == other.mc_gs && 97 self.mc_fs == other.mc_fs && 98 self.mc_es == other.mc_es && 99 self.mc_ds == other.mc_ds && 100 self.mc_edi == other.mc_edi && 101 self.mc_esi == other.mc_esi && 102 self.mc_ebp == other.mc_ebp && 103 self.mc_isp == other.mc_isp && 104 self.mc_ebx == other.mc_ebx && 105 self.mc_edx == other.mc_edx && 106 self.mc_ecx == other.mc_ecx && 107 self.mc_eax == other.mc_eax && 108 self.mc_trapno == other.mc_trapno && 109 self.mc_err == other.mc_err && 110 self.mc_eip == other.mc_eip && 111 self.mc_cs == other.mc_cs && 112 self.mc_eflags == other.mc_eflags && 113 self.mc_esp == other.mc_esp && 114 self.mc_ss == other.mc_ss && 115 self.mc_len == other.mc_len && 116 self.mc_fpformat == other.mc_fpformat && 117 self.mc_ownedfp == other.mc_ownedfp && 118 self.mc_flags == other.mc_flags && 119 self.mc_fpstate.iter().zip(other.mc_fpstate.iter()).all(|(a, b)| a == b) && 120 self.mc_fsbase == other.mc_fsbase && 121 self.mc_gsbase == other.mc_gsbase && 122 self.mc_xfpustate == other.mc_xfpustate && 123 self.mc_xfpustate_len == other.mc_xfpustate_len && 124 self.mc_spare2.iter().zip(other.mc_spare2.iter()).all(|(a, b)| a == b) 125 } 126 } 127 impl Eq for mcontext_t {} 128 impl ::fmt::Debug for mcontext_t { 129 fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { 130 f.debug_struct("mcontext_t") 131 .field("mc_onstack", &self.mc_onstack) 132 .field("mc_gs", &self.mc_gs) 133 .field("mc_fs", &self.mc_fs) 134 .field("mc_es", &self.mc_es) 135 .field("mc_ds", &self.mc_ds) 136 .field("mc_edi", &self.mc_edi) 137 .field("mc_esi", &self.mc_esi) 138 .field("mc_ebp", &self.mc_ebp) 139 .field("mc_isp", &self.mc_isp) 140 .field("mc_ebx", &self.mc_ebx) 141 .field("mc_edx", &self.mc_edx) 142 .field("mc_ecx", &self.mc_ecx) 143 .field("mc_eax", &self.mc_eax) 144 .field("mc_trapno", &self.mc_trapno) 145 .field("mc_err", &self.mc_err) 146 .field("mc_eip", &self.mc_eip) 147 .field("mc_cs", &self.mc_cs) 148 .field("mc_eflags", &self.mc_eflags) 149 .field("mc_esp", &self.mc_esp) 150 .field("mc_ss", &self.mc_ss) 151 .field("mc_len", &self.mc_len) 152 .field("mc_fpformat", &self.mc_fpformat) 153 .field("mc_ownedfp", &self.mc_ownedfp) 154 .field("mc_flags", &self.mc_flags) 155 .field("mc_fpstate", &self.mc_fpstate) 156 .field("mc_fsbase", &self.mc_fsbase) 157 .field("mc_gsbase", &self.mc_gsbase) 158 .field("mc_xfpustate", &self.mc_xfpustate) 159 .field("mc_xfpustate_len", &self.mc_xfpustate_len) 160 .field("mc_spare2", &self.mc_spare2) 161 .finish() 162 } 163 } 164 impl ::hash::Hash for mcontext_t { 165 fn hash<H: ::hash::Hasher>(&self, state: &mut H) { 166 self.mc_onstack.hash(state); 167 self.mc_gs.hash(state); 168 self.mc_fs.hash(state); 169 self.mc_es.hash(state); 170 self.mc_ds.hash(state); 171 self.mc_edi.hash(state); 172 self.mc_esi.hash(state); 173 self.mc_ebp.hash(state); 174 self.mc_isp.hash(state); 175 self.mc_ebx.hash(state); 176 self.mc_edx.hash(state); 177 self.mc_ecx.hash(state); 178 self.mc_eax.hash(state); 179 self.mc_trapno.hash(state); 180 self.mc_err.hash(state); 181 self.mc_eip.hash(state); 182 self.mc_cs.hash(state); 183 self.mc_eflags.hash(state); 184 self.mc_esp.hash(state); 185 self.mc_ss.hash(state); 186 self.mc_len.hash(state); 187 self.mc_fpformat.hash(state); 188 self.mc_ownedfp.hash(state); 189 self.mc_flags.hash(state); 190 self.mc_fpstate.hash(state); 191 self.mc_fsbase.hash(state); 192 self.mc_gsbase.hash(state); 193 self.mc_xfpustate.hash(state); 194 self.mc_xfpustate_len.hash(state); 195 self.mc_spare2.hash(state); 196 } 197 } 198 } 199 } 200 201 pub const MINSIGSTKSZ: ::size_t = 2048; // 512 * 4 202