]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #28023: Fix python-gdb.py on old GDB versions
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 22 Nov 2016 12:09:39 +0000 (13:09 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 22 Nov 2016 12:09:39 +0000 (13:09 +0100)
Replace int(value.address)+offset with value.cast(unsigned char*)+offset.

It seems like int(value.address) fails on old versions of GDB.

Tools/gdb/libpython.py

index 964cc9f22a46dad0f61c141ec3c986fe7fb61e16..e4d2c1ec4c3430d8aef7c89f3e81723076eba225 100755 (executable)
@@ -709,6 +709,7 @@ class PyDictObjectPtr(PyObjectPtr):
         out.write('}')
 
     def _get_entries(self, keys):
+        dk_nentries = int(keys['dk_nentries'])
         dk_size = int(keys['dk_size'])
         try:
             # <= Python 3.5
@@ -726,9 +727,12 @@ class PyDictObjectPtr(PyObjectPtr):
         else:
             offset = 8 * dk_size
 
+        ent_addr = keys['dk_indices']['as_1'].address
+        ent_addr = ent_addr.cast(_type_unsigned_char_ptr()) + offset
         ent_ptr_t = gdb.lookup_type('PyDictKeyEntry').pointer()
-        ent_addr = int(keys['dk_indices']['as_1'].address) + offset
-        return gdb.Value(ent_addr).cast(ent_ptr_t), int(keys['dk_nentries'])
+        ent_addr = ent_addr.cast(ent_ptr_t)
+
+        return ent_addr, dk_nentries
 
 
 class PyListObjectPtr(PyObjectPtr):