sel4/arch/x86/arch/x64/
user_context.rs

1//
2// Copyright 2023, Colias Group, LLC
3//
4// SPDX-License-Identifier: MIT
5//
6
7use 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}