This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Restrict m68k_convert_register_p


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e3ec9b69cde4e07d95eaadee75566fd4a8091df5

commit e3ec9b69cde4e07d95eaadee75566fd4a8091df5
Author: Yao Qi <yao.qi@linaro.org>
Date:   Wed May 24 22:15:23 2017 +0100

    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.

Diff:
---
 gdb/ChangeLog   |  5 +++++
 gdb/m68k-tdep.c | 16 ++++------------
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 0f076f0..b0d3c2e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
 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.
 	* avr-tdep.c (avr_gdbarch_init): Likewise.
 	* bfin-tdep.c (bfin_gdbarch_init): Likewise.
diff --git a/gdb/m68k-tdep.c b/gdb/m68k-tdep.c
index 5b4736d..f093446 100644
--- a/gdb/m68k-tdep.c
+++ b/gdb/m68k-tdep.c
@@ -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),


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]