class PageStruct(KernelStruct):
def __init__(self, gdb_inferior: Value) -> None:
super().__init__(gdb_inferior, PageStruct)
- self.ref = self._kstruct["ref_counts"]
- self.attr = self._kstruct["attr"]
+ self.ref = self._kstruct["refs"]
+ self.type = self._kstruct["type"]
+ self.flags = self._kstruct["flags"]
+ self.order = self._kstruct["order"]
+ self.pool = self._kstruct["pool"]
+
+ def uninitialized(self):
+ return not (self.flags & 0b10)
+
+ def reserved(self):
+ return (not self.uninitialized()
+ and self.type == 0b1000
+ and self.ref == 0xf0f0f0f0)
+
+ def busy(self):
+ return (not self.uninitialized()
+ and self.ref > 0)
@staticmethod
def get_type() -> Type:
- return lookup_type("struct pp_struct").pointer()
+ return lookup_type("struct ppage").pointer()