Skip to content

Commit

Permalink
pythongh-115999: Fix gdb support for libpython.so after thread-local …
Browse files Browse the repository at this point in the history
…bytecode change (python#126440)

Fix the gdb pretty printer in the face of --enable-shared by delaying the attempt to load the _PyInterpreterFrame definition until after .so files are loaded.
  • Loading branch information
Yhg1s authored Nov 5, 2024
1 parent 7587260 commit bbfd9c9
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions Tools/gdb/libpython.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,14 @@ def _managed_dict_offset():
else:
return -3 * _sizeof_void_p()

def _interp_frame_has_tlbc_index():
interp_frame = gdb.lookup_type("_PyInterpreterFrame")
return any(field.name == "tlbc_index" for field in interp_frame.fields())

_INTERP_FRAME_HAS_TLBC_INDEX = None
def interp_frame_has_tlbc_index():
global _INTERP_FRAME_HAS_TLBC_INDEX
if _INTERP_FRAME_HAS_TLBC_INDEX is None:
interp_frame = gdb.lookup_type("_PyInterpreterFrame")
_INTERP_FRAME_HAS_TLBC_INDEX = any(field.name == "tlbc_index"
for field in interp_frame.fields())
return _INTERP_FRAME_HAS_TLBC_INDEX

Py_TPFLAGS_INLINE_VALUES = (1 << 2)
Py_TPFLAGS_MANAGED_DICT = (1 << 4)
Expand Down Expand Up @@ -109,7 +113,6 @@ def _interp_frame_has_tlbc_index():
UNABLE_READ_INFO_PYTHON_FRAME = 'Unable to read information on python frame'
EVALFRAME = '_PyEval_EvalFrameDefault'

INTERP_FRAME_HAS_TLBC_INDEX = _interp_frame_has_tlbc_index()

class NullPyObjectPtr(RuntimeError):
pass
Expand Down Expand Up @@ -1101,7 +1104,7 @@ def _f_nlocalsplus(self):
def _f_lasti(self):
codeunit_p = gdb.lookup_type("_Py_CODEUNIT").pointer()
instr_ptr = self._gdbval["instr_ptr"]
if INTERP_FRAME_HAS_TLBC_INDEX:
if interp_frame_has_tlbc_index():
tlbc_index = self._gdbval["tlbc_index"]
code_arr = PyCodeArrayPtr(self._f_code().field("co_tlbc"))
first_instr = code_arr.get_entry(tlbc_index).cast(codeunit_p)
Expand Down

0 comments on commit bbfd9c9

Please sign in to comment.