+2013-01-22 Pedro Alves <palves@redhat.com>
+
+ * annotate.c: Include "inferior.h".
+ (frames_invalid_emitted)
+ (breakpoints_invalid_emitted): New globals.
+ (async_background_execution_p): New function.
+ (annotate_breakpoints_changed, annotate_frames_invalid): Skip
+ emitting the annotation if it has already been emitted.
+ (annotate_display_prompt): New function.
+ * annotate.h (annotate_display_prompt): New declaration.
+ * event-top.c: Include annotate.h.
+ (display_gdb_prompt): Call annotate_display_prompt.
+
2013-01-22 Pedro Alves <palves@redhat.com>
* annotate.c (ignore_count_changed): Delete.
#include "gdbtypes.h"
#include "breakpoint.h"
#include "observer.h"
+#include "inferior.h"
\f
/* Prototypes for local functions. */
void (*deprecated_annotate_signalled_hook) (void);
void (*deprecated_annotate_signal_hook) (void);
+/* 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;
+
+/* True if the target can async, and a synchronous execution command
+ is not in progress. If true, input is accepted, so don't suppress
+ annotations. */
+
+static int
+async_background_execution_p (void)
+{
+ return (target_can_async_p () && !sync_execution);
+}
+
static void
print_value_flags (struct type *t)
{
void
annotate_breakpoints_changed (void)
{
- if (annotation_level == 2)
+ if (annotation_level == 2
+ && (!breakpoints_invalid_emitted
+ || async_background_execution_p ()))
{
target_terminal_ours ();
printf_unfiltered (("\n\032\032breakpoints-invalid\n"));
+ breakpoints_invalid_emitted = 1;
}
}
void
annotate_frames_invalid (void)
{
- if (annotation_level == 2)
+ if (annotation_level == 2
+ && (!frames_invalid_emitted
+ || async_background_execution_p ()))
{
target_terminal_ours ();
printf_unfiltered (("\n\032\032frames-invalid\n"));
+ frames_invalid_emitted = 1;
}
}
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)
{
#include "observer.h"
#include "continuations.h"
#include "gdbcmd.h" /* for dont_repeat() */
+#include "annotate.h"
/* readline include files. */
#include "readline/readline.h"
char *actual_gdb_prompt = NULL;
struct cleanup *old_chain;
+ annotate_display_prompt ();
+
/* Reset the nesting depth used when trace-commands is set. */
reset_command_nest_depth ();