Fri Sep 13 14:59:55 2002 Andrew Cagney <cagney@redhat.com>
authorAndrew Cagney <cagney@redhat.com>
Fri, 13 Sep 2002 22:15:33 +0000 (22:15 +0000)
committerAndrew Cagney <cagney@redhat.com>
Fri, 13 Sep 2002 22:15:33 +0000 (22:15 +0000)
* mips-tdep.c (read_next_frame_reg): Re-hack using
  frame_register_unwind.

gdb/ChangeLog
gdb/mips-tdep.c

index 85319f9ad79f09c89be10fd74c1ccbd644f6c0e7..6ef623374c03452dc48a3019958de8b4ff282e4b 100644 (file)
@@ -1,3 +1,8 @@
+Fri Sep 13 14:59:55 2002  Andrew Cagney  <cagney@redhat.com>
+
+       * mips-tdep.c (read_next_frame_reg): Re-hack using
+       frame_register_unwind.
+
 Fri Sep 13 07:42:09 2002  Andrew Cagney  <cagney@redhat.com>
 
        * mips-tdep.c (mips_get_saved_register): Re-hack using
index 268894a318c808d876005a5941ad9da6462fb558..5071446d3111edfbb2a744a98c0a9c4aab2fe08c 100644 (file)
@@ -1589,21 +1589,29 @@ mips_frame_init_saved_regs (struct frame_info *frame)
 static CORE_ADDR
 read_next_frame_reg (struct frame_info *fi, int regno)
 {
-  for (; fi; fi = fi->next)
+  int optimized;
+  CORE_ADDR addr;
+  int realnum;
+  enum lval_type lval;
+  void *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
+  frame_register_unwind (fi, regno, &optimized, &lval, &addr, &realnum,
+                        raw_buffer);
+  /* FIXME: cagney/2002-09-13: This is just soooo bad.  The MIPS
+     should have a pseudo register range that correspons to the ABI's,
+     rather than the ISA's, view of registers.  These registers would
+     then implicitly describe their size and hence could be used
+     without the below munging.  */
+  if (lval == lval_memory)
     {
-      /* We have to get the saved sp from the sigcontext
-         if it is a signal handler frame.  */
-      if (regno == SP_REGNUM && !fi->signal_handler_caller)
-       return fi->frame;
-      else
+      if (regno < 32)
        {
-         if (fi->saved_regs == NULL)
-           FRAME_INIT_SAVED_REGS (fi);
-         if (fi->saved_regs[regno])
-           return read_memory_integer (ADDR_BITS_REMOVE (fi->saved_regs[regno]), MIPS_SAVED_REGSIZE);
+         /* Only MIPS_SAVED_REGSIZE bytes of GP registers are
+            saved. */
+         return read_memory_integer (addr, MIPS_SAVED_REGSIZE);
        }
     }
-  return read_signed_register (regno);
+
+  return extract_signed_integer (raw_buffer, REGISTER_VIRTUAL_SIZE (regno));
 }
 
 /* mips_addr_bits_remove - remove useless address bits  */