summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog13
-rw-r--r--gdb/annotate.c39
-rw-r--r--gdb/annotate.h2
-rw-r--r--gdb/event-top.c3
4 files changed, 55 insertions, 2 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fd4e37f3925..48f5ad04001 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,18 @@
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.
(annotate_breakpoints_changed): Don't clear ignore_count_changed.
(annotate_ignore_count_change): Delete.
diff --git a/gdb/annotate.c b/gdb/annotate.c
index 25f765986c6..387467b1ad9 100644
--- a/gdb/annotate.c
+++ b/gdb/annotate.c
@@ -23,6 +23,7 @@
#include "gdbtypes.h"
#include "breakpoint.h"
#include "observer.h"
+#include "inferior.h"
/* Prototypes for local functions. */
@@ -37,6 +38,23 @@ static void breakpoint_changed (struct breakpoint *b);
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)
{
@@ -49,10 +67,13 @@ 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;
}
}
@@ -184,10 +205,13 @@ annotate_breakpoints_table_end (void)
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;
}
}
@@ -537,6 +561,17 @@ annotate_array_section_end (void)
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)
{
diff --git a/gdb/annotate.h b/gdb/annotate.h
index ea8ad15c8f7..73a3098b22c 100644
--- a/gdb/annotate.h
+++ b/gdb/annotate.h
@@ -44,6 +44,8 @@ extern void annotate_frames_invalid (void);
extern void annotate_new_thread (void);
extern void annotate_thread_changed (void);
+extern void annotate_display_prompt (void);
+
struct type;
extern void annotate_field_begin (struct type *);
diff --git a/gdb/event-top.c b/gdb/event-top.c
index 1b75bbd806c..9f415b2326b 100644
--- a/gdb/event-top.c
+++ b/gdb/event-top.c
@@ -35,6 +35,7 @@
#include "observer.h"
#include "continuations.h"
#include "gdbcmd.h" /* for dont_repeat() */
+#include "annotate.h"
/* readline include files. */
#include "readline/readline.h"
@@ -231,6 +232,8 @@ display_gdb_prompt (char *new_prompt)
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 ();