Files
RedBear-OS/src/panic.rs
T
2026-07-06 16:08:59 +07:00

38 lines
989 B
Rust

use core::fmt::Write;
#[unsafe(no_mangle)]
pub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! {
use core::fmt::Write;
let mut w = PanicWriter::new();
let _ = w.write_fmt(format_args!("RELIBC PANIC: {}\n", pi));
core::intrinsics::abort();
}
struct PanicWriter;
impl PanicWriter {
pub fn new() -> Self {
Self
}
}
impl Write for PanicWriter {
fn write_str(&mut self, s: &str) -> core::fmt::Result {
// Cannot use Sys::write, Tcb might not be available
#[cfg(target_os = "redox")]
{
// TODO: init stderr ourself if it not ready.
// Workaround: If stderr is not being prepared,
// add debugging log at kernel write() syscall
let _ = syscall::write(2, s.as_bytes());
return Ok(());
}
// Non-redox platforms can directly write to stderr
let mut w = crate::platform::FileWriter::new(2);
w.write_str(s)
}
}