Restrict alpha_convert_register_p
This patch restricts alpha_convert_register_p from "TYPE_LENGTH (type) != 8" to "TYPE_LENGTH (type) == 4", because, - we have check "TYPE_LENGTH (valtype) == 4" in alpha_register_to_value and alpha_value_to_register, - alpha lds and sts instruction access 4 bytes, - comments "It might need to convert the [float] register into the corresponding [integer] type (see Alpha)" and integer is 4-byte on alpha, I think it is the right restrict condition to "TYPE_LENGTH (valtype) == 4". gdb: 2017-05-24 Yao Qi <yao.qi@linaro.org> * alpha-tdep.c (alpha_convert_register_p): Return true if type length is 4. (alpha_register_to_value): Remove type length check. (alpha_value_to_register): Likewise.
This commit is contained in:
parent
88954b49e4
commit
68fce50f04
@ -1,3 +1,10 @@
|
||||
2017-05-24 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* alpha-tdep.c (alpha_convert_register_p): Return true if type
|
||||
length is 4.
|
||||
(alpha_register_to_value): Remove type length check.
|
||||
(alpha_value_to_register): Likewise.
|
||||
|
||||
2017-05-24 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* ia64-tdep.c (ia64_convert_register_p): Check type's code is
|
||||
|
@ -227,7 +227,7 @@ alpha_sts (struct gdbarch *gdbarch, void *out, const void *in)
|
||||
/* The alpha needs a conversion between register and memory format if the
|
||||
register is a floating point register and memory format is float, as the
|
||||
register format must be double or memory format is an integer with 4
|
||||
bytes or less, as the representation of integers in floating point
|
||||
bytes, as the representation of integers in floating point
|
||||
registers is different. */
|
||||
|
||||
static int
|
||||
@ -235,7 +235,7 @@ alpha_convert_register_p (struct gdbarch *gdbarch, int regno,
|
||||
struct type *type)
|
||||
{
|
||||
return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
|
||||
&& TYPE_LENGTH (type) != 8);
|
||||
&& TYPE_LENGTH (type) == 4);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -252,14 +252,10 @@ alpha_register_to_value (struct frame_info *frame, int regnum,
|
||||
in, optimizedp, unavailablep))
|
||||
return 0;
|
||||
|
||||
if (TYPE_LENGTH (valtype) == 4)
|
||||
{
|
||||
gdb_assert (TYPE_LENGTH (valtype) == 4);
|
||||
alpha_sts (gdbarch, out, in);
|
||||
*optimizedp = *unavailablep = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
error (_("Cannot retrieve value from floating point register"));
|
||||
}
|
||||
|
||||
static void
|
||||
@ -268,14 +264,9 @@ alpha_value_to_register (struct frame_info *frame, int regnum,
|
||||
{
|
||||
gdb_byte out[MAX_REGISTER_SIZE];
|
||||
|
||||
switch (TYPE_LENGTH (valtype))
|
||||
{
|
||||
case 4:
|
||||
gdb_assert (TYPE_LENGTH (valtype) == 4);
|
||||
alpha_lds (get_frame_arch (frame), out, in);
|
||||
break;
|
||||
default:
|
||||
error (_("Cannot store value in floating point register"));
|
||||
}
|
||||
|
||||
put_frame_register (frame, regnum, out);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user