]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-146462: Add dict introspection debug offsets (#148633)
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Mon, 4 May 2026 23:00:23 +0000 (00:00 +0100)
committerGitHub <noreply@github.com>
Mon, 4 May 2026 23:00:23 +0000 (23:00 +0000)
Include/internal/pycore_debug_offsets.h
Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-12-00-00.gh-issue-146462.1YfK6v.rst [new file with mode: 0644]
Modules/_remote_debugging/debug_offsets_validation.h

index 1dd10f8d94cfd850f47dc8c290409ba51f66dbb8..18490f98a918a73fc93556a2ec1094c5db96b521 100644 (file)
@@ -158,8 +158,16 @@ typedef struct _Py_DebugOffsets {
         uint64_t tp_name;
         uint64_t tp_repr;
         uint64_t tp_flags;
+        uint64_t tp_basicsize;
+        uint64_t tp_dictoffset;
     } type_object;
 
+    // PyHeapTypeObject offset;
+    struct _heap_type_object {
+        uint64_t size;
+        uint64_t ht_cached_keys;
+    } heap_type_object;
+
     // PyTuple object offset;
     struct _tuple_object {
         uint64_t size;
@@ -330,6 +338,12 @@ typedef struct _Py_DebugOffsets {
         .tp_name = offsetof(PyTypeObject, tp_name), \
         .tp_repr = offsetof(PyTypeObject, tp_repr), \
         .tp_flags = offsetof(PyTypeObject, tp_flags), \
+        .tp_basicsize = offsetof(PyTypeObject, tp_basicsize), \
+        .tp_dictoffset = offsetof(PyTypeObject, tp_dictoffset), \
+    }, \
+    .heap_type_object = { \
+        .size = sizeof(PyHeapTypeObject), \
+        .ht_cached_keys = offsetof(PyHeapTypeObject, ht_cached_keys), \
     }, \
     .tuple_object = { \
         .size = sizeof(PyTupleObject), \
diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-12-00-00.gh-issue-146462.1YfK6v.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-04-15-12-00-00.gh-issue-146462.1YfK6v.rst
new file mode 100644 (file)
index 0000000..44019b7
--- /dev/null
@@ -0,0 +1,3 @@
+Added ``PyTypeObject.tp_basicsize``, ``PyTypeObject.tp_dictoffset``, and
+``PyHeapTypeObject.ht_cached_keys`` offsets to :c:type:`!_Py_DebugOffsets` to
+support version-independent read-only dict introspection tools.
index 1507026306192e3a58eef67b8a1357030e786fbf..f070f03ac459dcd66769c605b045ae6f59a78f3e 100644 (file)
@@ -31,7 +31,7 @@
 #define FIELD_SIZE(type, member) sizeof(((type *)0)->member)
 
 enum {
-    PY_REMOTE_DEBUG_OFFSETS_TOTAL_SIZE = 848,
+    PY_REMOTE_DEBUG_OFFSETS_TOTAL_SIZE = 880,
     PY_REMOTE_ASYNC_DEBUG_OFFSETS_TOTAL_SIZE = 104,
 };