gdb: xtensa: fix frame initialization when PC is invalid
When gdb is used on core dump and PC is not pointing to a readable memory read_memory_integer call in the xtensa_frame_cache throws an error, making register inspection/backtracing impossible in that thread. Use safe_read_memory_integer instead. 2016-03-29 Max Filippov <jcmvbkbc@gmail.com> gdb/ * xtensa-tdep.c (xtensa_frame_cache): Change op1 type to LONGEST. Use safe_read_memory_integer instead of read_memory_integer.
This commit is contained in:
parent
c37c0ba69b
commit
a08b52b5c4
@ -1,3 +1,8 @@
|
||||
2016-03-29 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* xtensa-tdep.c (xtensa_frame_cache): Change op1 type to LONGEST.
|
||||
Use safe_read_memory_integer instead of read_memory_integer.
|
||||
|
||||
2016-03-29 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* NEWS: Mention support for tracepoints on s390*-linux.
|
||||
|
@ -1285,7 +1285,7 @@ xtensa_frame_cache (struct frame_info *this_frame, void **this_cache)
|
||||
|
||||
if (windowed)
|
||||
{
|
||||
char op1;
|
||||
LONGEST op1;
|
||||
|
||||
/* Get WINDOWBASE, WINDOWSTART, and PS registers. */
|
||||
wb = get_frame_register_unsigned (this_frame,
|
||||
@ -1293,8 +1293,8 @@ xtensa_frame_cache (struct frame_info *this_frame, void **this_cache)
|
||||
ws = get_frame_register_unsigned (this_frame,
|
||||
gdbarch_tdep (gdbarch)->ws_regnum);
|
||||
|
||||
op1 = read_memory_integer (pc, 1, byte_order);
|
||||
if (XTENSA_IS_ENTRY (gdbarch, op1))
|
||||
if (safe_read_memory_integer (pc, 1, byte_order, &op1)
|
||||
&& XTENSA_IS_ENTRY (gdbarch, op1))
|
||||
{
|
||||
int callinc = CALLINC (ps);
|
||||
ra = get_frame_register_unsigned
|
||||
|
Loading…
x
Reference in New Issue
Block a user