diff options
author | Yao Qi <yao.qi@linaro.org> | 2017-05-24 22:15:23 +0100 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2017-05-24 22:15:23 +0100 |
commit | 68fce50f04f495980f4ea81746339a9de5b52ebb (patch) | |
tree | 6a3b16a919f1a4e960d3a185ce1175bf83dfa1b2 /gdb | |
parent | 88954b49e47574cdd048a23ca391a85fb6f77f47 (diff) | |
download | gdb-68fce50f04f495980f4ea81746339a9de5b52ebb.zip gdb-68fce50f04f495980f4ea81746339a9de5b52ebb.tar.gz gdb-68fce50f04f495980f4ea81746339a9de5b52ebb.tar.bz2 |
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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/alpha-tdep.c | 27 |
2 files changed, 16 insertions, 18 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 0cb8e36..1234e14 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 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 TYPE_CODE_FLT. diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c index 672e578..d7cc0f4 100644 --- a/gdb/alpha-tdep.c +++ b/gdb/alpha-tdep.c @@ -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) - { - alpha_sts (gdbarch, out, in); - *optimizedp = *unavailablep = 0; - return 1; - } - - error (_("Cannot retrieve value from floating point register")); + gdb_assert (TYPE_LENGTH (valtype) == 4); + alpha_sts (gdbarch, out, in); + *optimizedp = *unavailablep = 0; + return 1; } 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: - alpha_lds (get_frame_arch (frame), out, in); - break; - default: - error (_("Cannot store value in floating point register")); - } + gdb_assert (TYPE_LENGTH (valtype) == 4); + alpha_lds (get_frame_arch (frame), out, in); + put_frame_register (frame, regnum, out); } |