summaryrefslogtreecommitdiffstats
path: root/vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs')
-rw-r--r--vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs130
1 files changed, 130 insertions, 0 deletions
diff --git a/vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs b/vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
new file mode 100644
index 000000000..60dab0044
--- /dev/null
+++ b/vendor/libc/src/unix/bsd/netbsdlike/openbsd/x86_64.rs
@@ -0,0 +1,130 @@
+use PT_FIRSTMACH;
+
+pub type c_long = i64;
+pub type c_ulong = u64;
+pub type c_char = i8;
+pub type ucontext_t = sigcontext;
+
+s! {
+ pub struct sigcontext {
+ pub sc_rdi: ::c_long,
+ pub sc_rsi: ::c_long,
+ pub sc_rdx: ::c_long,
+ pub sc_rcx: ::c_long,
+ pub sc_r8: ::c_long,
+ pub sc_r9: ::c_long,
+ pub sc_r10: ::c_long,
+ pub sc_r11: ::c_long,
+ pub sc_r12: ::c_long,
+ pub sc_r13: ::c_long,
+ pub sc_r14: ::c_long,
+ pub sc_r15: ::c_long,
+ pub sc_rbp: ::c_long,
+ pub sc_rbx: ::c_long,
+ pub sc_rax: ::c_long,
+ pub sc_gs: ::c_long,
+ pub sc_fs: ::c_long,
+ pub sc_es: ::c_long,
+ pub sc_ds: ::c_long,
+ pub sc_trapno: ::c_long,
+ pub sc_err: ::c_long,
+ pub sc_rip: ::c_long,
+ pub sc_cs: ::c_long,
+ pub sc_rflags: ::c_long,
+ pub sc_rsp: ::c_long,
+ pub sc_ss: ::c_long,
+ pub sc_fpstate: *mut fxsave64,
+ __sc_unused: ::c_int,
+ pub sc_mask: ::c_int,
+ pub sc_cookie: ::c_long,
+ }
+}
+
+s_no_extra_traits! {
+ #[repr(packed)]
+ pub struct fxsave64 {
+ pub fx_fcw: u16,
+ pub fx_fsw: u16,
+ pub fx_ftw: u8,
+ __fx_unused1: u8,
+ pub fx_fop: u16,
+ pub fx_rip: u64,
+ pub fx_rdp: u64,
+ pub fx_mxcsr: u32,
+ pub fx_mxcsr_mask: u32,
+ pub fx_st: [[u64; 2]; 8],
+ pub fx_xmm: [[u64; 2]; 16],
+ __fx_unused3: [u8; 96],
+ }
+}
+
+cfg_if! {
+ if #[cfg(feature = "extra_traits")] {
+ // `fxsave64` is packed, so field access is unaligned.
+ // use {x} to create temporary storage, copy field to it, and do aligned access.
+ impl PartialEq for fxsave64 {
+ fn eq(&self, other: &fxsave64) -> bool {
+ return {self.fx_fcw} == {other.fx_fcw} &&
+ {self.fx_fsw} == {other.fx_fsw} &&
+ {self.fx_ftw} == {other.fx_ftw} &&
+ {self.fx_fop} == {other.fx_fop} &&
+ {self.fx_rip} == {other.fx_rip} &&
+ {self.fx_rdp} == {other.fx_rdp} &&
+ {self.fx_mxcsr} == {other.fx_mxcsr} &&
+ {self.fx_mxcsr_mask} == {other.fx_mxcsr_mask} &&
+ {self.fx_st}.iter().zip({other.fx_st}.iter()).all(|(a,b)| a == b) &&
+ {self.fx_xmm}.iter().zip({other.fx_xmm}.iter()).all(|(a,b)| a == b)
+ }
+ }
+ impl Eq for fxsave64 {}
+ impl ::fmt::Debug for fxsave64 {
+ fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
+ f.debug_struct("fxsave64")
+ .field("fx_fcw", &{self.fx_fcw})
+ .field("fx_fsw", &{self.fx_fsw})
+ .field("fx_ftw", &{self.fx_ftw})
+ .field("fx_fop", &{self.fx_fop})
+ .field("fx_rip", &{self.fx_rip})
+ .field("fx_rdp", &{self.fx_rdp})
+ .field("fx_mxcsr", &{self.fx_mxcsr})
+ .field("fx_mxcsr_mask", &{self.fx_mxcsr_mask})
+ // FIXME: .field("fx_st", &{self.fx_st})
+ // FIXME: .field("fx_xmm", &{self.fx_xmm})
+ .finish()
+ }
+ }
+ impl ::hash::Hash for fxsave64 {
+ fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
+ {self.fx_fcw}.hash(state);
+ {self.fx_fsw}.hash(state);
+ {self.fx_ftw}.hash(state);
+ {self.fx_fop}.hash(state);
+ {self.fx_rip}.hash(state);
+ {self.fx_rdp}.hash(state);
+ {self.fx_mxcsr}.hash(state);
+ {self.fx_mxcsr_mask}.hash(state);
+ {self.fx_st}.hash(state);
+ {self.fx_xmm}.hash(state);
+ }
+ }
+ }
+}
+
+// should be pub(crate), but that requires Rust 1.18.0
+cfg_if! {
+ if #[cfg(libc_const_size_of)] {
+ #[doc(hidden)]
+ pub const _ALIGNBYTES: usize = ::mem::size_of::<::c_long>() - 1;
+ } else {
+ #[doc(hidden)]
+ pub const _ALIGNBYTES: usize = 8 - 1;
+ }
+}
+
+pub const _MAX_PAGE_SHIFT: u32 = 12;
+
+pub const PT_STEP: ::c_int = PT_FIRSTMACH + 0;
+pub const PT_GETREGS: ::c_int = PT_FIRSTMACH + 1;
+pub const PT_SETREGS: ::c_int = PT_FIRSTMACH + 2;
+pub const PT_GETFPREGS: ::c_int = PT_FIRSTMACH + 3;
+pub const PT_SETFPREGS: ::c_int = PT_FIRSTMACH + 4;