* breakpoint.c, breakpoint.h (breakpoint_init_inferior): New function
authorJim Kingdon <jkingdon@engr.sgi.com>
Thu, 7 Oct 1993 11:16:35 +0000 (11:16 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Thu, 7 Oct 1993 11:16:35 +0000 (11:16 +0000)
that clears the `inserted' flag for all breakpoints and deletes
any breakpoints which should go away between runs of programs.
* inflow.c (generic_mourn_inferior), infrun.c (init_wait_for_inferior),
remote-es.c (es1800_load), comments in exec.c and corelow.c:
Use it instead of mark_breakpoints_out.
* breakpoint.c (mark_breakpoints_out):  Update comment, tm-rs6000.h
uses it in a completely different context.
* breakpoint.c (breakpoint_re_set_one):  Add bp_call_dummy case.

gdb/ChangeLog
gdb/breakpoint.c
gdb/breakpoint.h
gdb/corelow.c
gdb/inflow.c
gdb/infrun.c
gdb/remote-es.c

index 7333f919f0f1c96991e0ea10d4cbdf1054461426..38a50f1499d8285e2bb17e908158de8098c4d390 100644 (file)
@@ -1,3 +1,15 @@
+Thu Oct 07 09:29:11 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
+
+       * breakpoint.c, breakpoint.h (breakpoint_init_inferior):  New function
+       that clears the `inserted' flag for all breakpoints and deletes
+       any breakpoints which should go away between runs of programs.
+       * inflow.c (generic_mourn_inferior), infrun.c (init_wait_for_inferior),
+       remote-es.c (es1800_load), comments in exec.c and corelow.c:
+       Use it instead of mark_breakpoints_out.
+       * breakpoint.c (mark_breakpoints_out):  Update comment, tm-rs6000.h
+       uses it in a completely different context.
+       * breakpoint.c (breakpoint_re_set_one):  Add bp_call_dummy case.
+
 Thu Oct 07 09:29:11 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * Makefile.in (REGEX, REGEX1):  Always use our own version of
index ee5cf541d693859163b692d0502d5050f9fc5220..2db375340eb137dba18c07a92fc53ee9d945bace 100644 (file)
@@ -505,8 +505,7 @@ remove_breakpoints ()
   return 0;
 }
 
-/* Clear the "inserted" flag in all breakpoints.
-   This is done when the inferior is loaded.  */
+/* Clear the "inserted" flag in all breakpoints.  */
 
 void
 mark_breakpoints_out ()
@@ -517,6 +516,26 @@ mark_breakpoints_out ()
     b->inserted = 0;
 }
 
+/* Clear the "inserted" flag in all breakpoints and delete any breakpoints
+   which should go away between runs of the program.  */
+
+void
+breakpoint_init_inferior ()
+{
+  register struct breakpoint *b, *temp;
+
+  ALL_BREAKPOINTS_SAFE (b, temp)
+    {
+      b->inserted = 0;
+
+      /* If the call dummy breakpoint is at the entry point it will
+        cause problems when the inferior is rerun, so we better
+        get rid of it.  */
+      if (b->type == bp_call_dummy)
+       delete_breakpoint (b);
+    }
+}
+
 /* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
    When continuing from a location with a breakpoint,
    we actually single step once before calling insert_breakpoints.  */
@@ -2709,6 +2728,7 @@ breakpoint_re_set_one (bint)
     case bp_finish:
     case bp_longjmp:
     case bp_longjmp_resume:
+    case bp_call_dummy:
       delete_breakpoint (b);
       break;
     }
index 8317dd3886b2a9b42c7895667b713337275700c1..589915d32b932f5b850ee505ed530f7fb68f436b 100644 (file)
@@ -156,11 +156,8 @@ extern void bpstat_clear PARAMS ((bpstat *));
    is part of the bpstat is copied as well.  */
 extern bpstat bpstat_copy PARAMS ((bpstat));
 
-/* Get a bpstat associated with having just stopped at address *PC
-   and frame address FRAME_ADDRESS.  Update *PC to point at the
-   breakpoint (if we hit a breakpoint).  */
 /* FIXME:  prototypes uses equivalence between FRAME_ADDR and CORE_ADDR */
-extern bpstat bpstat_stop_status PARAMS ((CORE_ADDR *, CORE_ADDR));
+extern bpstat bpstat_stop_status PARAMS ((CORE_ADDR *, CORE_ADDR, int));
 \f
 /* This bpstat_what stuff tells wait_for_inferior what to do with a
    breakpoint (a challenging task).  */
@@ -316,6 +313,9 @@ set_default_breakpoint PARAMS ((int, CORE_ADDR, struct symtab *, int));
 extern void
 mark_breakpoints_out PARAMS ((void));
 
+extern void
+breakpoint_init_inferior PARAMS ((void));
+
 extern void
 delete_breakpoint PARAMS ((struct breakpoint *));
 
index a30f2c3089bfaddaec6ce71627f131159b7c5d7e..1e803efea3abe900846de6b675990859b9ab7e93 100644 (file)
@@ -291,7 +291,7 @@ core_files_info (t)
 }
 \f
 /* If mourn is being called in all the right places, this could be say
-   `gdb internal error' (since generic_mourn calls mark_breakpoints_out).  */
+   `gdb internal error' (since generic_mourn calls breakpoint_init_inferior).  */
 
 static int
 ignore (addr, contents)
index fddfe84db5b42791d57402dc07d4369c610cf35d..b4844662dd58b7754f455c241e9b9f37b9f83041 100644 (file)
@@ -469,7 +469,7 @@ generic_mourn_inferior ()
 {
   inferior_pid = 0;
   attach_flag = 0;
-  mark_breakpoints_out ();
+  breakpoint_init_inferior ();
   registers_changed ();
 
 #ifdef CLEAR_DEFERRED_STORES
@@ -478,15 +478,8 @@ generic_mourn_inferior ()
 #endif
 
   reopen_exec_file ();
-  flush_cached_frames ();
-  if (target_has_stack) {
-    set_current_frame ( create_new_frame (read_register (FP_REGNUM),
-                                         read_pc ()));
-    select_frame (get_current_frame (), 0);
-  } else {
-    set_current_frame (0);
-    select_frame ((FRAME) 0, -1);
-  }
+  reinit_frame_cache ();
+
   /* It is confusing to the user for ignore counts to stick around
      from previous runs of the inferior.  So clear them.  */
   breakpoint_clear_ignore_counts ();
index 409a768cf0dcd629909f95ed14360d256f72f6cb..37447334eb0d5c34857e02a02019c107191de5fc 100644 (file)
@@ -447,7 +447,7 @@ init_wait_for_inferior ()
 
   trap_expected_after_continue = 0;
   breakpoints_inserted = 0;
-  mark_breakpoints_out ();
+  breakpoint_init_inferior ();
   stop_signal = 0;             /* Don't confuse first call to proceed(). */
 }
 
index e9108169b54a3c2b793f34d23996557edf86e58b..66a62dae3df81cb9184d8773812bd438a1556095 100644 (file)
@@ -1430,7 +1430,7 @@ es1800_load (filename, from_tty)
        error ("Downloading format not defined\n");
     }
  
-  mark_breakpoints_out ();
+  breakpoint_init_inferior ();
   inferior_pid = 0;
   if (from_tty)
     {