Fix type of not saved registers.

value_of_register_lazy uses the type of REGNUM in FRAME, but given
multi-arch, the arch of FRAME might be different from the previous
frame's arch, and therefore the type of register REGNUM should be
retrieved from the unwound arch.  This used to be correct before the
previous change.

Tested on x86_64 Fedora 17.

gdb/
2013-11-27  Pedro Alves  <palves@redhat.com>

	* frame-unwind.c (frame_unwind_got_optimized): Use the type of the
	register in the previous frame's arch.
This commit is contained in:
Pedro Alves 2013-11-27 17:55:38 +00:00
parent 6bd273ae45
commit 908fa2aaed
2 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2013-11-27 Pedro Alves <palves@redhat.com>
* frame-unwind.c (frame_unwind_got_optimized): Use the type of the
register in the previous frame's arch.
2013-11-27 Pedro Alves <palves@redhat.com>
* frame-unwind.c (frame_unwind_got_optimized): Return

View File

@ -161,11 +161,18 @@ default_frame_unwind_stop_reason (struct frame_info *this_frame,
struct value *
frame_unwind_got_optimized (struct frame_info *frame, int regnum)
{
struct gdbarch *gdbarch = frame_unwind_arch (frame);
struct type *type = register_type (gdbarch, regnum);
struct value *val;
val = value_of_register_lazy (frame, regnum);
/* Return an lval_register value, so that we print it as
"<not saved>". */
val = allocate_value_lazy (type);
set_value_lazy (val, 0);
set_value_optimized_out (val, 1);
VALUE_LVAL (val) = lval_register;
VALUE_REGNUM (val) = regnum;
VALUE_FRAME_ID (val) = get_frame_id (frame);
return val;
}