dump_registers and write_crash for armv7 (#393)

* dump_registers and write_crash for armv7

* fmt
This commit is contained in:
Lukas Seidel 2021-12-02 10:28:17 +01:00 committed by GitHub
parent d24989e6ae
commit 8a57361e84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 0 deletions

View File

@ -68,6 +68,34 @@ pub fn dump_registers<W: Write>(
Ok(())
}
/// Write the contens of all important registers
#[cfg(all(target_os = "linux", target_arch = "arm"))]
pub fn dump_registers<W: Write>(
writer: &mut BufWriter<W>,
ucontext: &ucontext_t,
) -> Result<(), std::io::Error> {
write!(writer, "r0 : {:#016x}, ", ucontext.uc_mcontext.arm_r0)?;
write!(writer, "r1 : {:#016x}, ", ucontext.uc_mcontext.arm_r1)?;
write!(writer, "r2: {:#016x}, ", ucontext.uc_mcontext.arm_r2)?;
writeln!(writer, "r3: {:#016x}, ", ucontext.uc_mcontext.arm_r3)?;
write!(writer, "r4: {:#016x}, ", ucontext.uc_mcontext.arm_r4)?;
write!(writer, "r5: {:#016x}, ", ucontext.uc_mcontext.arm_r5)?;
write!(writer, "r6: {:#016x}, ", ucontext.uc_mcontext.arm_r6)?;
writeln!(writer, "r7: {:#016x}, ", ucontext.uc_mcontext.arm_r7)?;
write!(writer, "r8: {:#016x}, ", ucontext.uc_mcontext.arm_r8)?;
write!(writer, "r9: {:#016x}, ", ucontext.uc_mcontext.arm_r9)?;
write!(writer, "r10: {:#016x}, ", ucontext.uc_mcontext.arm_r10)?;
writeln!(writer, "fp: {:#016x}, ", ucontext.uc_mcontext.arm_fp)?;
write!(writer, "ip: {:#016x}, ", ucontext.uc_mcontext.arm_ip)?;
write!(writer, "sp: {:#016x}, ", ucontext.uc_mcontext.arm_sp)?;
write!(writer, "lr: {:#016x}, ", ucontext.uc_mcontext.arm_lr)?;
writeln!(writer, "cpsr: {:#016x}, ", ucontext.uc_mcontext.arm_cpsr)?;
writeln!(writer, "pc : 0x{:016x} ", ucontext.uc_mcontext.arm_pc)?;
Ok(())
}
/// Write the contens of all important registers
#[cfg(all(target_vendor = "apple", target_arch = "aarch64"))]
pub fn dump_registers<W: Write>(
@ -174,6 +202,21 @@ fn write_crash<W: Write>(
Ok(())
}
#[cfg(all(target_os = "linux", target_arch = "arm"))]
fn write_crash<W: Write>(
writer: &mut BufWriter<W>,
signal: Signal,
ucontext: &ucontext_t,
) -> Result<(), std::io::Error> {
writeln!(
writer,
"Received signal {} at 0x{:016x}, fault address: 0x{:016x}",
signal, ucontext.uc_mcontext.arm_pc, ucontext.uc_mcontext.fault_address
)?;
Ok(())
}
#[cfg(all(target_vendor = "apple", target_arch = "aarch64"))]
fn write_crash<W: Write>(
writer: &mut BufWriter<W>,

View File

@ -18,6 +18,8 @@ use std::ffi::CString;
pub use libc::c_ulong;
#[cfg(target_arch = "arm")]
#[allow(non_camel_case_types)]
#[repr(C)]
pub struct mcontext_t {
pub trap_no: c_ulong,
pub error_code: c_ulong,
@ -43,6 +45,8 @@ pub struct mcontext_t {
}
#[cfg(target_arch = "arm")]
#[allow(non_camel_case_types)]
#[repr(C)]
pub struct ucontext_t {
pub uc_flags: u32,
pub uc_link: *mut ucontext_t,