aboutsummaryrefslogtreecommitdiff
path: root/kapi
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-05-04 08:20:42 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-05-04 08:20:42 +0200
commit1246e00478fb5ab2a357de17066fd8738395d9f1 (patch)
tree940aee5a7fbd2f980aaf233c8837220fbe8ab4ae /kapi
parent3ab0a15fb6aba0ad9516da69589b9da8dbd63a8e (diff)
downloadkernel-1246e00478fb5ab2a357de17066fd8738395d9f1.tar.xz
kernel-1246e00478fb5ab2a357de17066fd8738395d9f1.zip
debug: split gdb modules
Diffstat (limited to 'kapi')
-rw-r--r--kapi/gdb/__init__.py15
-rw-r--r--kapi/gdb/address.py33
2 files changed, 48 insertions, 0 deletions
diff --git a/kapi/gdb/__init__.py b/kapi/gdb/__init__.py
new file mode 100644
index 0000000..c37c7b7
--- /dev/null
+++ b/kapi/gdb/__init__.py
@@ -0,0 +1,15 @@
+import gdb.printing
+
+from .address import KapiMemoryAddressPrinter
+
+
+def build_pretty_printers():
+ pp = gdb.printing.RegexpCollectionPrettyPrinter("kapi")
+ pp.add_printer(
+ "kapi_memory_address", "^kapi::memory::address<.*>$", KapiMemoryAddressPrinter
+ )
+ return pp
+
+
+def register_printers(objfile):
+ gdb.printing.register_pretty_printer(objfile, build_pretty_printers(), replace=True)
diff --git a/kapi/gdb/address.py b/kapi/gdb/address.py
new file mode 100644
index 0000000..677c9aa
--- /dev/null
+++ b/kapi/gdb/address.py
@@ -0,0 +1,33 @@
+import gdb
+
+
+class KapiMemoryAddressPrinter:
+ """Print kapi::MemoryAddress."""
+
+ def __init__(self, val):
+ self.val = val
+ self.address_type = val.type.template_argument(0)
+
+ def to_string(self):
+ try:
+ raw_address = int(self.val["m_value"])
+ type_string = str(self.address_type)
+
+ if "linear" in type_string:
+ suffix = "%lin"
+ elif "physical" in type_string:
+ suffix = "%phy"
+ else:
+ suffix = "%???"
+
+ return f"{raw_address:#018x}{suffix}"
+ except Exception as e:
+ return f"{self.val}: {e}"
+
+ def children(self):
+ if "linear" in str(self.address_type):
+ yield (
+ "std::byte *",
+ self.val["m_value"].cast(gdb.lookup_type("std::byte").pointer()),
+ )
+ yield ("m_value", self.val["m_value"])