INNER CODE UNIT · Python

children

SpartanJ/eepp · projects/scripts/debug/eepp_gdb.py:33

    def children(self):
        # We need a char pointer type to do proper byte-level pointer math
        char_ptr_type = gdb.lookup_type("char").pointer()
        align_t = self.type_t.alignof

        if self.is_direct():
            size = int(self.m_data[0]) >> 1
            base_addr = self.m_data.address.cast(char_ptr_type)
            data_ptr = (base_addr + align_t).cast(self.type_t.pointer())
        else:
            void_ptr = self.m_data.address.cast(
                gdb.lookup_type("void").pointer().pointer()
            ).dereference()

            storage_ptr = void_ptr.cast(
                gdb.lookup_type(f"ankerl::v1_0_3::detail::storage<{self.type_t}>").pointer()
            )
            size = int(storage_ptr["m_size"])

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…