2002-08-20 Michael Snyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Tue, 20 Aug 2002 22:44:55 +0000 (22:44 +0000)
committerMichael Snyder <msnyder@vmware.com>
Tue, 20 Aug 2002 22:44:55 +0000 (22:44 +0000)
* mips-tdep.c (mips_skip_stub, mips_in_call_stub): Make static.
(mips_gdbarch_init): Set skip_trampoline_code,
in_solib_call_trampoline.
* config/mips/tm-mips.h (REGISTER_NAME): Delete.
(IN_SOLIB_CALL_TRAMPOLINE, SKIP_TRAMPOLINE_CODE): Delete.

gdb/ChangeLog
gdb/config/mips/tm-mips.h
gdb/mips-tdep.c

index 2027ca4..bac2266 100644 (file)
@@ -1,3 +1,11 @@
+2002-08-20  Michael Snyder  <msnyder@redhat.com>
+
+       * mips-tdep.c (mips_skip_stub, mips_in_call_stub): Make static.
+       (mips_gdbarch_init): Set skip_trampoline_code, 
+       in_solib_call_trampoline.
+       * config/mips/tm-mips.h (REGISTER_NAME): Delete.
+       (IN_SOLIB_CALL_TRAMPOLINE, SKIP_TRAMPOLINE_CODE): Delete.
+
 2002-08-20  Elena Zannoni  <ezannoni@redhat.com>
 
        * ppc-tdep.h (struct gdbarch_tdep): Add ev registers.
index 4417bf9..b3015e3 100644 (file)
@@ -77,11 +77,6 @@ extern int mips_step_skips_delay (CORE_ADDR);
 #define NUM_REGS 90
 #endif
 
-/* Given the register index, return the name of the corresponding
-   register. */
-extern const char *mips_register_name (int regnr);
-#define REGISTER_NAME(i) mips_register_name (i)
-
 /* Initializer for an array of names of registers.
    There should be NUM_REGS strings in this initializer.  */
 
@@ -223,9 +218,7 @@ extern void fixup_sigtramp (void);
 extern char *mips_read_processor_type (void);
 
 /* Functions for dealing with MIPS16 call and return stubs.  */
-#define IN_SOLIB_CALL_TRAMPOLINE(pc, name)     mips_in_call_stub (pc, name)
 #define IN_SOLIB_RETURN_TRAMPOLINE(pc, name)   mips_in_return_stub (pc, name)
-#define SKIP_TRAMPOLINE_CODE(pc)               mips_skip_stub (pc)
 #define IGNORE_HELPER_CALL(pc)                 mips_ignore_helper (pc)
 extern int mips_in_call_stub (CORE_ADDR pc, char *name);
 extern int mips_in_return_stub (CORE_ADDR pc, char *name);
index 6f74df2..79ce042 100644 (file)
@@ -3773,13 +3773,22 @@ mips_pop_frame (void)
   if (frame->saved_regs == NULL)
     FRAME_INIT_SAVED_REGS (frame);
   for (regnum = 0; regnum < NUM_REGS; regnum++)
-    {
-      if (regnum != SP_REGNUM && regnum != PC_REGNUM
-         && frame->saved_regs[regnum])
-       write_register (regnum,
-                       read_memory_integer (frame->saved_regs[regnum],
-                                            MIPS_SAVED_REGSIZE));
-    }
+    if (regnum != SP_REGNUM && regnum != PC_REGNUM
+       && frame->saved_regs[regnum])
+      {
+       /* Floating point registers must not be sign extended, 
+          in case MIPS_SAVED_REGSIZE = 4 but sizeof (FP0_REGNUM) == 8.  */
+
+       if (FP0_REGNUM <= regnum && regnum < FP0_REGNUM + 32)
+         write_register (regnum,
+                         read_memory_unsigned_integer (frame->saved_regs[regnum],
+                                                       MIPS_SAVED_REGSIZE));
+       else
+         write_register (regnum,
+                         read_memory_integer (frame->saved_regs[regnum],
+                                              MIPS_SAVED_REGSIZE));
+      }
+
   write_register (SP_REGNUM, new_sp);
   flush_cached_frames ();
 
@@ -5218,7 +5227,7 @@ mips_breakpoint_from_pc (CORE_ADDR * pcptr, int *lenptr)
    This function implements the SKIP_TRAMPOLINE_CODE macro.
  */
 
-CORE_ADDR
+static CORE_ADDR
 mips_skip_stub (CORE_ADDR pc)
 {
   char *name;
@@ -5301,7 +5310,7 @@ mips_skip_stub (CORE_ADDR pc)
 /* Return non-zero if the PC is inside a call thunk (aka stub or trampoline).
    This implements the IN_SOLIB_CALL_TRAMPOLINE macro.  */
 
-int
+static int
 mips_in_call_stub (CORE_ADDR pc, char *name)
 {
   CORE_ADDR start_addr;
@@ -5998,6 +6007,12 @@ mips_gdbarch_init (struct gdbarch_info info,
   set_gdbarch_store_struct_return (gdbarch, mips_store_struct_return);
   set_gdbarch_extract_struct_value_address (gdbarch, 
                                            mips_extract_struct_value_address);
+  
+  set_gdbarch_skip_trampoline_code (gdbarch, mips_skip_stub);
+
+  set_gdbarch_in_solib_call_trampoline (gdbarch, mips_in_call_stub);
+  /* set_gdbarch_in_solib_return_trampoline (gdbarch, mips_in_return_stub); */
+
   return gdbarch;
 }