summaryrefslogtreecommitdiff
path: root/kernel/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/lib.rs')
-rw-r--r--kernel/src/lib.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/kernel/src/lib.rs b/kernel/src/lib.rs
index 48cb93d..8d2eee2 100644
--- a/kernel/src/lib.rs
+++ b/kernel/src/lib.rs
@@ -16,6 +16,8 @@ pub extern "C" fn _start() -> ! {
write!(&mut stdout, "hello world!");
+ panic!("i has panicing");
+
core::iter::successors(Some(0), |n| Some(n + 1))
.for_each(|n|
write!(&mut stdout, "hello world {}!", n).unwrap()
@@ -27,5 +29,21 @@ pub extern "C" fn _start() -> ! {
#[panic_handler]
#[no_mangle]
pub extern "C" fn panic_handler(_info: &core::panic::PanicInfo) -> ! {
+ let mut stderr = vga_text::OStream::new();
+ stderr.set_state(vga_text::CharState::from_colors(
+ vga_text::Color::LightRed, vga_text::Color::Red));
+ stderr.clear();
+ stderr.print(b"uff-os");
+ stderr.set_row(10);
+ stderr.set_state(vga_text::CharState::from_colors(
+ vga_text::Color::White, vga_text::Color::Red));
+ stderr.print_centered(b"<kernel panic>");
+ stderr.set_row(14);
+ let text = _info.payload()
+ .downcast_ref::<&str>()
+ .unwrap_or(&"no panic informations are obtainable");
+ stderr.set_state(vga_text::CharState::from_colors(
+ vga_text::Color::Cyan, vga_text::Color::Red));
+ stderr.print_centered(text.as_bytes());
loop {}
}