1use core::fmt;
9
10use crate::sys;
11
12pub fn debug_put_char(c: u8) {
14 sys::seL4_DebugPutChar(c)
15}
16
17pub struct DebugWrite;
19
20impl fmt::Write for DebugWrite {
21 fn write_str(&mut self, s: &str) -> fmt::Result {
22 for &c in s.as_bytes() {
23 debug_put_char(c)
24 }
25 Ok(())
26 }
27}
28
29#[doc(hidden)]
30pub fn debug_print_helper(args: fmt::Arguments) {
31 fmt::write(&mut DebugWrite, args).unwrap_or_else(|err| {
32 panic!("write error: {:?}", err)
33 })
34}
35
36#[macro_export]
38macro_rules! debug_print {
39 ($($arg:tt)*) => ($crate::_private::printing::debug_print_helper(format_args!($($arg)*)));
40}
41
42#[macro_export]
44macro_rules! debug_println {
45 () => ($crate::debug_println!(""));
46 ($($arg:tt)*) => ($crate::debug_print!("{}\n", format_args!($($arg)*)));
47}
48
49#[doc(hidden)]
50pub mod _private {
51 pub use super::debug_print_helper;
52}