def pfn_to_page(cls, pfn: int) -> gdb.Value:
        if cls.sparsemem:
            section_nr = pfn >> (cls.SECTION_SIZE_BITS - cls.PAGE_SHIFT)
            root_idx = section_nr // cls.SECTIONS_PER_ROOT
            offset = section_nr & (cls.SECTIONS_PER_ROOT - 1)
            section = symvals.mem_section[root_idx][offset]

            pagemap = section["section_mem_map"] & ~3
            return (pagemap.cast(types.page_type.pointer()) + pfn).dereference()

        # pylint doesn't have the visibility it needs to evaluate this
        # pylint: disable=unsubscriptable-object
        return cls.vmemmap[pfn]