summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-11-22 12:09:39 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-11-22 12:09:39 (GMT)
commit3a5d79fbc87a70e733edc2de1bed35f6e14000a4 (patch)
tree6ea0c9f3f22e38045c82393c0093ebad57cfadd1 /Tools
parentd7d2bc8798da3b083e383e949ba01d61b78e4e4d (diff)
downloadcpython-3a5d79fbc87a70e733edc2de1bed35f6e14000a4.zip
cpython-3a5d79fbc87a70e733edc2de1bed35f6e14000a4.tar.gz
cpython-3a5d79fbc87a70e733edc2de1bed35f6e14000a4.tar.bz2
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.
Diffstat (limited to 'Tools')
-rwxr-xr-xTools/gdb/libpython.py8
1 files changed, 6 insertions, 2 deletions
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py
index 964cc9f..e4d2c1e 100755
--- a/Tools/gdb/libpython.py
+++ b/Tools/gdb/libpython.py
@@ -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):