panicdump/
lib.rs

1#![no_std]
2#![allow(clippy::empty_loop)]
3#![deny(warnings)]
4
5use core::fmt::Write;
6use core::panic::PanicInfo;
7use cortex_m::interrupt;
8
9struct RAM
10{
11	offset: u32,
12}
13impl core::fmt::Write for RAM
14{
15	fn write_str(&mut self, s: &str) -> Result<(), core::fmt::Error>
16	{
17		extern "C"
18		{
19			static mut __sbss: u8;
20		}
21		let dat = s.as_bytes();
22		let len = dat.len();
23		unsafe
24		{
25			core::ptr::copy(
26				dat.as_ptr() as *mut u8,
27				(&mut __sbss as *mut u8).offset(self.offset as isize),
28				len
29			)
30		};
31		self.offset += len as u32;
32		Ok(())
33	}
34}
35//This should be removed if the kernel has a panic-handler built-in.
36#[panic_handler]
37fn panic(info: &PanicInfo) -> ! 
38{
39	interrupt::disable();
40	writeln!(RAM { offset: 0 }, "{}", info).ok();
41	loop {}
42}