diff --git a/src/arch/x86_64.rs b/src/arch/x86_64.rs index 3f96e2af0d..6ba5121bf5 100644 --- a/src/arch/x86_64.rs +++ b/src/arch/x86_64.rs @@ -109,7 +109,8 @@ pub struct FloatRegisters { pub mxcsr: u32, pub mxcsr_mask: u32, pub st_space: [u128; 8], - pub xmm_space: [u128; 16] + pub xmm_space: [u128; 16], + // TODO: YMM/ZMM } impl Deref for FloatRegisters { @@ -128,3 +129,26 @@ impl DerefMut for FloatRegisters { } } } +#[derive(Clone, Copy, Debug, Default)] +#[repr(packed)] +pub struct EnvRegisters { + pub fsbase: u64, + pub gsbase: u64, + // TODO: PKRU? +} +impl Deref for EnvRegisters { + type Target = [u8]; + fn deref(&self) -> &[u8] { + unsafe { + slice::from_raw_parts(self as *const EnvRegisters as *const u8, mem::size_of::()) + } + } +} + +impl DerefMut for EnvRegisters { + fn deref_mut(&mut self) -> &mut [u8] { + unsafe { + slice::from_raw_parts_mut(self as *mut EnvRegisters as *mut u8, mem::size_of::()) + } + } +} diff --git a/src/flag.rs b/src/flag.rs index 30629b4a8d..9788884afa 100644 --- a/src/flag.rs +++ b/src/flag.rs @@ -295,6 +295,8 @@ bitflags! { // Auxiliery vector types pub const AT_NULL: usize = 0; pub const AT_PHDR: usize = 3; +pub const AT_PHENT: usize = 4; +pub const AT_PHNUM: usize = 5; pub const AT_ENTRY: usize = 9; bitflags! {