aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib.rs8
-rw-r--r--src/panic.rs22
2 files changed, 23 insertions, 7 deletions
diff --git a/src/lib.rs b/src/lib.rs
index ca5c249..618bed9 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -11,14 +11,8 @@ pub mod gfx;
pub mod sdmc;
pub mod services;
+pub mod panic;
pub use srv::Srv;
pub use gfx::Gfx;
pub use sdmc::Sdmc;
-
-#[lang = "eh_personality"]
-extern "C" fn eh_personality() {}
-#[lang = "panic_fmt"]
-fn panic_fmt() -> ! {
- unsafe { libctru::libc::abort() }
-}
diff --git a/src/panic.rs b/src/panic.rs
new file mode 100644
index 0000000..c0e4d0a
--- /dev/null
+++ b/src/panic.rs
@@ -0,0 +1,22 @@
+use core::fmt::{Arguments, Write};
+
+#[lang = "eh_personality"]
+extern "C" fn eh_personality() {}
+
+#[lang = "panic_fmt"]
+extern fn panic_fmt(fmt: Arguments, file: &str, line: u32) -> ! {
+ use gfx::Screen;
+ use console::Console;
+
+ let mut error_top = Console::init(Screen::Top);
+ let mut error_bottom = Console::init(Screen::Bottom);
+
+ writeln!(error_top, "--------------------------------------------------").unwrap();
+ writeln!(error_top, "PANIC in {} at line {}:", file, line).unwrap();
+ writeln!(error_top, " {}", fmt).unwrap();
+ write!(error_top, "\x1b[29;00H--------------------------------------------------").unwrap();
+
+ writeln!(error_bottom, "").unwrap();
+
+ loop {}
+}