307b5f31cf4a713c38ce8354e01a17bb32896b40
[lunaix-os.git] / lunaix-os / scripts / gdb / lunadbg / syslog.py
1 import gdb
2 from .symbols import LunaixSymbols, SymbolDomain
3 from .utils import llist_foreach
4
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"]
10
11     def syslog_entry_callback(self, idx, ent):
12         time = ent["time"]
13         lvl = ent["lvl"]
14         log = ent["content"]
15
16         time_str = "%04d.%03d"%(int(time / 1000), time % 1000)
17         print(f"[{time_str}] <L{self.log_level[lvl]}> {log.string()}")
18
19     def invoke(self, argument: str, from_tty: bool) -> None:
20         log_recs = LunaixSymbols.exported(SymbolDomain.DEBUG, "kprecs")
21         head = log_recs.deref_and_access("kp_ents.ents").address
22
23         ent_type = gdb.lookup_type("struct kp_entry").pointer()
24         llist_foreach(head, ent_type, lambda a,b: self.syslog_entry_callback(a, b))