Restrict m68k_convert_register_p
We need to convert register if the type is float. Suppose we get a value from float point register, but its type is integer, we don't have to convert. This case may not exist in real code, but exist in my unit test case. warning: Cannot convert floating-point register value to non-floating-point type. Self test failed: arch m68k: self-test failed at gdb/git/gdb/findvar.c:1072 ok = gdbarch_register_to_value (gdbarch, frame, regnum, type, buf.data (), &optim, &unavail); 1072: SELF_CHECK (ok); gdb: 2017-05-24 Yao Qi <yao.qi@linaro.org> * m68k-tdep.c (m68k_convert_register_p): Check type's code is TYPE_CODE_FLT or not.
This commit is contained in:
parent
cdd238daf9
commit
e3ec9b69cd
2 changed files with 9 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2017-05-24 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* m68k-tdep.c (m68k_convert_register_p): Check type's code is
|
||||
TYPE_CODE_FLT or not.
|
||||
|
||||
2017-05-24 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* alpha-tdep.c (alpha_gdbarch_init): Use XCNEW instead of XNEW.
|
||||
|
|
|
@ -188,6 +188,8 @@ m68k_convert_register_p (struct gdbarch *gdbarch,
|
|||
if (!gdbarch_tdep (gdbarch)->fpregs_present)
|
||||
return 0;
|
||||
return (regnum >= M68K_FP0_REGNUM && regnum <= M68K_FP0_REGNUM + 7
|
||||
/* We only support floating-point values. */
|
||||
&& TYPE_CODE (type) == TYPE_CODE_FLT
|
||||
&& type != register_type (gdbarch, M68K_FP0_REGNUM));
|
||||
}
|
||||
|
||||
|
@ -200,19 +202,9 @@ m68k_register_to_value (struct frame_info *frame, int regnum,
|
|||
int *optimizedp, int *unavailablep)
|
||||
{
|
||||
gdb_byte from[M68K_MAX_REGISTER_SIZE];
|
||||
struct type *fpreg_type = register_type (get_frame_arch (frame),
|
||||
M68K_FP0_REGNUM);
|
||||
struct type *fpreg_type = register_type (gdbarch, M68K_FP0_REGNUM);
|
||||
|
||||
/* We only support floating-point values. */
|
||||
if (TYPE_CODE (type) != TYPE_CODE_FLT)
|
||||
{
|
||||
warning (_("Cannot convert floating-point register value "
|
||||
"to non-floating-point type."));
|
||||
*optimizedp = *unavailablep = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Convert to TYPE. */
|
||||
gdb_assert (TYPE_CODE (type) == TYPE_CODE_FLT);
|
||||
|
||||
/* Convert to TYPE. */
|
||||
if (!get_frame_register_bytes (frame, regnum, 0, TYPE_LENGTH (type),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue