diff --git a/mshv-bindings/src/regs.rs b/mshv-bindings/src/regs.rs index b6f3b632..8681d50f 100644 --- a/mshv-bindings/src/regs.rs +++ b/mshv-bindings/src/regs.rs @@ -11,6 +11,7 @@ use std::cmp; use std::fmt; use std::ptr; use vmm_sys_util::errno; +use zerocopy::{AsBytes, FromBytes}; #[repr(C)] #[derive(Default)] @@ -63,7 +64,7 @@ impl ::std::clone::Clone for __IncompleteArrayField { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct StandardRegisters { pub rax: u64, @@ -87,7 +88,7 @@ pub struct StandardRegisters { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct SegmentRegister { /* segment register + descriptor */ @@ -148,7 +149,7 @@ impl From for hv_x64_segment_register { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct TableRegister { pub base: u64, @@ -175,7 +176,7 @@ impl From for hv_x64_table_register { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone)] +#[derive(Debug, Default, Copy, Clone, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct SpecialRegisters { pub cs: SegmentRegister, @@ -199,7 +200,7 @@ pub struct SpecialRegisters { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct DebugRegisters { pub dr0: u64, @@ -211,7 +212,7 @@ pub struct DebugRegisters { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct FloatingPointUnit { pub fpr: [[u8; 16usize]; 8usize], @@ -339,7 +340,7 @@ pub fn msr_to_hv_reg_name(msr: u32) -> Result { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct msr_entry { pub index: u32, @@ -366,7 +367,7 @@ pub struct msr_list { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct VcpuEvents { pub pending_interruption: u64, @@ -376,14 +377,14 @@ pub struct VcpuEvents { pub pending_event1: [u8; 16usize], } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct Xcrs { pub xcr0: u64, } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] pub struct hv_cpuid_entry { pub function: __u32, pub index: __u32, @@ -473,7 +474,7 @@ impl Drop for Buffer { } #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, AsBytes, FromBytes)] pub struct LapicState { pub regs: [::std::os::raw::c_char; 1024usize], } @@ -489,7 +490,7 @@ impl Default for hv_register_value { } } */ #[repr(C)] -#[derive(Copy, Clone, Debug)] +#[derive(Copy, Clone, Debug, AsBytes, FromBytes)] /// This struct normalizes the actual mhsv XSave structure /// XSave only used in save and restore functionalities, serilization and /// deserialization are needed. Putting all the fields into a single buffer makes @@ -730,14 +731,14 @@ impl XSave { } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct SuspendRegisters { pub explicit_register: u64, pub intercept_register: u64, } #[repr(C)] -#[derive(Debug, Default, Copy, Clone, Eq, PartialEq)] +#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, AsBytes, FromBytes)] #[cfg_attr(feature = "with-serde", derive(Deserialize, Serialize))] pub struct MiscRegs { pub hypercall: u64,