sel4/arch/x86/arch/x64/
user_context.rs1use crate::{Word, newtype_methods, sys};
8
9#[derive(Debug, Clone, PartialEq, Eq, Default)]
10pub struct UserContext(sys::seL4_UserContext);
11
12impl UserContext {
13 newtype_methods!(pub sys::seL4_UserContext);
14
15 pub fn pc(&self) -> &Word {
16 &self.0.rip
17 }
18
19 pub fn pc_mut(&mut self) -> &mut Word {
20 &mut self.0.rip
21 }
22
23 pub fn sp(&self) -> &Word {
24 &self.0.rsp
25 }
26
27 pub fn sp_mut(&mut self) -> &mut Word {
28 &mut self.0.rsp
29 }
30
31 pub fn c_param(&self, ix: usize) -> &Word {
32 match ix {
33 0 => &self.inner().rdi,
34 1 => &self.inner().rsi,
35 2 => &self.inner().rdx,
36 3 => &self.inner().rcx,
37 4 => &self.inner().r8,
38 5 => &self.inner().r9,
39 _ => panic!(),
40 }
41 }
42
43 pub fn c_param_mut(&mut self, ix: usize) -> &mut Word {
44 match ix {
45 0 => &mut self.inner_mut().rdi,
46 1 => &mut self.inner_mut().rsi,
47 2 => &mut self.inner_mut().rdx,
48 3 => &mut self.inner_mut().rcx,
49 4 => &mut self.inner_mut().r8,
50 5 => &mut self.inner_mut().r9,
51 _ => panic!(),
52 }
53 }
54}