From adfd9702bff41ff3379e3376e59d2d2b40576194 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Sun, 10 Jan 2021 10:51:07 -0700 Subject: [PATCH] 0.2.2 - fix compilation on aarch64 --- Cargo.toml | 2 +- src/arch/x86_64.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++ src/data.rs | 86 ---------------------------------------------- 3 files changed, 85 insertions(+), 87 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1080451..98c0ff8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "redox_syscall" -version = "0.2.1" +version = "0.2.2" description = "A Rust library to access raw Redox system calls" license = "MIT" authors = ["Jeremy Soller "] diff --git a/src/arch/x86_64.rs b/src/arch/x86_64.rs index dbf5467..1323dbd 100644 --- a/src/arch/x86_64.rs +++ b/src/arch/x86_64.rs @@ -41,3 +41,87 @@ syscall! { syscall4(a, b, c, d, e,); syscall5(a, b, c, d, e, f,); } + +#[derive(Copy, Clone, Debug, Default)] +#[repr(C)] +pub struct IntRegisters { + // TODO: Some of these don't get set by Redox yet. Should they? + + pub r15: usize, + pub r14: usize, + pub r13: usize, + pub r12: usize, + pub rbp: usize, + pub rbx: usize, + pub r11: usize, + pub r10: usize, + pub r9: usize, + pub r8: usize, + pub rax: usize, + pub rcx: usize, + pub rdx: usize, + pub rsi: usize, + pub rdi: usize, + // pub orig_rax: usize, + pub rip: usize, + pub cs: usize, + pub rflags: usize, + pub rsp: usize, + pub ss: usize, + // pub fs_base: usize, + // pub gs_base: usize, + // pub ds: usize, + // pub es: usize, + pub fs: usize, + // pub gs: usize +} + +impl Deref for IntRegisters { + type Target = [u8]; + fn deref(&self) -> &[u8] { + unsafe { + slice::from_raw_parts(self as *const IntRegisters as *const u8, mem::size_of::()) + } + } +} + +impl DerefMut for IntRegisters { + fn deref_mut(&mut self) -> &mut [u8] { + unsafe { + slice::from_raw_parts_mut(self as *mut IntRegisters as *mut u8, mem::size_of::()) + } + } +} + +#[derive(Clone, Copy, Debug, Default)] +#[repr(packed)] +pub struct FloatRegisters { + pub fcw: u16, + pub fsw: u16, + pub ftw: u8, + pub _reserved: u8, + pub fop: u16, + pub fip: u64, + pub fdp: u64, + pub mxcsr: u32, + pub mxcsr_mask: u32, + pub st_space: [u128; 8], + pub xmm_space: [u128; 16] +} + +impl Deref for FloatRegisters { + type Target = [u8]; + fn deref(&self) -> &[u8] { + unsafe { + slice::from_raw_parts(self as *const FloatRegisters as *const u8, mem::size_of::()) + } + } +} + +impl DerefMut for FloatRegisters { + fn deref_mut(&mut self) -> &mut [u8] { + unsafe { + slice::from_raw_parts_mut(self as *mut FloatRegisters as *mut u8, mem::size_of::()) + } + } +} diff --git a/src/data.rs b/src/data.rs index 9f4d452..45d2dd8 100644 --- a/src/data.rs +++ b/src/data.rs @@ -252,92 +252,6 @@ impl DerefMut for TimeSpec { } } -#[derive(Copy, Clone, Debug, Default)] -#[repr(C)] -#[cfg(target_arch = "x86_64")] -pub struct IntRegisters { - // TODO: Some of these don't get set by Redox yet. Should they? - - pub r15: usize, - pub r14: usize, - pub r13: usize, - pub r12: usize, - pub rbp: usize, - pub rbx: usize, - pub r11: usize, - pub r10: usize, - pub r9: usize, - pub r8: usize, - pub rax: usize, - pub rcx: usize, - pub rdx: usize, - pub rsi: usize, - pub rdi: usize, - // pub orig_rax: usize, - pub rip: usize, - pub cs: usize, - pub rflags: usize, - pub rsp: usize, - pub ss: usize, - // pub fs_base: usize, - // pub gs_base: usize, - // pub ds: usize, - // pub es: usize, - pub fs: usize, - // pub gs: usize -} - -impl Deref for IntRegisters { - type Target = [u8]; - fn deref(&self) -> &[u8] { - unsafe { - slice::from_raw_parts(self as *const IntRegisters as *const u8, mem::size_of::()) - } - } -} - -impl DerefMut for IntRegisters { - fn deref_mut(&mut self) -> &mut [u8] { - unsafe { - slice::from_raw_parts_mut(self as *mut IntRegisters as *mut u8, mem::size_of::()) - } - } -} - -#[derive(Clone, Copy, Debug, Default)] -#[repr(packed)] -#[cfg(target_arch = "x86_64")] -pub struct FloatRegisters { - pub fcw: u16, - pub fsw: u16, - pub ftw: u8, - pub _reserved: u8, - pub fop: u16, - pub fip: u64, - pub fdp: u64, - pub mxcsr: u32, - pub mxcsr_mask: u32, - pub st_space: [u128; 8], - pub xmm_space: [u128; 16] -} - -impl Deref for FloatRegisters { - type Target = [u8]; - fn deref(&self) -> &[u8] { - unsafe { - slice::from_raw_parts(self as *const FloatRegisters as *const u8, mem::size_of::()) - } - } -} - -impl DerefMut for FloatRegisters { - fn deref_mut(&mut self) -> &mut [u8] { - unsafe { - slice::from_raw_parts_mut(self as *mut FloatRegisters as *mut u8, mem::size_of::()) - } - } -} - #[derive(Clone, Copy, Debug, Default)] #[repr(C)] pub struct PtraceEvent {