* infrun.c (resume): If following a fork, also reset regcache,
authorPedro Alves <palves@redhat.com>
Thu, 20 Nov 2008 17:06:05 +0000 (17:06 +0000)
committerPedro Alves <palves@redhat.com>
Thu, 20 Nov 2008 17:06:05 +0000 (17:06 +0000)
gdbarch and pc.

gdb/ChangeLog
gdb/infrun.c

index 89f352dea292793c0c30eb26d68cd331c739292e..3d8d441bcf19e4406054d80a46f33cb2e46d3d7e 100644 (file)
@@ -1,3 +1,8 @@
+2008-11-20  Pedro Alves  <pedro@codesourcery.com>
+
+       * infrun.c (resume): If following a fork, also reset regcache,
+       gdbarch and pc.
+
 2008-11-20  Doug Evans  <dje@google.com>
 
        * printcmd.c (sym_info): Don't print the offset if it's zero.
index 93ee00bc00a0050c550db8284e18c68dbce22623..4043e75e5b32d8c09e1d20920174904e0edd0bd0 100644 (file)
@@ -965,10 +965,13 @@ resume (int step, enum target_signal sig)
 {
   int should_resume = 1;
   struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
+
+  /* Note that these must be reset if we follow a fork below.  */
   struct regcache *regcache = get_current_regcache ();
   struct gdbarch *gdbarch = get_regcache_arch (regcache);
   struct thread_info *tp = inferior_thread ();
   CORE_ADDR pc = regcache_read_pc (regcache);
+
   QUIT;
 
   if (debug_infrun)
@@ -1057,6 +1060,9 @@ a command like `return' or `jump' to continue execution."));
       /* Following a child fork will change our notion of current
         thread.  */
       tp = inferior_thread ();
+      regcache = get_current_regcache ();
+      gdbarch = get_regcache_arch (regcache);
+      pc = regcache_read_pc (regcache);
       break;
 
     case TARGET_WAITKIND_EXECD: