twizzler_abi/
klog.rs

1//! Utilities that enable formatted printing for early runtime init.
2
3use core::fmt;
4
5use crate::syscall::{sys_kernel_console_write, KernelConsoleSource, KernelConsoleWriteFlags};
6
7#[repr(C)]
8struct KernelLogger;
9
10impl fmt::Write for KernelLogger {
11    fn write_str(&mut self, s: &str) -> fmt::Result {
12        sys_kernel_console_write(
13            KernelConsoleSource::Console,
14            s.as_bytes(),
15            KernelConsoleWriteFlags::empty(),
16        );
17        Ok(())
18    }
19}
20
21#[doc(hidden)]
22pub fn _print_normal(args: core::fmt::Arguments) {
23    use fmt::Write;
24    let _ = KernelLogger.write_fmt(args);
25}
26
27#[macro_export]
28macro_rules! klog_print {
29    ($($arg:tt)*) => {
30        $crate::klog::_print_normal(format_args!($($arg)*))
31    };
32}
33
34#[macro_export]
35macro_rules! klog_println {
36    () => {
37        $crate::klog_print!("\n")
38    };
39    ($fmt:expr) => {
40        $crate::klog_print!(concat!($fmt, "\n"))
41    };
42    ($fmt:expr, $($arg:tt)*) => {
43        $crate::klog_print!(concat!($fmt, "\n"), $($arg)*)
44    };
45}