70 lines
1.4 KiB
Rust
70 lines
1.4 KiB
Rust
use crate::{
|
|
arch::{interrupt::InterruptStack},
|
|
context,
|
|
syscall,
|
|
syscall::flag::{PTRACE_FLAG_IGNORE, PTRACE_STOP_PRE_SYSCALL, PTRACE_STOP_POST_SYSCALL},
|
|
};
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern fn do_exception_unhandled() {}
|
|
|
|
#[no_mangle]
|
|
pub unsafe extern fn do_exception_synchronous() {}
|
|
|
|
#[allow(dead_code)]
|
|
#[repr(packed)]
|
|
pub struct SyscallStack {
|
|
pub elr_el1: usize,
|
|
pub padding: usize,
|
|
pub tpidr: usize,
|
|
pub tpidrro: usize,
|
|
pub rflags: usize,
|
|
pub esr: usize,
|
|
pub sp: usize,
|
|
pub lr: usize,
|
|
pub fp: usize,
|
|
pub x28: usize,
|
|
pub x27: usize,
|
|
pub x26: usize,
|
|
pub x25: usize,
|
|
pub x24: usize,
|
|
pub x23: usize,
|
|
pub x22: usize,
|
|
pub x21: usize,
|
|
pub x20: usize,
|
|
pub x19: usize,
|
|
pub x18: usize,
|
|
pub x17: usize,
|
|
pub x16: usize,
|
|
pub x15: usize,
|
|
pub x14: usize,
|
|
pub x13: usize,
|
|
pub x12: usize,
|
|
pub x11: usize,
|
|
pub x10: usize,
|
|
pub x9: usize,
|
|
pub x8: usize,
|
|
pub x7: usize,
|
|
pub x6: usize,
|
|
pub x5: usize,
|
|
pub x4: usize,
|
|
pub x3: usize,
|
|
pub x2: usize,
|
|
pub x1: usize,
|
|
pub x0: usize,
|
|
}
|
|
|
|
#[macro_export]
|
|
macro_rules! with_exception_stack {
|
|
(|$stack:ident| $code:block) => {{
|
|
let $stack = &mut *$stack;
|
|
(*$stack).scratch.x0 = $code;
|
|
}}
|
|
}
|
|
|
|
function!(clone_ret => {
|
|
"ldp x29, x30, [sp], #16\n",
|
|
"mov sp, x29\n",
|
|
"ret\n",
|
|
});
|