aboutsummaryrefslogtreecommitdiff
path: root/kapi/gdb/memory/chunk.py
blob: 74b1407f3e9dc4ffa350fc1ce7dcfc9adf3b01eb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import gdb
from teachos import format_size


class KapiMemoryChunkPrinter(gdb.ValuePrinter):

    def __init__(self, val: gdb.Value, typename="chunk"):
        self.__val = val
        try:
            self.__number = int(val["m_number"])
        except gdb.error:
            self.__number = "<number unreadable>"

        try:
            self.__size = int(gdb.parse_and_eval(f"{val.type.name}::size")["value"])
        except gdb.error:
            self.__size = "<size unreadable>"

        self.__typename = typename

    def to_string(self):
        return f"{self.__typename} {self.__number} of size {format_size(self.__size)}"

    def children(self):
        yield ("number", self.__number)
        yield ("size", self.__size)

    def display_hint(self):
        return None


class KapiMemoryFramePrinter(KapiMemoryChunkPrinter):

    def __init__(self, val):
        super().__init__(val, "frame")


class KapiMemoryPagePrinter(KapiMemoryChunkPrinter):

    def __init__(self, val):
        super().__init__(val, "page")