2 from .symbols import LunaixSymbols, SymbolDomain
3 from .utils import llist_foreach
5 class SysLogDump(gdb.Command):
6 """Dump the system log"""
7 def __init__(self) -> None:
8 super().__init__("syslog", gdb.COMMAND_USER)
9 self.log_level = ["debug", "info", "warn", "error", "fatal"]
11 def syslog_entry_callback(self, idx, ent):
16 time_str = "%04d.%03d"%(int(time / 1000), time % 1000)
17 print(f"[{time_str}] <L{self.log_level[lvl]}> {log.string()}")
19 def invoke(self, argument: str, from_tty: bool) -> None:
20 log_recs = LunaixSymbols.exported(SymbolDomain.DEBUG, "kprintf", "kprecs")
21 head = log_recs.deref_and_access("kp_ents.ents").address
23 ent_type = gdb.lookup_type("struct kp_entry").pointer()
24 llist_foreach(head, ent_type, "ents", lambda a,b: self.syslog_entry_callback(a, b))