diff options
Diffstat (limited to 'kapi')
| -rw-r--r-- | kapi/gdb/__init__.py | 4 | ||||
| -rw-r--r-- | kapi/gdb/address.py | 25 | ||||
| -rw-r--r-- | kapi/gdb/device.py | 9 |
3 files changed, 24 insertions, 14 deletions
diff --git a/kapi/gdb/__init__.py b/kapi/gdb/__init__.py index c37c7b7..ce95628 100644 --- a/kapi/gdb/__init__.py +++ b/kapi/gdb/__init__.py @@ -1,6 +1,7 @@ import gdb.printing from .address import KapiMemoryAddressPrinter +from .device import KapiDevicesDevicePrinter def build_pretty_printers(): @@ -8,6 +9,9 @@ def build_pretty_printers(): pp.add_printer( "kapi_memory_address", "^kapi::memory::address<.*>$", KapiMemoryAddressPrinter ) + pp.add_printer( + "kapi_devices_device", "^kapi::devices::device$", KapiDevicesDevicePrinter + ) return pp diff --git a/kapi/gdb/address.py b/kapi/gdb/address.py index 677c9aa..24fe681 100644 --- a/kapi/gdb/address.py +++ b/kapi/gdb/address.py @@ -1,17 +1,16 @@ import gdb +from teachos import TeachOSBasePrinter -class KapiMemoryAddressPrinter: - """Print kapi::MemoryAddress.""" - +class KapiMemoryAddressPrinter(TeachOSBasePrinter): def __init__(self, val): - self.val = val - self.address_type = val.type.template_argument(0) + super().__init__(val) + self.__type = val.type.template_argument(0) def to_string(self): try: - raw_address = int(self.val["m_value"]) - type_string = str(self.address_type) + raw_address = int(self.value["m_value"]) + type_string = str(self.__type) if "linear" in type_string: suffix = "%lin" @@ -22,12 +21,10 @@ class KapiMemoryAddressPrinter: return f"{raw_address:#018x}{suffix}" except Exception as e: - return f"{self.val}: {e}" + return f"{self.value}: {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"]) + if "linear" in str(self.__type): + pointer_type = gdb.lookup_type("std::byte").pointer() + yield ("[bytes]", self.value["m_value"].cast(pointer_type)) + yield from super().children() diff --git a/kapi/gdb/device.py b/kapi/gdb/device.py new file mode 100644 index 0000000..b655972 --- /dev/null +++ b/kapi/gdb/device.py @@ -0,0 +1,9 @@ +import gdb +from teachos import TeachOSBasePrinter + + +class KapiDevicesDevicePrinter(TeachOSBasePrinter): + def to_string(self): + return ( + f"{self.value['m_name']} @ {self.value['m_major']}:{self.value['m_minor']}" + ) |
