Nothing to see here, move along
1use core::panic::PanicInfo;
2
3#[cfg(not(lancer_test))]
4#[panic_handler]
5fn panic(info: &PanicInfo) -> ! {
6 x86_64::instructions::interrupts::disable();
7 {
8 use core::fmt::Write;
9 let mut w = crate::arch::serial::SerialWriter;
10 let formatted = (|| -> Result<(), core::fmt::Error> {
11 w.write_str("\n")?;
12 lancer_log::format::write_gutter(
13 &mut w,
14 "kern",
15 lancer_log::Severity::Error,
16 format_args!("panic"),
17 crate::log::KLOG_GUTTER,
18 )?;
19 w.write_str("\n")?;
20 match info.location() {
21 Some(loc) => {
22 lancer_log::format::write_continuation(&mut w, crate::log::KLOG_GUTTER)?;
23 writeln!(
24 w,
25 "{}{}:{}{}",
26 lancer_log::color::Fg(lancer_log::palette::PURE_WHITE),
27 loc.file(),
28 loc.line(),
29 lancer_log::color::Reset,
30 )?;
31 }
32 None => {}
33 }
34 lancer_log::format::write_continuation(&mut w, crate::log::KLOG_GUTTER)?;
35 writeln!(
36 w,
37 "{}{}{}",
38 lancer_log::color::Fg(lancer_log::palette::ICE_WHITE),
39 info.message(),
40 lancer_log::color::Reset,
41 )?;
42 Ok(())
43 })();
44 match formatted {
45 Ok(()) => {}
46 Err(_) => {
47 let _ = writeln!(w, "KERNEL PANIC: {}", info);
48 }
49 }
50 }
51 loop {
52 x86_64::instructions::hlt();
53 }
54}
55
56#[cfg(lancer_test)]
57#[panic_handler]
58fn panic(info: &PanicInfo) -> ! {
59 use core::fmt::Write;
60 let mut w = crate::arch::serial::SerialWriter;
61 let (num, name) = crate::test_harness::current();
62 let _ = writeln!(w, "\nnot ok {} - {}", num, name);
63 let _ = lancer_log::format::write_gutter(
64 &mut w,
65 "test",
66 lancer_log::Severity::Error,
67 format_args!("{}", name),
68 crate::log::KLOG_GUTTER,
69 );
70 let _ = w.write_str("\n");
71 match info.location() {
72 Some(loc) => {
73 let _ = lancer_log::format::write_continuation(&mut w, crate::log::KLOG_GUTTER);
74 let _ = writeln!(
75 w,
76 "{}{}:{}{}",
77 lancer_log::color::Fg(lancer_log::palette::PURE_WHITE),
78 loc.file(),
79 loc.line(),
80 lancer_log::color::Reset,
81 );
82 }
83 None => {}
84 }
85 let _ = lancer_log::format::write_continuation(&mut w, crate::log::KLOG_GUTTER);
86 let _ = writeln!(
87 w,
88 "{}{}{}",
89 lancer_log::color::Fg(lancer_log::palette::ICE_WHITE),
90 info.message(),
91 lancer_log::color::Reset,
92 );
93 crate::qemu::exit(crate::qemu::ExitCode::Failure);
94}