Fix crash when exiting TUI with gdb -tui
[deliverable/binutils-gdb.git] / gdb / annotate.c
index c84c63d96109c4f7d6d9b21ed220aa623f141589..0a4e2f27cac0cb8579cc263f034fd51fe79bd783 100644 (file)
@@ -1,12 +1,11 @@
 /* Annotation routines for GDB.
 /* Annotation routines for GDB.
-   Copyright 1986, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1998, 1999,
-   2000 Free Software Foundation, Inc.
+   Copyright (C) 1986-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 
    This file is part of GDB.
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
@@ -15,9 +14,7 @@
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #include "defs.h"
 #include "annotate.h"
 
 #include "defs.h"
 #include "annotate.h"
 #include "target.h"
 #include "gdbtypes.h"
 #include "breakpoint.h"
 #include "target.h"
 #include "gdbtypes.h"
 #include "breakpoint.h"
+#include "observable.h"
+#include "inferior.h"
+#include "infrun.h"
+#include "top.h"
+#include "source.h"
+#include "objfiles.h"
+#include "source-cache.h"
 \f
 
 \f
 
-/* Prototypes for local functions. */
-
-extern void _initialize_annotate (void);
+/* Prototypes for local functions.  */
 
 static void print_value_flags (struct type *);
 
 
 static void print_value_flags (struct type *);
 
-static void breakpoint_changed (struct breakpoint *);
+static void breakpoint_changed (struct breakpoint *b);
+
 
 
-void (*deprecated_annotate_starting_hook) (void);
-void (*deprecated_annotate_stopped_hook) (void);
 void (*deprecated_annotate_signalled_hook) (void);
 void (*deprecated_annotate_signal_hook) (void);
 void (*deprecated_annotate_signalled_hook) (void);
 void (*deprecated_annotate_signal_hook) (void);
-void (*deprecated_annotate_exited_hook) (void);
 
 
-static int ignore_count_changed = 0;
+/* Booleans indicating whether we've emitted certain notifications.
+   Used to suppress useless repeated notifications until the next time
+   we're ready to accept more commands.  Reset whenever a prompt is
+   displayed.  */
+static int frames_invalid_emitted;
+static int breakpoints_invalid_emitted;
 
 static void
 print_value_flags (struct type *t)
 {
   if (can_dereference (t))
 
 static void
 print_value_flags (struct type *t)
 {
   if (can_dereference (t))
-    printf_filtered ("*");
+    printf_filtered (("*"));
   else
   else
-    printf_filtered ("-");
+    printf_filtered (("-"));
 }
 }
-\f
-void
-breakpoints_changed (void)
+
+static void
+annotate_breakpoints_invalid (void)
 {
 {
-  if (annotation_level > 1)
+  if (annotation_level == 2
+      && (!breakpoints_invalid_emitted
+         || current_ui->prompt_state != PROMPT_BLOCKED))
     {
     {
-      target_terminal_ours ();
-      printf_unfiltered ("\n\032\032breakpoints-invalid\n");
-      if (ignore_count_changed)
-       ignore_count_changed = 0;       /* Avoid multiple break annotations. */
-    }
-}
+      target_terminal::scoped_restore_terminal_state term_state;
+      target_terminal::ours_for_output ();
 
 
-/* The GUI needs to be informed of ignore_count changes, but we don't
-   want to provide successive multiple breakpoints-invalid messages
-   that are all caused by the fact that the ignore count is changing
-   (which could keep the GUI very busy).  One is enough, after the
-   target actually "stops". */
-
-void
-annotate_ignore_count_change (void)
-{
-  if (annotation_level > 1)
-    ignore_count_changed = 1;
+      printf_unfiltered (("\n\032\032breakpoints-invalid\n"));
+      breakpoints_invalid_emitted = 1;
+    }
 }
 
 void
 annotate_breakpoint (int num)
 {
   if (annotation_level > 1)
 }
 
 void
 annotate_breakpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032breakpoint %d\n", num);
+    printf_filtered (("\n\032\032breakpoint %d\n"), num);
 }
 
 void
 annotate_catchpoint (int num)
 {
   if (annotation_level > 1)
 }
 
 void
 annotate_catchpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032catchpoint %d\n", num);
+    printf_filtered (("\n\032\032catchpoint %d\n"), num);
 }
 
 void
 annotate_watchpoint (int num)
 {
   if (annotation_level > 1)
 }
 
 void
 annotate_watchpoint (int num)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032watchpoint %d\n", num);
+    printf_filtered (("\n\032\032watchpoint %d\n"), num);
 }
 
 void
 annotate_starting (void)
 {
 }
 
 void
 annotate_starting (void)
 {
-
-  if (deprecated_annotate_starting_hook)
-    deprecated_annotate_starting_hook ();
-  else
-    {
-      if (annotation_level > 1)
-       {
-         printf_filtered ("\n\032\032starting\n");
-       }
-    }
+  if (annotation_level > 1)
+    printf_filtered (("\n\032\032starting\n"));
 }
 
 void
 annotate_stopped (void)
 {
 }
 
 void
 annotate_stopped (void)
 {
-  if (deprecated_annotate_stopped_hook)
-    deprecated_annotate_stopped_hook ();
-  else
-    {
-      if (annotation_level > 1)
-       printf_filtered ("\n\032\032stopped\n");
-    }
-  if (annotation_level > 1 && ignore_count_changed)
-    {
-      ignore_count_changed = 0;
-      breakpoints_changed ();
-    }
+  if (annotation_level > 1)
+    printf_filtered (("\n\032\032stopped\n"));
 }
 
 void
 annotate_exited (int exitstatus)
 {
 }
 
 void
 annotate_exited (int exitstatus)
 {
-  if (deprecated_annotate_exited_hook)
-    deprecated_annotate_exited_hook ();
-  else
-    {
-      if (annotation_level > 1)
-       printf_filtered ("\n\032\032exited %d\n", exitstatus);
-    }
+  if (annotation_level > 1)
+    printf_filtered (("\n\032\032exited %d\n"), exitstatus);
 }
 
 void
 }
 
 void
@@ -149,35 +121,35 @@ annotate_signalled (void)
     deprecated_annotate_signalled_hook ();
 
   if (annotation_level > 1)
     deprecated_annotate_signalled_hook ();
 
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032signalled\n");
+    printf_filtered (("\n\032\032signalled\n"));
 }
 
 void
 annotate_signal_name (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_signal_name (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032signal-name\n");
+    printf_filtered (("\n\032\032signal-name\n"));
 }
 
 void
 annotate_signal_name_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_signal_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032signal-name-end\n");
+    printf_filtered (("\n\032\032signal-name-end\n"));
 }
 
 void
 annotate_signal_string (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_signal_string (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032signal-string\n");
+    printf_filtered (("\n\032\032signal-string\n"));
 }
 
 void
 annotate_signal_string_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_signal_string_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032signal-string-end\n");
+    printf_filtered (("\n\032\032signal-string-end\n"));
 }
 
 void
 }
 
 void
@@ -187,51 +159,87 @@ annotate_signal (void)
     deprecated_annotate_signal_hook ();
 
   if (annotation_level > 1)
     deprecated_annotate_signal_hook ();
 
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032signal\n");
+    printf_filtered (("\n\032\032signal\n"));
 }
 \f
 void
 annotate_breakpoints_headers (void)
 {
   if (annotation_level == 2)
 }
 \f
 void
 annotate_breakpoints_headers (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032breakpoints-headers\n");
+    printf_filtered (("\n\032\032breakpoints-headers\n"));
 }
 
 void
 annotate_field (int num)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_field (int num)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032field %d\n", num);
+    printf_filtered (("\n\032\032field %d\n"), num);
 }
 
 void
 annotate_breakpoints_table (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_breakpoints_table (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032breakpoints-table\n");
+    printf_filtered (("\n\032\032breakpoints-table\n"));
 }
 
 void
 annotate_record (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_record (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032record\n");
+    printf_filtered (("\n\032\032record\n"));
 }
 
 void
 annotate_breakpoints_table_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_breakpoints_table_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032breakpoints-table-end\n");
+    printf_filtered (("\n\032\032breakpoints-table-end\n"));
 }
 
 void
 annotate_frames_invalid (void)
 }
 
 void
 annotate_frames_invalid (void)
+{
+  if (annotation_level == 2
+      && (!frames_invalid_emitted
+         || current_ui->prompt_state != PROMPT_BLOCKED))
+    {
+      target_terminal::scoped_restore_terminal_state term_state;
+      target_terminal::ours_for_output ();
+
+      printf_unfiltered (("\n\032\032frames-invalid\n"));
+      frames_invalid_emitted = 1;
+    }
+}
+
+void
+annotate_new_thread (void)
 {
   if (annotation_level > 1)
     {
 {
   if (annotation_level > 1)
     {
-      target_terminal_ours ();
-      printf_unfiltered ("\n\032\032frames-invalid\n");
+      printf_unfiltered (("\n\032\032new-thread\n"));
+    }
+}
+
+void
+annotate_thread_changed (void)
+{
+  if (annotation_level > 1)
+    {
+      printf_unfiltered (("\n\032\032thread-changed\n"));
+    }
+}
+
+/* Emit notification on thread exit.  */
+
+static void
+annotate_thread_exited (struct thread_info *t, int silent)
+{
+  if (annotation_level > 1)
+    {
+      printf_filtered(("\n\032\032thread-exited,"
+                       "id=\"%d\",group-id=\"i%d\"\n"),
+                      t->global_num, t->inf->num);
     }
 }
 
     }
 }
 
@@ -240,9 +248,9 @@ annotate_field_begin (struct type *type)
 {
   if (annotation_level == 2)
     {
 {
   if (annotation_level == 2)
     {
-      printf_filtered ("\n\032\032field-begin ");
+      printf_filtered (("\n\032\032field-begin "));
       print_value_flags (type);
       print_value_flags (type);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 }
 
     }
 }
 
@@ -250,35 +258,35 @@ void
 annotate_field_name_end (void)
 {
   if (annotation_level == 2)
 annotate_field_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032field-name-end\n");
+    printf_filtered (("\n\032\032field-name-end\n"));
 }
 
 void
 annotate_field_value (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_field_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032field-value\n");
+    printf_filtered (("\n\032\032field-value\n"));
 }
 
 void
 annotate_field_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_field_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032field-end\n");
+    printf_filtered (("\n\032\032field-end\n"));
 }
 \f
 void
 annotate_quit (void)
 {
   if (annotation_level > 1)
 }
 \f
 void
 annotate_quit (void)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032quit\n");
+    printf_filtered (("\n\032\032quit\n"));
 }
 
 void
 annotate_error (void)
 {
   if (annotation_level > 1)
 }
 
 void
 annotate_error (void)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032error\n");
+    printf_filtered (("\n\032\032error\n"));
 }
 
 void
 }
 
 void
@@ -293,9 +301,9 @@ annotate_value_history_begin (int histindex, struct type *type)
 {
   if (annotation_level == 2)
     {
 {
   if (annotation_level == 2)
     {
-      printf_filtered ("\n\032\032value-history-begin %d ", histindex);
+      printf_filtered (("\n\032\032value-history-begin %d "), histindex);
       print_value_flags (type);
       print_value_flags (type);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 }
 
     }
 }
 
@@ -304,9 +312,9 @@ annotate_value_begin (struct type *type)
 {
   if (annotation_level == 2)
     {
 {
   if (annotation_level == 2)
     {
-      printf_filtered ("\n\032\032value-begin ");
+      printf_filtered (("\n\032\032value-begin "));
       print_value_flags (type);
       print_value_flags (type);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 }
 
     }
 }
 
@@ -314,84 +322,84 @@ void
 annotate_value_history_value (void)
 {
   if (annotation_level == 2)
 annotate_value_history_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032value-history-value\n");
+    printf_filtered (("\n\032\032value-history-value\n"));
 }
 
 void
 annotate_value_history_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_value_history_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032value-history-end\n");
+    printf_filtered (("\n\032\032value-history-end\n"));
 }
 
 void
 annotate_value_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_value_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032value-end\n");
+    printf_filtered (("\n\032\032value-end\n"));
 }
 
 void
 annotate_display_begin (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-begin\n");
+    printf_filtered (("\n\032\032display-begin\n"));
 }
 
 void
 annotate_display_number_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_number_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-number-end\n");
+    printf_filtered (("\n\032\032display-number-end\n"));
 }
 
 void
 annotate_display_format (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_format (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-format\n");
+    printf_filtered (("\n\032\032display-format\n"));
 }
 
 void
 annotate_display_expression (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_expression (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-expression\n");
+    printf_filtered (("\n\032\032display-expression\n"));
 }
 
 void
 annotate_display_expression_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_expression_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-expression-end\n");
+    printf_filtered (("\n\032\032display-expression-end\n"));
 }
 
 void
 annotate_display_value (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_value (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-value\n");
+    printf_filtered (("\n\032\032display-value\n"));
 }
 
 void
 annotate_display_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_display_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032display-end\n");
+    printf_filtered (("\n\032\032display-end\n"));
 }
 
 void
 annotate_arg_begin (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_arg_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032arg-begin\n");
+    printf_filtered (("\n\032\032arg-begin\n"));
 }
 
 void
 annotate_arg_name_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_arg_name_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032arg-name-end\n");
+    printf_filtered (("\n\032\032arg-name-end\n"));
 }
 
 void
 }
 
 void
@@ -399,9 +407,9 @@ annotate_arg_value (struct type *type)
 {
   if (annotation_level == 2)
     {
 {
   if (annotation_level == 2)
     {
-      printf_filtered ("\n\032\032arg-value ");
+      printf_filtered (("\n\032\032arg-value "));
       print_value_flags (type);
       print_value_flags (type);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 }
 
     }
 }
 
@@ -409,134 +417,161 @@ void
 annotate_arg_end (void)
 {
   if (annotation_level == 2)
 annotate_arg_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032arg-end\n");
+    printf_filtered (("\n\032\032arg-end\n"));
 }
 
 }
 
-void
-annotate_source (char *filename, int line, int character, int mid, CORE_ADDR pc)
+static void
+annotate_source (const char *filename, int line, int character, int mid,
+                struct gdbarch *gdbarch, CORE_ADDR pc)
 {
   if (annotation_level > 1)
 {
   if (annotation_level > 1)
-    printf_filtered ("\n\032\032source ");
+    printf_filtered (("\n\032\032source "));
   else
   else
-    printf_filtered ("\032\032");
+    printf_filtered (("\032\032"));
 
 
-  printf_filtered ("%s:%d:%d:%s:0x", filename,
-                  line, character,
-                  mid ? "middle" : "beg");
-  print_address_numeric (pc, 0, gdb_stdout);
-  printf_filtered ("\n");
+  printf_filtered (("%s:%d:%d:%s:%s\n"), filename, line, character,
+                  mid ? "middle" : "beg", paddress (gdbarch, pc));
 }
 
 }
 
-void
-annotate_frame_begin (int level, CORE_ADDR pc)
+/* See annotate.h.  */
+
+bool
+annotate_source_line (struct symtab *s, int line, int mid_statement,
+                     CORE_ADDR pc)
 {
 {
-  if (annotation_level == 2)
+  if (annotation_level > 0)
     {
     {
-      printf_filtered ("\n\032\032frame-begin %d 0x", level);
-      print_address_numeric (pc, 0, gdb_stdout);
-      printf_filtered ("\n");
+      const std::vector<off_t> *offsets;
+      if (!g_source_cache.get_line_charpos (s, &offsets))
+       return false;
+      if (line > offsets->size ())
+       return false;
+
+      annotate_source (s->fullname, line, (int) (*offsets)[line - 1],
+                      mid_statement, SYMTAB_OBJFILE (s)->arch (),
+                      pc);
+
+      /* Update the current symtab and line.  */
+      symtab_and_line sal;
+      sal.pspace = SYMTAB_PSPACE (s);
+      sal.symtab = s;
+      sal.line = line;
+      set_current_source_symtab_and_line (sal);
+
+      return true;
     }
     }
+
+  return false;
+}
+
+
+void
+annotate_frame_begin (int level, struct gdbarch *gdbarch, CORE_ADDR pc)
+{
+  if (annotation_level > 1)
+    printf_filtered (("\n\032\032frame-begin %d %s\n"),
+                    level, paddress (gdbarch, pc));
 }
 
 void
 annotate_function_call (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_function_call (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032function-call\n");
+    printf_filtered (("\n\032\032function-call\n"));
 }
 
 void
 annotate_signal_handler_caller (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_signal_handler_caller (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032signal-handler-caller\n");
+    printf_filtered (("\n\032\032signal-handler-caller\n"));
 }
 
 void
 annotate_frame_address (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_address (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-address\n");
+    printf_filtered (("\n\032\032frame-address\n"));
 }
 
 void
 annotate_frame_address_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_address_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-address-end\n");
+    printf_filtered (("\n\032\032frame-address-end\n"));
 }
 
 void
 annotate_frame_function_name (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_function_name (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-function-name\n");
+    printf_filtered (("\n\032\032frame-function-name\n"));
 }
 
 void
 annotate_frame_args (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_args (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-args\n");
+    printf_filtered (("\n\032\032frame-args\n"));
 }
 
 void
 annotate_frame_source_begin (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_source_begin (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-source-begin\n");
+    printf_filtered (("\n\032\032frame-source-begin\n"));
 }
 
 void
 annotate_frame_source_file (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_source_file (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-source-file\n");
+    printf_filtered (("\n\032\032frame-source-file\n"));
 }
 
 void
 annotate_frame_source_file_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_source_file_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-source-file-end\n");
+    printf_filtered (("\n\032\032frame-source-file-end\n"));
 }
 
 void
 annotate_frame_source_line (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_source_line (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-source-line\n");
+    printf_filtered (("\n\032\032frame-source-line\n"));
 }
 
 void
 annotate_frame_source_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_source_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-source-end\n");
+    printf_filtered (("\n\032\032frame-source-end\n"));
 }
 
 void
 annotate_frame_where (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_where (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-where\n");
+    printf_filtered (("\n\032\032frame-where\n"));
 }
 
 void
 annotate_frame_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_frame_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032frame-end\n");
+    printf_filtered (("\n\032\032frame-end\n"));
 }
 \f
 void
 }
 \f
 void
-annotate_array_section_begin (int index, struct type *elttype)
+annotate_array_section_begin (int idx, struct type *elttype)
 {
   if (annotation_level == 2)
     {
 {
   if (annotation_level == 2)
     {
-      printf_filtered ("\n\032\032array-section-begin %d ", index);
+      printf_filtered (("\n\032\032array-section-begin %d "), idx);
       print_value_flags (elttype);
       print_value_flags (elttype);
-      printf_filtered ("\n");
+      printf_filtered (("\n"));
     }
 }
 
     }
 }
 
@@ -544,42 +579,56 @@ void
 annotate_elt_rep (unsigned int repcount)
 {
   if (annotation_level == 2)
 annotate_elt_rep (unsigned int repcount)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032elt-rep %u\n", repcount);
+    printf_filtered (("\n\032\032elt-rep %u\n"), repcount);
 }
 
 void
 annotate_elt_rep_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_elt_rep_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032elt-rep-end\n");
+    printf_filtered (("\n\032\032elt-rep-end\n"));
 }
 
 void
 annotate_elt (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_elt (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032elt\n");
+    printf_filtered (("\n\032\032elt\n"));
 }
 
 void
 annotate_array_section_end (void)
 {
   if (annotation_level == 2)
 }
 
 void
 annotate_array_section_end (void)
 {
   if (annotation_level == 2)
-    printf_filtered ("\n\032\032array-section-end\n");
+    printf_filtered (("\n\032\032array-section-end\n"));
+}
+
+/* Called when GDB is about to display the prompt.  Used to reset
+   annotation suppression whenever we're ready to accept new
+   frontend/user commands.  */
+
+void
+annotate_display_prompt (void)
+{
+  frames_invalid_emitted = 0;
+  breakpoints_invalid_emitted = 0;
 }
 
 static void
 breakpoint_changed (struct breakpoint *b)
 {
 }
 
 static void
 breakpoint_changed (struct breakpoint *b)
 {
-  breakpoints_changed ();
+  if (b->number <= 0)
+    return;
+
+  annotate_breakpoints_invalid ();
 }
 
 }
 
+void _initialize_annotate ();
 void
 void
-_initialize_annotate (void)
+_initialize_annotate ()
 {
 {
-  if (annotation_level > 1)
-    {
-      deprecated_delete_breakpoint_hook = breakpoint_changed;
-      deprecated_modify_breakpoint_hook = breakpoint_changed;
-    }
+  gdb::observers::breakpoint_created.attach (breakpoint_changed);
+  gdb::observers::breakpoint_deleted.attach (breakpoint_changed);
+  gdb::observers::breakpoint_modified.attach (breakpoint_changed);
+  gdb::observers::thread_exit.attach (annotate_thread_exited);
 }
 }
This page took 0.033562 seconds and 4 git commands to generate.