2011-09-14 Pedro Alves <pedro@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Wed, 14 Sep 2011 12:26:29 +0000 (12:26 +0000)
committerPedro Alves <palves@redhat.com>
Wed, 14 Sep 2011 12:26:29 +0000 (12:26 +0000)
* infrun.c (prepare_for_detach, wait_for_inferior)
(fetch_inferior_event): Don't flush the register cache.
* remote.c (struct stop_reply) <regcache>: Add comment.

gdb/ChangeLog
gdb/infrun.c
gdb/remote.c

index 34e8eb0..00188e6 100644 (file)
@@ -1,3 +1,9 @@
+2011-09-14  Pedro Alves  <pedro@codesourcery.com>
+
+       * infrun.c (prepare_for_detach, wait_for_inferior)
+       (fetch_inferior_event): Don't flush the register cache.
+       * remote.c (struct stop_reply) <regcache>: Add comment.
+
 2011-09-13  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        Remove excessive DWARF expressions memory duplication.
index 2b4f6db..c72b05d 100644 (file)
@@ -2580,14 +2580,6 @@ prepare_for_detach (void)
 
       overlay_cache_invalid = 1;
 
-      /* We have to invalidate the registers BEFORE calling
-        target_wait because they can be loaded from the target while
-        in target_wait.  This makes remote debugging a bit more
-        efficient for those targets that provide critical registers
-        as part of their normal status mechanism.  */
-
-      registers_changed ();
-
       if (deprecated_target_wait_hook)
        ecs->ptid = deprecated_target_wait_hook (pid_ptid, &ecs->ws, 0);
       else
@@ -2657,14 +2649,7 @@ wait_for_inferior (void)
     {
       struct cleanup *old_chain;
 
-      /* We have to invalidate the registers BEFORE calling target_wait
-        because they can be loaded from the target while in target_wait.
-        This makes remote debugging a bit more efficient for those
-        targets that provide critical registers as part of their normal
-        status mechanism.  */
-
       overlay_cache_invalid = 1;
-      registers_changed ();
 
       if (deprecated_target_wait_hook)
        ecs->ptid = deprecated_target_wait_hook (waiton_ptid, &ecs->ws, 0);
@@ -2734,26 +2719,8 @@ fetch_inferior_event (void *client_data)
        running any breakpoint commands.  */
     make_cleanup_restore_current_thread ();
 
-  /* We have to invalidate the registers BEFORE calling target_wait
-     because they can be loaded from the target while in target_wait.
-     This makes remote debugging a bit more efficient for those
-     targets that provide critical registers as part of their normal
-     status mechanism.  */
-
   overlay_cache_invalid = 1;
 
-  /* But don't do it if the current thread is already stopped (hence
-     this is either a delayed event that will result in
-     TARGET_WAITKIND_IGNORE, or it's an event for another thread (and
-     we always clear the register and frame caches when the user
-     switches threads anyway).  If we didn't do this, a spurious
-     delayed event in all-stop mode would make the user lose the
-     selected frame.  */
-  if (non_stop
-      || (!ptid_equal (inferior_ptid, null_ptid)
-         && is_executing (inferior_ptid)))
-    registers_changed ();
-
   make_cleanup_restore_integer (&execution_direction);
   execution_direction = target_execution_direction ();
 
index 1535fb6..1c9e965 100644 (file)
@@ -4898,6 +4898,10 @@ struct stop_reply
 
   struct target_waitstatus ws;
 
+  /* Expedited registers.  This makes remote debugging a bit more
+     efficient for those targets that provide critical registers as
+     part of their normal status mechanism (as another roundtrip to
+     fetch them is avoided).  */
   VEC(cached_reg_t) *regcache;
 
   int stopped_by_watchpoint_p;