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>
|
2017-05-24 Yao Qi <yao.qi@linaro.org>
|
||||||
|
|
||||||
* ia64-tdep.c (ia64_convert_register_p): Check type's code is
|
* 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
|
/* 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 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
|
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. */
|
registers is different. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -235,7 +235,7 @@ alpha_convert_register_p (struct gdbarch *gdbarch, int regno,
|
|||||||
struct type *type)
|
struct type *type)
|
||||||
{
|
{
|
||||||
return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
|
return (regno >= ALPHA_FP0_REGNUM && regno < ALPHA_FP0_REGNUM + 31
|
||||||
&& TYPE_LENGTH (type) != 8);
|
&& TYPE_LENGTH (type) == 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -252,14 +252,10 @@ alpha_register_to_value (struct frame_info *frame, int regnum,
|
|||||||
in, optimizedp, unavailablep))
|
in, optimizedp, unavailablep))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (TYPE_LENGTH (valtype) == 4)
|
gdb_assert (TYPE_LENGTH (valtype) == 4);
|
||||||
{
|
|
||||||
alpha_sts (gdbarch, out, in);
|
alpha_sts (gdbarch, out, in);
|
||||||
*optimizedp = *unavailablep = 0;
|
*optimizedp = *unavailablep = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
|
||||||
|
|
||||||
error (_("Cannot retrieve value from floating point register"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -268,14 +264,9 @@ alpha_value_to_register (struct frame_info *frame, int regnum,
|
|||||||
{
|
{
|
||||||
gdb_byte out[MAX_REGISTER_SIZE];
|
gdb_byte out[MAX_REGISTER_SIZE];
|
||||||
|
|
||||||
switch (TYPE_LENGTH (valtype))
|
gdb_assert (TYPE_LENGTH (valtype) == 4);
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
alpha_lds (get_frame_arch (frame), out, in);
|
alpha_lds (get_frame_arch (frame), out, in);
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error (_("Cannot store value in floating point register"));
|
|
||||||
}
|
|
||||||
put_frame_register (frame, regnum, out);
|
put_frame_register (frame, regnum, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user