* sh-tdep.c (sh_frame_cache): Don't fetch the FPSCR register
authorKevin Buettner <kevinb@redhat.com>
Sat, 3 Mar 2012 01:27:47 +0000 (01:27 +0000)
committerKevin Buettner <kevinb@redhat.com>
Sat, 3 Mar 2012 01:27:47 +0000 (01:27 +0000)
unless it exists for this architecture.

gdb/ChangeLog
gdb/sh-tdep.c

index a26e69423ddb1b09d770c9de62dab3abb849127c..6cf9ab4cc7188fd36be32798d081901f248eecdd 100644 (file)
@@ -1,3 +1,8 @@
+2012-03-02  Kevin Buettner  <kevinb@redhat.com>
+
+       * sh-tdep.c (sh_frame_cache): Don't fetch the FPSCR register
+       unless it exists for this architecture.
+
 2012-03-02  Joel Brobecker  <brobecker@adacore.com>
 
        * language.h (struct language_defn): New "method" la_read_var_value.
index e65aeb4b4036984dca65f54f11805ee85e0668b5..3983632b6bce6a578e01baf45db769b87a979715 100644 (file)
@@ -2554,7 +2554,16 @@ sh_frame_cache (struct frame_info *this_frame, void **this_cache)
   if (cache->pc != 0)
     {
       ULONGEST fpscr;
-      fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+
+      /* Check for the existence of the FPSCR register.         If it exists,
+        fetch its value for use in prologue analysis.  Passing a zero
+        value is the best choice for architecture variants upon which
+        there's no FPSCR register.  */
+      if (gdbarch_register_reggroup_p (gdbarch, FPSCR_REGNUM, all_reggroup))
+       fpscr = get_frame_register_unsigned (this_frame, FPSCR_REGNUM);
+      else
+       fpscr = 0;
+
       sh_analyze_prologue (gdbarch, cache->pc, current_pc, cache, fpscr);
     }