* serial.h (SERIAL_SET_TTY_STATE): Comment return value.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
index 6facde06666f5e45cdb95b87d92edb1405301a46..717335fcc879b2e45c2971b1b0eb49faf879da62 100644 (file)
@@ -30,6 +30,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "ctype.h"
 #include "command.h"
 #include "inferior.h"
+#include "thread.h"
 #include "target.h"
 #include "language.h"
 #include <string.h>
@@ -153,7 +154,7 @@ static int executing_breakpoint_commands;
 
 /* Chain of all breakpoints defined.  */
 
-struct breakpoint *breakpoint_chain;
+static struct breakpoint *breakpoint_chain;
 
 /* Number of last breakpoint made.  */
 
@@ -449,7 +450,8 @@ insert_breakpoints ()
                b->enable = disabled;
                if (!disabled_breaks)
                  {
-                   fprintf (stderr,
+                   target_terminal_ours_for_output ();
+                   fprintf_unfiltered (gdb_stderr,
                         "Cannot insert breakpoint %d:\n", b->number);
                    printf_filtered ("Disabling shared library breakpoints:\n");
                  }
@@ -459,9 +461,10 @@ insert_breakpoints ()
            else
 #endif
              {
-               fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
+               target_terminal_ours_for_output ();
+               fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
 #ifdef ONE_PROCESS_WRITETEXT
-               fprintf (stderr,
+               fprintf_unfiltered (gdb_stderr,
                  "The same program may be running in another process.\n");
 #endif
                memory_error (val, b->address); /* which bombs us out */
@@ -481,10 +484,6 @@ remove_breakpoints ()
   register struct breakpoint *b;
   int val;
 
-#ifdef BREAKPOINT_DEBUG
-  printf ("Removing breakpoints.\n");
-#endif /* BREAKPOINT_DEBUG */
-
   ALL_BREAKPOINTS (b)
     if (b->type != bp_watchpoint && b->inserted)
       {
@@ -492,21 +491,12 @@ remove_breakpoints ()
        if (val)
          return val;
        b->inserted = 0;
-#ifdef BREAKPOINT_DEBUG
-       printf ("Removed breakpoint at %s",
-               local_hex_string(b->address));
-       printf (", shadow %s",
-               local_hex_string(b->shadow_contents[0]));
-       printf (", %s.\n",
-               local_hex_string(b->shadow_contents[1]));
-#endif /* BREAKPOINT_DEBUG */
       }
 
   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 +507,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.  */
@@ -533,6 +543,60 @@ breakpoint_here_p (pc)
 
   return 0;
 }
+
+/* Return nonzero if FRAME is a dummy frame.  We can't use PC_IN_CALL_DUMMY
+   because figuring out the saved SP would take too much time, at least using
+   get_saved_register on the 68k.  This means that for this function to
+   work right a port must use the bp_call_dummy breakpoint.  */
+
+int
+frame_in_dummy (frame)
+     FRAME frame;
+{
+  struct breakpoint *b;
+
+#ifdef CALL_DUMMY
+  ALL_BREAKPOINTS (b)
+    {
+      static unsigned LONGEST dummy[] = CALL_DUMMY;
+
+      if (b->type == bp_call_dummy
+         && b->frame == frame->frame
+
+         /* We need to check the PC as well as the frame on the sparc,
+            for signals.exp in the testsuite.  */
+         && (frame->pc
+             >= (b->address
+                 - sizeof (dummy) / sizeof (LONGEST) * REGISTER_SIZE))
+         && frame->pc <= b->address)
+       return 1;
+    }
+#endif /* CALL_DUMMY */
+  return 0;
+}
+
+/* breakpoint_match_thread (PC, PID) returns true if the breakpoint at PC
+   is valid for process/thread PID.  */
+
+int
+breakpoint_thread_match (pc, pid)
+     CORE_ADDR pc;
+     int pid;
+{
+  struct breakpoint *b;
+  int thread;
+
+  thread = pid_to_thread_id (pid);
+
+  ALL_BREAKPOINTS (b)
+    if (b->enable != disabled
+       && b->address == pc
+       && (b->thread == -1 || b->thread == thread))
+      return 1;
+
+  return 0;
+}
+
 \f
 /* bpstat stuff.  External routines' interfaces are documented
    in breakpoint.h.  */
@@ -721,11 +785,11 @@ print_it_normal (bs)
   if (bs->old_val != NULL)
     {
       printf_filtered ("\nWatchpoint %d, ", bs->breakpoint_at->number);
-      print_expression (bs->breakpoint_at->exp, stdout);
+      print_expression (bs->breakpoint_at->exp, gdb_stdout);
       printf_filtered ("\nOld value = ");
-      value_print (bs->old_val, stdout, 0, Val_pretty_default);
+      value_print (bs->old_val, gdb_stdout, 0, Val_pretty_default);
       printf_filtered ("\nNew value = ");
-      value_print (bs->breakpoint_at->val, stdout, 0,
+      value_print (bs->breakpoint_at->val, gdb_stdout, 0,
                   Val_pretty_default);
       printf_filtered ("\n");
       value_free (bs->old_val);
@@ -945,8 +1009,8 @@ watchpoint_check (p)
     {
       /* We use value_{,free_to_}mark because it could be a
          *long* time before we return to the command level and
-        call free_all_values.  */
-      /* But couldn't we just call free_all_values instead?  */
+        call free_all_values.  We can't call free_all_values because
+        we might be in the middle of evaluating a function call.  */
 
       value mark = value_mark ();
       value new_val = evaluate_expression (bs->breakpoint_at->exp);
@@ -1003,14 +1067,18 @@ print_it_noop (bs)
   return -1;
 }
 
+/* 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).  NOT_A_BREAKPOINT is nonzero
+   if this is known to not be a real breakpoint (it could still be a
+   watchpoint, though).  */
+
 /* Determine whether we stopped at a breakpoint, etc, or whether we
    don't understand this stop.  Result is a chain of bpstat's such that:
 
        if we don't understand the stop, the result is a null pointer.
 
-       if we understand why we stopped, the result is not null, and
-       the first element of the chain contains summary "stop" and
-       "print" flags for the whole chain.
+       if we understand why we stopped, the result is not null.
 
        Each element of the chain refers to a particular breakpoint or
        watchpoint at which we have stopped.  (We may have stopped for
@@ -1021,11 +1089,11 @@ print_it_noop (bs)
 
  */
 
-       
 bpstat
-bpstat_stop_status (pc, frame_address)
+bpstat_stop_status (pc, frame_address, not_a_breakpoint)
      CORE_ADDR *pc;
      FRAME_ADDR frame_address;
+     int not_a_breakpoint;
 {
   register struct breakpoint *b;
   CORE_ADDR bp_addr;
@@ -1049,6 +1117,9 @@ bpstat_stop_status (pc, frame_address)
       if (b->type != bp_watchpoint && b->address != bp_addr)
        continue;
 
+      if (b->type != bp_watchpoint && not_a_breakpoint)
+       continue;
+
       /* Come here if it's a watchpoint, or if the break address matches */
 
       bs = bpstat_alloc (b, bs);       /* Alloc a bpstat to explain stop */
@@ -1193,6 +1264,9 @@ bpstat_what (bs)
     /* We hit the longjmp_resume breakpoint.  */
     long_resume,
 
+    /* We hit the step_resume breakpoint.  */
+    step_resume,
+
     /* This is just used to count how many enums there are.  */
     class_last
     };
@@ -1207,6 +1281,8 @@ bpstat_what (bs)
 #define setlr BPSTAT_WHAT_SET_LONGJMP_RESUME
 #define clrlr BPSTAT_WHAT_CLEAR_LONGJMP_RESUME
 #define clrlrs BPSTAT_WHAT_CLEAR_LONGJMP_RESUME_SINGLE
+#define sr BPSTAT_WHAT_STEP_RESUME
+
 /* "Can't happen."  Might want to print an error message.
    abort() is not out of the question, but chances are GDB is just
    a bit confused, not unusable.  */
@@ -1219,20 +1295,26 @@ bpstat_what (bs)
      (BPSTAT_WHAT_SINGLE type stuff) is handled in proceed() without
      reference to how we stopped.  We retain separate wp_silent and bp_silent
      codes in case we want to change that someday.  */
+
+  /* step_resume entries: a step resume breakpoint overrides another
+     breakpoint of signal handling (see comment in wait_for_inferior
+     at first IN_SIGTRAMP where we set the step_resume breakpoint).  */
+
   static const enum bpstat_what_main_action
     table[(int)class_last][(int)BPSTAT_WHAT_LAST] =
       {
        /*                              old action */
-       /*       keep_c  stop_s  stop_n  single  setlr   clrlr   clrlrs */
-
-/*no_effect*/  {keep_c, stop_s, stop_n, single, setlr , clrlr , clrlrs},
-/*wp_silent*/  {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
-/*wp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
-/*bp_nostop*/  {single, stop_s, stop_n, single, setlr , clrlrs, clrlrs},
-/*bp_silent*/  {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s},
-/*bp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n},
-/*long_jump*/  {setlr , stop_s, stop_n, setlr , err   , err   , err   },
-/*long_resume*/        {clrlr , stop_s, stop_n, clrlrs, err   , err   , err   }
+       /*       keep_c  stop_s  stop_n  single  setlr   clrlr   clrlrs  sr */
+
+/*no_effect*/  {keep_c, stop_s, stop_n, single, setlr , clrlr , clrlrs, sr},
+/*wp_silent*/  {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s, sr},
+/*wp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, sr},
+/*bp_nostop*/  {single, stop_s, stop_n, single, setlr , clrlrs, clrlrs, sr},
+/*bp_silent*/  {stop_s, stop_s, stop_n, stop_s, stop_s, stop_s, stop_s, sr},
+/*bp_noisy*/    {stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, stop_n, sr},
+/*long_jump*/  {setlr , stop_s, stop_n, setlr , err   , err   , err   , sr},
+/*long_resume*/        {clrlr , stop_s, stop_n, clrlrs, err   , err   , err   , sr},
+/*step_resume*/        {sr    , sr    , sr    , sr    , sr    , sr    , sr    , sr}
              };
 #undef keep_c
 #undef stop_s
@@ -1245,6 +1327,7 @@ bpstat_what (bs)
   enum bpstat_what_main_action current_action = BPSTAT_WHAT_KEEP_CHECKING;
   struct bpstat_what retval;
 
+  retval.call_dummy = 0;
   for (; bs != NULL; bs = bs->next)
     {
       enum class bs_class = no_effect;
@@ -1295,9 +1378,7 @@ bpstat_what (bs)
          if (bs->stop)
            {
 #endif
-             retval.step_resume = 1;
-             /* We don't handle this via the main_action.  */
-             bs_class = no_effect;
+             bs_class = step_resume;
 #if 0
            }
          else
@@ -1378,7 +1459,7 @@ breakpoint_1 (bnum, allflag)
        switch (b->type)
          {
          case bp_watchpoint:
-           print_expression (b->exp, stdout);
+           print_expression (b->exp, gdb_stdout);
            break;
 
          case bp_breakpoint:
@@ -1389,7 +1470,7 @@ breakpoint_1 (bnum, allflag)
          case bp_step_resume:
          case bp_call_dummy:
            if (addressprint)
-             printf_filtered ("%s ", local_hex_string_custom(b->address, "08"));
+             printf_filtered ("%s ", local_hex_string_custom ((unsigned long) b->address, "08l"));
 
            last_addr = b->address;
            if (b->source_file)
@@ -1397,28 +1478,30 @@ breakpoint_1 (bnum, allflag)
                sym = find_pc_function (b->address);
                if (sym)
                  {
-                   fputs_filtered ("in ", stdout);
-                   fputs_filtered (SYMBOL_SOURCE_NAME (sym), stdout);
+                   fputs_filtered ("in ", gdb_stdout);
+                   fputs_filtered (SYMBOL_SOURCE_NAME (sym), gdb_stdout);
                    wrap_here (wrap_indent);
-                   fputs_filtered (" at ", stdout);
+                   fputs_filtered (" at ", gdb_stdout);
                  }
-               fputs_filtered (b->source_file, stdout);
+               fputs_filtered (b->source_file, gdb_stdout);
                printf_filtered (":%d", b->line_number);
              }
            else
-             print_address_symbolic (b->address, stdout, demangle, " ");
+             print_address_symbolic (b->address, gdb_stdout, demangle, " ");
            break;
          }
 
        printf_filtered ("\n");
 
        if (b->frame)
-         printf_filtered ("\tstop only in stack frame at %s\n",
-                          local_hex_string(b->frame));
+         {
+           printf_filtered ("\tstop only in stack frame at ");
+           print_address_numeric (b->frame, gdb_stdout);
+           printf_filtered ("\n");
        if (b->cond)
          {
            printf_filtered ("\tstop only if ");
-           print_expression (b->cond, stdout);
+           print_expression (b->cond, gdb_stdout);
            printf_filtered ("\n");
          }
        if (b->ignore_count)
@@ -1426,9 +1509,9 @@ breakpoint_1 (bnum, allflag)
        if ((l = b->commands))
          while (l)
            {
-             fputs_filtered ("\t", stdout);
-             fputs_filtered (l->line, stdout);
-             fputs_filtered ("\n", stdout);
+             fputs_filtered ("\t", gdb_stdout);
+             fputs_filtered (l->line, gdb_stdout);
+             fputs_filtered ("\n", gdb_stdout);
              l = l->next;
            }
       }
@@ -1493,17 +1576,20 @@ describe_other_breakpoints (pc)
       others++;
   if (others > 0)
     {
-      printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
+      printf_filtered ("Note: breakpoint%s ", (others > 1) ? "s" : "");
       ALL_BREAKPOINTS (b)
        if (b->address == pc)
          {
            others--;
-           printf ("%d%s%s ",
-                   b->number,
-                   (b->enable == disabled) ? " (disabled)" : "",
-                   (others > 1) ? "," : ((others == 1) ? " and" : ""));
+           printf_filtered
+             ("%d%s%s ",
+              b->number,
+              (b->enable == disabled) ? " (disabled)" : "",
+              (others > 1) ? "," : ((others == 1) ? " and" : ""));
          }
-      printf ("also set at pc %s.\n", local_hex_string(pc));
+      printf_filtered ("also set at pc ");
+      print_address_numeric (pc, gdb_stdout);
+      printf_filtered (".\n");
     }
 }
 \f
@@ -1569,6 +1655,7 @@ set_raw_breakpoint (sal)
   else
     b->source_file = savestring (sal.symtab->filename,
                                 strlen (sal.symtab->filename));
+  b->thread = -1;
   b->line_number = sal.line;
   b->enable = enabled;
   b->next = 0;
@@ -1733,11 +1820,11 @@ mention (b)
     {
     case bp_watchpoint:
       printf_filtered ("Watchpoint %d: ", b->number);
-      print_expression (b->exp, stdout);
+      print_expression (b->exp, gdb_stdout);
       break;
     case bp_breakpoint:
-      printf_filtered ("Breakpoint %d at %s", b->number,
-                      local_hex_string(b->address));
+      printf_filtered ("Breakpoint %d at ", b->number);
+      print_address_numeric (b->address);
       if (b->source_file)
        printf_filtered (": file %s, line %d.",
                         b->source_file, b->line_number);
@@ -1747,6 +1834,7 @@ mention (b)
     case bp_longjmp:
     case bp_longjmp_resume:
     case bp_step_resume:
+    case bp_call_dummy:
       break;
     }
   printf_filtered ("\n");
@@ -1813,8 +1901,8 @@ break_command_1 (arg, tempflag, from_tty)
   struct cleanup *old_chain;
   struct cleanup *canonical_strings_chain = NULL;
   char **canonical = (char **)NULL;
-  
   int i;
+  int thread;
 
   sals.sals = NULL;
   sals.nelts = 0;
@@ -1876,21 +1964,48 @@ break_command_1 (arg, tempflag, from_tty)
        }
     }
 
+  thread = -1;                 /* No specific thread yet */
+
   /* Resolve all line numbers to PC's, and verify that conditions
      can be parsed, before setting any breakpoints.  */
   for (i = 0; i < sals.nelts; i++)
     {
+      char *tok, *end_tok;
+      int toklen;
+
       resolve_sal_pc (&sals.sals[i]);
       
-      while (arg && *arg)
+      tok = arg;
+
+      while (tok && *tok)
        {
-         if (arg[0] == 'i' && arg[1] == 'f'
-             && (arg[2] == ' ' || arg[2] == '\t'))
+         while (*tok == ' ' || *tok == '\t')
+           tok++;
+
+         end_tok = tok;
+
+         while (*end_tok != ' ' && *end_tok != '\t' && *end_tok != '\000')
+           end_tok++;
+
+         toklen = end_tok - tok;
+
+         if (toklen >= 1 && strncmp (tok, "if", toklen) == 0)
            {
-             arg += 2;
-             cond_start = arg;
-             cond = parse_exp_1 (&arg, block_for_pc (sals.sals[i].pc), 0);
-             cond_end = arg;
+             tok = cond_start = end_tok + 1;
+             cond = parse_exp_1 (&tok, block_for_pc (sals.sals[i].pc), 0);
+             cond_end = tok;
+           }
+         else if (toklen >= 1 && strncmp (tok, "thread", toklen) == 0)
+           {
+             char *tmptok;
+
+             tok = end_tok + 1;
+             tmptok = tok;
+             thread = strtol (tok, &tok, 0);
+             if (tok == tmptok)
+               error ("Junk after thread keyword.");
+             if (!valid_thread_id (thread))
+               error ("Unknown thread %d\n", thread);
            }
          else
            error ("Junk at end of arguments.");
@@ -1914,6 +2029,7 @@ break_command_1 (arg, tempflag, from_tty)
       b->number = breakpoint_count;
       b->type = bp_breakpoint;
       b->cond = cond;
+      b->thread = thread;
 
       /* If a canonical line spec is needed use that instead of the
         command string.  */
@@ -1932,8 +2048,8 @@ break_command_1 (arg, tempflag, from_tty)
 
   if (sals.nelts > 1)
     {
-      printf ("Multiple breakpoints were set.\n");
-      printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
+      printf_filtered ("Multiple breakpoints were set.\n");
+      printf_filtered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
     }
   do_cleanups (old_chain);
 }
@@ -2067,7 +2183,7 @@ until_break_command (arg, from_tty)
       make_cleanup(delete_breakpoint, breakpoint);
     }
   
-  proceed (-1, -1, 0);
+  proceed (-1, TARGET_SIGNAL_DEFAULT, 0);
   do_cleanups(old_chain);
 }
 \f
@@ -2154,7 +2270,7 @@ map_catch_names (args, function)
          goto win;
        }
 #endif
-      printf ("No catch clause for exception %s.\n", p);
+      printf_unfiltered ("No catch clause for exception %s.\n", p);
 #if 0
     win:
 #endif
@@ -2360,8 +2476,8 @@ catch_command_1 (arg, tempflag, from_tty)
 
   if (sals.nelts > 1)
     {
-      printf ("Multiple breakpoints were set.\n");
-      printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
+      printf_unfiltered ("Multiple breakpoints were set.\n");
+      printf_unfiltered ("Use the \"delete\" command to delete unwanted breakpoints.\n");
     }
   free ((PTR)sals.sals);
 }
@@ -2475,15 +2591,15 @@ clear_command (arg, from_tty)
        }
 
       if (found->next) from_tty = 1; /* Always report if deleted more than one */
-      if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
+      if (from_tty) printf_unfiltered ("Deleted breakpoint%s ", found->next ? "s" : "");
       while (found)
        {
-         if (from_tty) printf ("%d ", found->number);
+         if (from_tty) printf_unfiltered ("%d ", found->number);
          b1 = found->next;
          delete_breakpoint (found);
          found = b1;
        }
-      if (from_tty) putchar ('\n');
+      if (from_tty) putchar_unfiltered ('\n');
     }
   free ((PTR)sals.sals);
 }
@@ -2496,7 +2612,8 @@ breakpoint_auto_delete (bs)
      bpstat bs;
 {
   for (; bs; bs = bs->next)
-    if (bs->breakpoint_at && bs->breakpoint_at->disposition == delete)
+    if (bs->breakpoint_at && bs->breakpoint_at->disposition == delete
+       && bs->stop)
       delete_breakpoint (bs->breakpoint_at);
 }
 
@@ -2528,13 +2645,16 @@ delete_breakpoint (bpt)
   if (bpt->inserted)
     {
       ALL_BREAKPOINTS (b)
-       if (b->address == bpt->address && !b->duplicate)
+       if (b->address == bpt->address
+           && !b->duplicate
+           && b->enable != disabled)
          {
            int val;
            val = target_insert_breakpoint (b->address, b->shadow_contents);
            if (val != 0)
              {
-               fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
+               target_terminal_ours_for_output ();
+               fprintf_unfiltered (gdb_stderr, "Cannot insert breakpoint %d:\n", b->number);
                memory_error (val, b->address); /* which bombs us out */
              }
            else
@@ -2555,10 +2675,14 @@ delete_breakpoint (bpt)
     free (bpt->source_file);
 
   if (xgdb_verbose && bpt->type == bp_breakpoint)
-    printf ("breakpoint #%d deleted\n", bpt->number);
+    {
+      target_terminal_ours_for_output ();
+      printf_unfiltered ("breakpoint #%d deleted\n", bpt->number);
+    }
 
   /* Be sure no bpstat's are pointing at it after it's been freed.  */
-  /* FIXME, how can we find all bpstat's?  We just check stop_bpstat for now. */
+  /* FIXME, how can we find all bpstat's?
+     We just check stop_bpstat for now.  */
   for (bs = stop_bpstat; bs; bs = bs->next)
     if (bs->breakpoint_at == bpt)
       bs->breakpoint_at = NULL;
@@ -2697,6 +2821,7 @@ breakpoint_re_set_one (bint)
     case bp_finish:
     case bp_longjmp:
     case bp_longjmp_resume:
+    case bp_call_dummy:
       delete_breakpoint (b);
       break;
     }
@@ -2828,7 +2953,7 @@ map_breakpoint_numbers (args, function)
            function (b);
            goto win;
          }
-      printf ("No breakpoint number %d.\n", num);
+      printf_unfiltered ("No breakpoint number %d.\n", num);
     win:
       p = p1;
     }
@@ -2844,7 +2969,7 @@ enable_breakpoint (bpt)
   bpt->enable = enabled;
 
   if (xgdb_verbose && bpt->type == bp_breakpoint)
-    printf ("breakpoint #%d enabled\n", bpt->number);
+    printf_unfiltered ("breakpoint #%d enabled\n", bpt->number);
 
   check_duplicates (bpt->address);
   if (bpt->type == bp_watchpoint)
This page took 0.031524 seconds and 4 git commands to generate.