Source code
Revision control
Copy as Markdown
Other Tools
use super::CrashContext;
use crate::{
minidump_cpu::{RawContextCPU, FP_REG_COUNT, GP_REG_COUNT},
minidump_format::format,
};
impl CrashContext {
pub fn get_instruction_pointer(&self) -> usize {
self.inner.context.uc_mcontext.pc as usize
}
pub fn get_stack_pointer(&self) -> usize {
self.inner.context.uc_mcontext.sp as usize
}
pub fn fill_cpu_context(&self, out: &mut RawContextCPU) {
out.context_flags = format::ContextFlagsArm64Old::CONTEXT_ARM64_OLD_FULL.bits() as u64;
{
let gregs = &self.inner.context.uc_mcontext;
out.cpsr = gregs.pstate as u32;
out.iregs[..GP_REG_COUNT].copy_from_slice(&gregs.regs[..GP_REG_COUNT]);
out.sp = gregs.sp;
out.pc = gregs.pc;
}
{
let fs = &self.inner.float_state;
out.fpsr = fs.fpsr;
out.fpcr = fs.fpcr;
out.float_regs[..FP_REG_COUNT].copy_from_slice(&fs.vregs[..FP_REG_COUNT]);
}
}
}