diff --git a/Cargo.lock b/Cargo.lock index aa63493aea4dbf302c564547b95edcdf14ca90eb..3a3210863b54f20d2fd4451dda89693a74fd7fa0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -155,7 +155,7 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.1" +version = "0.3.2" dependencies = [ "bitflags", ] diff --git a/src/arch/aarch64/interrupt/handler.rs b/src/arch/aarch64/interrupt/handler.rs index ddf3201cd51c8e5a01401875dfe7f0e2415a66f1..7adcd80dce60571eed56ae120c0e3f17631c7b64 100644 --- a/src/arch/aarch64/interrupt/handler.rs +++ b/src/arch/aarch64/interrupt/handler.rs @@ -126,6 +126,7 @@ impl InterruptStack { /// Saves all registers to a struct used by the proc: /// scheme to read/write registers. pub fn save(&self, all: &mut IntRegisters) { + /*TODO: aarch64 registers all.elr_el1 = self.iret.elr_el1; all.tpidr_el0 = self.iret.tpidr_el0; all.tpidrro_el0 = self.iret.tpidrro_el0; @@ -133,6 +134,7 @@ impl InterruptStack { all.esr_el1 = self.iret.esr_el1; all.sp_el0 = self.iret.sp_el0; all.padding = 0; + */ all.x30 = self.preserved.x30; all.x29 = self.preserved.x29; all.x28 = self.preserved.x28; @@ -165,16 +167,18 @@ impl InterruptStack { all.x1 = self.scratch.x1; all.x0 = self.scratch.x0; } - + /// Loads all registers from a struct used by the proc: /// scheme to read/write registers. pub fn load(&mut self, all: &IntRegisters) { + /*TODO: aarch64 registers self.iret.elr_el1 = all.elr_el1; self.iret.tpidr_el0 = all.tpidr_el0; self.iret.tpidrro_el0 = all.tpidrro_el0; self.iret.spsr_el1 = all.spsr_el1; self.iret.esr_el1 = all.esr_el1; self.iret.sp_el0 = all.sp_el0; + */ self.preserved.x30 = all.x30; self.preserved.x29 = all.x29; self.preserved.x28 = all.x28; diff --git a/src/scheme/proc.rs b/src/scheme/proc.rs index f7ba56554756cbfdae4433b92d84fce1a9b590d3..33ac1417a8320f333fa94c6f0b083ab44c248780 100644 --- a/src/scheme/proc.rs +++ b/src/scheme/proc.rs @@ -398,10 +398,13 @@ impl ProcScheme { Ok(id) } - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] + #[cfg(target_arch = "aarch64")] fn read_env_regs(&self, info: &Info) -> Result<EnvRegisters> { - //TODO: Support other archs - Err(Error::new(EINVAL)) + //TODO: aarch64 EnvRegisters + Ok(EnvRegisters { + tpidr_el0: 0, + tpidrro_el0: 0, + }) } #[cfg(target_arch = "x86")] @@ -453,10 +456,10 @@ impl ProcScheme { Ok(EnvRegisters { fsbase: fsbase as _, gsbase: gsbase as _ }) } - #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] + #[cfg(target_arch = "aarch64")] fn write_env_regs(&self, info: &Info, regs: EnvRegisters) -> Result<()> { - //TODO: Support other archs - Err(Error::new(EINVAL)) + //TODO: aarch64 EnvRegisters + Ok(()) } #[cfg(target_arch = "x86")]