Skip to content

Commit 351b06c

Browse files
committed
ExceptionFrame: make fmt::Debug print address in hex
1 parent eb311be commit 351b06c

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

cortex-m-rt/src/lib.rs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,28 +384,58 @@
384384

385385
extern crate r0;
386386

387+
use core::fmt;
388+
387389
/// Registers stacked (pushed into the stack) during an exception
388-
#[derive(Clone, Copy, Debug)]
390+
#[derive(Clone, Copy)]
389391
#[repr(C)]
390392
pub struct ExceptionFrame {
391393
/// (General purpose) Register 0
392394
pub r0: u32,
395+
393396
/// (General purpose) Register 1
394397
pub r1: u32,
398+
395399
/// (General purpose) Register 2
396400
pub r2: u32,
401+
397402
/// (General purpose) Register 3
398403
pub r3: u32,
404+
399405
/// (General purpose) Register 12
400406
pub r12: u32,
407+
401408
/// Linker Register
402409
pub lr: u32,
410+
403411
/// Program Counter
404412
pub pc: u32,
413+
405414
/// Program Status Register
406415
pub xpsr: u32,
407416
}
408417

418+
impl fmt::Debug for ExceptionFrame {
419+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
420+
struct Hex(u32);
421+
impl fmt::Debug for Hex {
422+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
423+
write!(f, "0x{:08x}", self.0)
424+
}
425+
}
426+
f.debug_struct("ExceptionFrame")
427+
.field("r0", &Hex(self.r0))
428+
.field("r1", &Hex(self.r1))
429+
.field("r2", &Hex(self.r2))
430+
.field("r3", &Hex(self.r3))
431+
.field("r12", &Hex(self.r12))
432+
.field("lr", &Hex(self.lr))
433+
.field("pc", &Hex(self.pc))
434+
.field("xpsr", &Hex(self.xpsr))
435+
.finish()
436+
}
437+
}
438+
409439
/// Returns a pointer into which the heap can be placed
410440
///
411441
/// The start of the heap is guaranteed to be 4-byte aligned; that is the pointer returned by this

0 commit comments

Comments
 (0)