diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-11-22 13:09:39 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-11-22 13:09:39 +0100 |
commit | c8ba79fbe8f2a19d4f60fec1b50fa1acf922bbf9 (patch) | |
tree | 1a6c7a3496745706fdcb6ab065975d4dc008f9d3 /Tools/gdb/libpython.py | |
parent | 3048149b67ba04d150c6e6303d3d1b7fea73e467 (diff) | |
download | cpython-c8ba79fbe8f2a19d4f60fec1b50fa1acf922bbf9.tar.gz |
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/gdb/libpython.py')
-rwxr-xr-x | Tools/gdb/libpython.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 964cc9f22a..e4d2c1ec4c 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): |