*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / regcache.c
index 2808c566d458a539ebe5009fc349a92ca1ccac1f..11ed8c4f70d71fcfd51e54626592c2273ba9d32d 100644 (file)
@@ -45,7 +45,13 @@ char *registers;
 /* REGISTER_VALID is 0 if the register needs to be fetched,
                      1 if it has been fetched, and
                    -1 if the register value was not available.  
-   "Not available" means don't try to fetch it again.  */
+
+   "Not available" indicates that the target is not not able to supply
+   the register at this state.  The register may become available at a
+   later time (after the next resume).  This often occures when GDB is
+   manipulating a target that contains only a snapshot of the entire
+   system being debugged - some of the registers in such a system may
+   not have been saved.  */
 
 signed char *register_valid;
 
@@ -125,7 +131,8 @@ fetch_register (int regnum)
   if (FETCH_PSEUDO_REGISTER_P ()
       && pseudo_register (regnum))
     FETCH_PSEUDO_REGISTER (regnum);
-  target_fetch_registers (regnum);
+  else
+    target_fetch_registers (regnum);
 }
 
 /* Write register REGNUM cached value to the target.  */
@@ -140,7 +147,8 @@ store_register (int regnum)
   if (STORE_PSEUDO_REGISTER_P ()
       && pseudo_register (regnum))
     STORE_PSEUDO_REGISTER (regnum);
-  target_store_registers (regnum);
+  else
+    target_store_registers (regnum);
 }
 
 /* Low level examining and depositing of registers.
@@ -310,7 +318,7 @@ legacy_read_register_gen (int regnum, char *myaddr)
 void
 regcache_read (int rawnum, char *buf)
 {
-  gdb_assert (rawnum >= 0 && rawnum < NUM_REGS);
+  gdb_assert (rawnum >= 0 && rawnum < (NUM_REGS + NUM_PSEUDO_REGS));
   /* For moment, just use underlying legacy code. Ulgh!!! */
   legacy_read_register_gen (rawnum, buf);
 }
@@ -369,7 +377,7 @@ legacy_write_register_gen (int regnum, char *myaddr)
 void
 regcache_write (int rawnum, char *buf)
 {
-  gdb_assert (rawnum >= 0 && rawnum < NUM_REGS);
+  gdb_assert (rawnum >= 0 && rawnum < (NUM_REGS + NUM_PSEUDO_REGS));
   /* For moment, just use underlying legacy code. Ulgh!!! */
   legacy_write_register_gen (rawnum, buf);
 }
@@ -583,16 +591,16 @@ regcache_collect (int regnum, void *buf)
 }
 
 
-/* read_pc, write_pc, read_sp, write_sp, read_fp, write_fp, etc.
-   Special handling for registers PC, SP, and FP.  */
+/* read_pc, write_pc, read_sp, write_sp, read_fp, etc.  Special
+   handling for registers PC, SP, and FP.  */
 
 /* NOTE: cagney/2001-02-18: The functions generic_target_read_pc(),
    read_pc_pid(), read_pc(), generic_target_write_pc(),
    write_pc_pid(), write_pc(), generic_target_read_sp(), read_sp(),
-   generic_target_write_sp(), write_sp(), generic_target_read_fp(),
-   read_fp(), generic_target_write_fp(), write_fp will eventually be
-   moved out of the reg-cache into either frame.[hc] or to the
-   multi-arch framework.  The are not part of the raw register cache.  */
+   generic_target_write_sp(), write_sp(), generic_target_read_fp() and
+   read_fp(), will eventually be moved out of the reg-cache into
+   either frame.[hc] or to the multi-arch framework.  The are not part
+   of the raw register cache.  */
 
 /* This routine is getting awfully cluttered with #if's.  It's probably
    time to turn this into READ_PC and define it in the tm.h file.
@@ -652,8 +660,6 @@ generic_target_write_pc (CORE_ADDR pc, ptid_t ptid)
     write_register_pid (PC_REGNUM, pc, ptid);
   if (NPC_REGNUM >= 0)
     write_register_pid (NPC_REGNUM, pc + 4, ptid);
-  if (NNPC_REGNUM >= 0)
-    write_register_pid (NNPC_REGNUM, pc + 8, ptid);
 #else
   internal_error (__FILE__, __LINE__,
                  "generic_target_write_pc");
@@ -736,26 +742,6 @@ read_fp (void)
   return TARGET_READ_FP ();
 }
 
-void
-generic_target_write_fp (CORE_ADDR val)
-{
-#ifdef FP_REGNUM
-  if (FP_REGNUM >= 0)
-    {
-      write_register (FP_REGNUM, val);
-      return;
-    }
-#endif
-  internal_error (__FILE__, __LINE__,
-                 "generic_target_write_fp");
-}
-
-void
-write_fp (CORE_ADDR val)
-{
-  TARGET_WRITE_FP (val);
-}
-
 /* ARGSUSED */
 static void
 reg_flush_command (char *command, int from_tty)
@@ -800,8 +786,6 @@ build_regcache (void)
 void
 _initialize_regcache (void)
 {
-  build_regcache ();
-
   register_gdbarch_swap (&registers, sizeof (registers), NULL);
   register_gdbarch_swap (&register_valid, sizeof (register_valid), NULL);
   register_gdbarch_swap (NULL, 0, build_regcache);
This page took 0.025771 seconds and 4 git commands to generate.