[gdb/python] Make gdb.UnwindInfo.add_saved_register more robust (fixup)
In commit2236c5e384
("[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:
parent
65924bda46
commit
408bc9c5fc
1 changed files with 17 additions and 9 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue