Make gdb.PendingFrame.read_register handle "user" registers.
The C function, pending_framepy_read_register(), which implements the python interface gdb.PendingFrame.read_register does not handle the so called "user" registers like "pc". An assertion error is triggered due to the user registers having numbers larger than or equal to gdbarch_num_regs(gdbarch). With the VALUE_FRAME_ID tweak in place, the call to get_frame_register_value() can simply be replaced by a call to value_of_register(), which handles both real registers as well as the user registers. gdb/ChangeLog: * python/py-unwind.c (pending_framepy_read_register): Use value_of_register() instead of get_frame_register_value().
This commit is contained in:
parent
41b56feb50
commit
33cc7d368f
2 changed files with 11 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2016-11-16 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
|
* python/py-unwind.c (pending_framepy_read_register): Use
|
||||||
|
value_of_register() instead of get_frame_register_value().
|
||||||
|
|
||||||
2016-11-16 Kevin Buettner <kevinb@redhat.com>
|
2016-11-16 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
* value.h (VALUE_FRAME_ID): Rename to VALUE_NEXT_FRAME_ID. Update
|
* value.h (VALUE_FRAME_ID): Rename to VALUE_NEXT_FRAME_ID. Update
|
||||||
|
|
|
@ -407,7 +407,12 @@ pending_framepy_read_register (PyObject *self, PyObject *args)
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
{
|
{
|
||||||
val = get_frame_register_value (pending_frame->frame_info, regnum);
|
/* Fetch the value associated with a register, whether it's
|
||||||
|
a real register or a so called "user" register, like "pc",
|
||||||
|
which maps to a real register. In the past,
|
||||||
|
get_frame_register_value() was used here, which did not
|
||||||
|
handle the user register case. */
|
||||||
|
val = value_of_register (regnum, pending_frame->frame_info);
|
||||||
if (val == NULL)
|
if (val == NULL)
|
||||||
PyErr_Format (PyExc_ValueError,
|
PyErr_Format (PyExc_ValueError,
|
||||||
"Cannot read register %d from frame.",
|
"Cannot read register %d from frame.",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue