[gdb/python] Make gdb.UnwindInfo.add_saved_register more robust (fixup)

In commit 2236c5e384 ("[gdb/python] Make gdb.UnwindInfo.add_saved_register
more robust") I added this code in unwind_infopy_add_saved_register:
...
  if (value->optimized_out () || !value->entirely_available ())
...
which may throw c++ exceptions.

This needs to be caught and transformed into a python exception.

Fix this by using GDB_PY_HANDLE_EXCEPTION.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>

Fixes: 2236c5e384 ("[gdb/python] Make gdb.UnwindInfo.add_saved_register more robust")
This commit is contained in:
Tom de Vries 2024-05-10 08:46:21 +02:00
parent 65924bda46
commit 408bc9c5fc

View file

@ -361,16 +361,24 @@ unwind_infopy_add_saved_register (PyObject *self, PyObject *args, PyObject *kw)
return nullptr;
}
if (value->optimized_out () || !value->entirely_available ())
try
{
/* If we allow this value to be registered here, pyuw_sniffer is going
to run into an exception when trying to access its contents.
Throwing an exception here just puts a burden on the user to
implement the same checks on the user side. We could return False
here and True otherwise, but again that might require changes in user
code. So, handle this with minimal impact for the user, while
improving robustness: silently ignore the register/value pair. */
Py_RETURN_NONE;
if (value->optimized_out () || !value->entirely_available ())
{
/* If we allow this value to be registered here, pyuw_sniffer is going
to run into an exception when trying to access its contents.
Throwing an exception here just puts a burden on the user to
implement the same checks on the user side. We could return False
here and True otherwise, but again that might require changes in
user code. So, handle this with minimal impact for the user, while
improving robustness: silently ignore the register/value pair. */
Py_RETURN_NONE;
}
}
catch (const gdb_exception &except)
{
GDB_PY_HANDLE_EXCEPTION (except);
}
gdbpy_ref<> new_value = gdbpy_ref<>::new_reference (pyo_reg_value);