diff options
Diffstat (limited to 'kapi/gdb')
| -rw-r--r-- | kapi/gdb/address.py | 15 | ||||
| -rw-r--r-- | kapi/gdb/device.py | 17 |
2 files changed, 22 insertions, 10 deletions
diff --git a/kapi/gdb/address.py b/kapi/gdb/address.py index 24fe681..429db1d 100644 --- a/kapi/gdb/address.py +++ b/kapi/gdb/address.py @@ -1,15 +1,14 @@ import gdb -from teachos import TeachOSBasePrinter -class KapiMemoryAddressPrinter(TeachOSBasePrinter): +class KapiMemoryAddressPrinter(gdb.ValuePrinter): def __init__(self, val): - super().__init__(val) + self.__val = val self.__type = val.type.template_argument(0) def to_string(self): try: - raw_address = int(self.value["m_value"]) + raw_address = int(self.__val["m_value"]) type_string = str(self.__type) if "linear" in type_string: @@ -21,10 +20,12 @@ class KapiMemoryAddressPrinter(TeachOSBasePrinter): return f"{raw_address:#018x}{suffix}" except Exception as e: - return f"{self.value}: {e}" + return f"{self.__val}: {e}" def children(self): 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() + yield ("[bytes]", self.__val["m_value"].cast(pointer_type)) + + def display_hint(self): + return None diff --git a/kapi/gdb/device.py b/kapi/gdb/device.py index b655972..8e515ef 100644 --- a/kapi/gdb/device.py +++ b/kapi/gdb/device.py @@ -1,9 +1,20 @@ import gdb -from teachos import TeachOSBasePrinter -class KapiDevicesDevicePrinter(TeachOSBasePrinter): +class KapiDevicesDevicePrinter(gdb.ValuePrinter): + def __init__(self, val): + self.__val = val + def to_string(self): return ( - f"{self.value['m_name']} @ {self.value['m_major']}:{self.value['m_minor']}" + f"{self.__val['m_name']} @ {self.__val['m_major']}:{self.__val['m_minor']}" ) + + def children(self): + yield ("major", self.__val["m_major"]) + yield ("minor", self.__val["m_minor"]) + yield ("name", self.__val["m_name"]) + yield ("parent", self.__val["m_parent"]) + + def display_hint(self): + return None |
