pub type c_char = i8; pub type wchar_t = u32; pub type c_long = i64; pub type c_ulong = u64; pub type time_t = i64; s! { #[repr(align(8))] pub struct x86_64_cpu_registers { pub rdi: u64, pub rsi: u64, pub rdx: u64, pub r10: u64, pub r8: u64, pub r9: u64, pub rax: u64, pub rbx: u64, pub rbp: u64, pub rcx: u64, pub r11: u64, pub r12: u64, pub r13: u64, pub r14: u64, pub r15: u64, pub rip: u64, pub cs: u32, rsvd1: u32, pub rflags: u64, pub rsp: u64, pub ss: u32, rsvd2: u32, } #[repr(align(8))] pub struct mcontext_t { pub cpu: x86_64_cpu_registers, #[cfg(libc_union)] pub fpu: x86_64_fpu_registers, #[cfg(not(libc_union))] __reserved: [u8; 1024], } pub struct stack_t { pub ss_sp: *mut ::c_void, pub ss_size: ::size_t, pub ss_flags: ::c_int, } pub struct fsave_area_64 { pub fpu_control_word: u32, pub fpu_status_word: u32, pub fpu_tag_word: u32, pub fpu_ip: u32, pub fpu_cs: u32, pub fpu_op: u32, pub fpu_ds: u32, pub st_regs: [u8; 80], } pub struct fxsave_area_64 { pub fpu_control_word: u16, pub fpu_status_word: u16, pub fpu_tag_word: u16, pub fpu_operand: u16, pub fpu_rip: u64, pub fpu_rdp: u64, pub mxcsr: u32, pub mxcsr_mask: u32, pub st_regs: [u8; 128], pub xmm_regs: [u8; 128], reserved2: [u8; 224], } pub struct fpu_extention_savearea_64 { pub other: [u8; 512], pub xstate_bv: u64, pub xstate_undef: [u64; 7], pub xstate_info: [u8; 224], } } s_no_extra_traits! { #[cfg(libc_union)] pub union x86_64_fpu_registers { pub fsave_area: fsave_area_64, pub fxsave_area: fxsave_area_64, pub xsave_area: fpu_extention_savearea_64, pub data: [u8; 1024], } } cfg_if! { if #[cfg(feature = "extra_traits")] { #[cfg(libc_union)] impl Eq for x86_64_fpu_registers {} #[cfg(libc_union)] impl PartialEq for x86_64_fpu_registers { fn eq(&self, other: &x86_64_fpu_registers) -> bool { unsafe { self.fsave_area == other.fsave_area || self.fxsave_area == other.fxsave_area || self.xsave_area == other.xsave_area } } } #[cfg(libc_union)] impl ::fmt::Debug for x86_64_fpu_registers { fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { unsafe { f.debug_struct("x86_64_fpu_registers") .field("fsave_area", &self.fsave_area) .field("fxsave_area", &self.fxsave_area) .field("xsave_area", &self.xsave_area) .finish() } } } #[cfg(libc_union)] impl ::hash::Hash for x86_64_fpu_registers { fn hash(&self, state: &mut H) { unsafe { self.fsave_area.hash(state); self.fxsave_area.hash(state); self.xsave_area.hash(state); } } } } }