use core::arch::asm; /// arch specific registers #[repr(C)] #[repr(packed)] #[derive(Debug)] pub struct Context64 { pub rbx: u64, pub r12: u64, pub r13: u64, pub r14: u64, pub r15: u64, pub rbp: u64, pub rsp: u64, pub fpu: [u8; 108], } impl Default for Context64 { fn default() -> Context64 { Context64 { rbx: 0, r12: 0, r13: 0, r14: 0, r15: 0, rbp: 0, rsp: 0, fpu: [0; 108], } } } /// arch specific registers #[repr(C)] #[repr(packed)] #[derive(Debug)] pub struct TrapFrame { pub r11: u64, pub r10: u64, pub r9: u64, pub r8: u64, pub rsi: u64, pub rdi: u64, pub rdx: u64, pub rcx: u64, pub rax: u64, pub err_code: u64, } // this will get the current (kernel) stack pointer #[inline] pub fn get_sp() -> u64 { let sp: u64; unsafe { asm!("mov {}, rsp", out(reg) sp); } return sp; }