50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
use crate::holeybytes::{kernel_services::block_read, Vm};
|
|
|
|
#[derive(Debug)]
|
|
pub enum LogError {
|
|
InvalidLogFormat,
|
|
}
|
|
use log::Record;
|
|
|
|
pub fn log_msg_handler(_vm: &mut Vm, mem_addr: u64, length: usize) -> Result<(), LogError> {
|
|
let msg_vec = block_read(mem_addr, length);
|
|
|
|
let log_level = msg_vec.last().unwrap();
|
|
|
|
let file_name = "None";
|
|
let line_number = 0;
|
|
|
|
match core::str::from_utf8(&msg_vec[..msg_vec.len()]) {
|
|
Ok(strr) => {
|
|
use log::Level::*;
|
|
let log_level = match log_level {
|
|
0 | 48 => Error,
|
|
1 | 49 => Warn,
|
|
2 | 50 => Info,
|
|
3 | 51 => Debug,
|
|
4 | 52 => Trace,
|
|
_ => {
|
|
return Err(LogError::InvalidLogFormat);
|
|
}
|
|
};
|
|
|
|
log::logger().log(
|
|
&Record::builder()
|
|
.args(format_args!("{}", strr))
|
|
.level(log_level)
|
|
.target("Userspace")
|
|
.file(Some(file_name))
|
|
.line(Some(line_number))
|
|
.module_path(Some(&file_name))
|
|
.build(),
|
|
);
|
|
}
|
|
|
|
Err(e) => {
|
|
log::error!("{:?}", e);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|