Fix my last change to actually compile.
[deliverable/binutils-gdb.git] / gdb / regcache.c
index 13cded2a7afe79445bd221af091b9a7c62a07f4a..b46a24289243fa4da820f14c46a2f302d3505ac0 100644 (file)
@@ -24,6 +24,7 @@
 #include "inferior.h"
 #include "target.h"
 #include "gdbarch.h"
+#include "gdbcmd.h"
 
 /*
  * DATA STRUCTURE
@@ -68,6 +69,15 @@ register_cached (int regnum)
   return register_valid[regnum];
 }
 
+/* REGISTER_CHANGED
+
+   invalidate a single register REGNUM in the cache */
+void
+register_changed (int regnum)
+{
+  register_valid[regnum] = 0;
+}
+
 /* FIND_SAVED_REGISTER ()
 
    Return the address in which frame FRAME's value of register REGNUM
@@ -378,7 +388,7 @@ read_register_bytes (int inregbyte, char *myaddr, int inlen)
       if (regno < NUM_REGS)
        target_fetch_registers (regno);
       else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-       ARCH_FETCH_PSEUDO_REGISTERS (regno);
+       FETCH_PSEUDO_REGISTER (regno);
 
       if (!register_valid[regno])
        error ("read_register_bytes:  Couldn't update register %d.", regno);
@@ -407,7 +417,7 @@ read_register_gen (int regno, char *myaddr)
       if (regno < NUM_REGS)
        target_fetch_registers (regno);
       else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-       ARCH_FETCH_PSEUDO_REGISTERS (regno);
+       FETCH_PSEUDO_REGISTER (regno);
     }
   memcpy (myaddr, &registers[REGISTER_BYTE (regno)],
          REGISTER_RAW_SIZE (regno));
@@ -456,7 +466,7 @@ write_register_gen (int regno, char *myaddr)
   if (regno < NUM_REGS)
     target_store_registers (regno);
   else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-    ARCH_STORE_PSEUDO_REGISTERS (regno);
+    STORE_PSEUDO_REGISTER (regno);
 }
 
 /* Copy INLEN bytes of consecutive data from memory at MYADDR
@@ -510,7 +520,7 @@ write_register_bytes (int myregstart, char *myaddr, int inlen)
          if (regno < NUM_REGS)
            target_store_registers (regno);
          else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-           ARCH_STORE_PSEUDO_REGISTERS (regno);
+           STORE_PSEUDO_REGISTER (regno);
        }
     }
 }
@@ -533,7 +543,7 @@ read_register (int regno)
       if (regno < NUM_REGS)
        target_fetch_registers (regno);
       else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-       ARCH_FETCH_PSEUDO_REGISTERS (regno);
+       FETCH_PSEUDO_REGISTER (regno);
     }
 
   return (extract_unsigned_integer (&registers[REGISTER_BYTE (regno)],
@@ -639,7 +649,7 @@ write_register (int regno, LONGEST val)
   if (regno < NUM_REGS)
     target_store_registers (regno);
   else if (regno < NUM_REGS + NUM_PSEUDO_REGS)
-    ARCH_STORE_PSEUDO_REGISTERS (regno);
+    STORE_PSEUDO_REGISTER (regno);
 }
 
 void
@@ -715,10 +725,6 @@ supply_register (int regno, char *val)
    eliminate the intermediate read_pc_pid().  The client would call
    TARGET_READ_PC directly. (cagney). */
 
-#ifndef TARGET_READ_PC
-#define TARGET_READ_PC generic_target_read_pc
-#endif
-
 CORE_ADDR
 generic_target_read_pc (int pid)
 {
@@ -755,10 +761,6 @@ read_pc (void)
   return read_pc_pid (inferior_pid);
 }
 
-#ifndef TARGET_WRITE_PC
-#define TARGET_WRITE_PC generic_target_write_pc
-#endif
-
 void
 generic_target_write_pc (CORE_ADDR pc, int pid)
 {
@@ -796,10 +798,6 @@ write_pc (CORE_ADDR pc)
 
 /* Cope with strage ways of getting to the stack and frame pointers */
 
-#ifndef TARGET_READ_SP
-#define TARGET_READ_SP generic_target_read_sp
-#endif
-
 CORE_ADDR
 generic_target_read_sp (void)
 {
@@ -816,10 +814,6 @@ read_sp (void)
   return TARGET_READ_SP ();
 }
 
-#ifndef TARGET_WRITE_SP
-#define TARGET_WRITE_SP generic_target_write_sp
-#endif
-
 void
 generic_target_write_sp (CORE_ADDR val)
 {
@@ -839,10 +833,6 @@ write_sp (CORE_ADDR val)
   TARGET_WRITE_SP (val);
 }
 
-#ifndef TARGET_READ_FP
-#define TARGET_READ_FP generic_target_read_fp
-#endif
-
 CORE_ADDR
 generic_target_read_fp (void)
 {
@@ -859,10 +849,6 @@ read_fp (void)
   return TARGET_READ_FP ();
 }
 
-#ifndef TARGET_WRITE_FP
-#define TARGET_WRITE_FP generic_target_write_fp
-#endif
-
 void
 generic_target_write_fp (CORE_ADDR val)
 {
@@ -882,6 +868,17 @@ write_fp (CORE_ADDR val)
   TARGET_WRITE_FP (val);
 }
 
+/* ARGSUSED */
+static void
+reg_flush_command (char *command, int from_tty)
+{
+  /* Force-flush the register cache.  */
+  registers_changed ();
+  if (from_tty)
+    printf_filtered ("Register cache flushed.\n");
+}
+
+
 static void
 build_regcache (void)
 {
@@ -904,4 +901,7 @@ _initialize_regcache (void)
   register_gdbarch_swap (&registers, sizeof (registers), NULL);
   register_gdbarch_swap (&register_valid, sizeof (register_valid), NULL);
   register_gdbarch_swap (NULL, 0, build_regcache);
+
+  add_com ("flushregs", class_maintenance, reg_flush_command,
+          "Force gdb to flush its register cache (maintainer command)");
 }
This page took 0.029133 seconds and 4 git commands to generate.