Commit 7724fca5 authored by Victor Stinner's avatar Victor Stinner

Issue #28023: Fix python-gdb.py on old GDB versions

Replace int(value.address)+offset with value.cast(unsigned char*)+offset.

It seems like int(value.address) fails on old versions of GDB.
parent ad817abb
...@@ -709,6 +709,7 @@ class PyDictObjectPtr(PyObjectPtr): ...@@ -709,6 +709,7 @@ class PyDictObjectPtr(PyObjectPtr):
out.write('}') out.write('}')
def _get_entries(self, keys): def _get_entries(self, keys):
dk_nentries = int(keys['dk_nentries'])
dk_size = int(keys['dk_size']) dk_size = int(keys['dk_size'])
try: try:
# <= Python 3.5 # <= Python 3.5
...@@ -726,9 +727,12 @@ class PyDictObjectPtr(PyObjectPtr): ...@@ -726,9 +727,12 @@ class PyDictObjectPtr(PyObjectPtr):
else: else:
offset = 8 * dk_size 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_ptr_t = gdb.lookup_type('PyDictKeyEntry').pointer()
ent_addr = int(keys['dk_indices']['as_1'].address) + offset ent_addr = ent_addr.cast(ent_ptr_t)
return gdb.Value(ent_addr).cast(ent_ptr_t), int(keys['dk_nentries'])
return ent_addr, dk_nentries
class PyListObjectPtr(PyObjectPtr): class PyListObjectPtr(PyObjectPtr):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment