aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2011-12-16 20:29:28 +0000
committerPedro Alves <palves@redhat.com>2011-12-16 20:29:28 +0000
commit77cce10fc22521660c7b1e42061693b69a62c449 (patch)
tree0f9365df5b876f17fe5f8107b221ea0242b7ff50
parentf4aa2101983cbddf6c79da013b085940f04decd5 (diff)
downloadgdb-77cce10fc22521660c7b1e42061693b69a62c449.zip
gdb-77cce10fc22521660c7b1e42061693b69a62c449.tar.gz
gdb-77cce10fc22521660c7b1e42061693b69a62c449.tar.bz2
2011-12-16 Pedro Alves <pedro@codesourcery.com>
* inf-loop.c: Include top.h. (inferior_event_handler): Call check_frame_language. * top.c (check_frame_language_change): New, factored out from ... (execute_command): ... this. Use check_frame_language_change. * top.h (check_frame_language_change): Declare.
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/inf-loop.c6
-rw-r--r--gdb/top.c74
-rw-r--r--gdb/top.h2
4 files changed, 54 insertions, 36 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 19ff1c5..2898cde 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2011-12-16 Pedro Alves <pedro@codesourcery.com>
+
+ * inf-loop.c: Include top.h.
+ (inferior_event_handler): Call check_frame_language.
+ * top.c (check_frame_language_change): New, factored out from ...
+ (execute_command): ... this. Use check_frame_language_change.
+ * top.h (check_frame_language_change): Declare.
+
2011-12-16 asmwarrior <asmwarrior@gmail.com> (obvious fix)
* windows-nat.c (cygwin_get_dr, cygwin_get_dr7): Add missing
diff --git a/gdb/inf-loop.c b/gdb/inf-loop.c
index 8e49e91..c768400 100644
--- a/gdb/inf-loop.c
+++ b/gdb/inf-loop.c
@@ -30,6 +30,7 @@
#include "gdbthread.h"
#include "continuations.h"
#include "interps.h"
+#include "top.h"
static int fetch_inferior_event_wrapper (gdb_client_data client_data);
@@ -107,10 +108,7 @@ inferior_event_handler (enum inferior_event_type event_type,
{
volatile struct gdb_exception e;
- if (info_verbose
- && current_language != expected_language
- && language_mode == language_mode_auto)
- language_info (1); /* Print what changed. */
+ check_frame_language_change ();
/* Don't propagate breakpoint commands errors. Either we're
stopping or some command resumes the inferior. The user will
diff --git a/gdb/top.c b/gdb/top.c
index ec475a8..f1b8b3c 100644
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -362,6 +362,47 @@ prepare_execute_command (void)
return cleanup;
}
+/* Tell the user if the language has changed (except first time) after
+ executing a command. */
+
+void
+check_frame_language_change (void)
+{
+ static int warned = 0;
+
+ /* First make sure that a new frame has been selected, in case the
+ command or the hooks changed the program state. */
+ deprecated_safe_get_selected_frame ();
+ if (current_language != expected_language)
+ {
+ if (language_mode == language_mode_auto && info_verbose)
+ {
+ language_info (1); /* Print what changed. */
+ }
+ warned = 0;
+ }
+
+ /* Warn the user if the working language does not match the language
+ of the current frame. Only warn the user if we are actually
+ running the program, i.e. there is a stack. */
+ /* FIXME: This should be cacheing the frame and only running when
+ the frame changes. */
+
+ if (has_stack_frames ())
+ {
+ enum language flang;
+
+ flang = get_frame_language ();
+ if (!warned
+ && flang != language_unknown
+ && flang != current_language->la_language)
+ {
+ printf_filtered ("%s\n", lang_frame_mismatch_warn);
+ warned = 1;
+ }
+ }
+}
+
/* Execute the line P as a command, in the current user context.
Pass FROM_TTY as second argument to the defining function. */
@@ -370,8 +411,6 @@ execute_command (char *p, int from_tty)
{
struct cleanup *cleanup_if_error, *cleanup;
struct cmd_list_element *c;
- enum language flang;
- static int warned = 0;
char *line;
cleanup_if_error = make_bpstat_clear_actions_cleanup ();
@@ -458,36 +497,7 @@ execute_command (char *p, int from_tty)
}
- /* Tell the user if the language has changed (except first time).
- First make sure that a new frame has been selected, in case this
- command or the hooks changed the program state. */
- deprecated_safe_get_selected_frame ();
- if (current_language != expected_language)
- {
- if (language_mode == language_mode_auto && info_verbose)
- {
- language_info (1); /* Print what changed. */
- }
- warned = 0;
- }
-
- /* Warn the user if the working language does not match the
- language of the current frame. Only warn the user if we are
- actually running the program, i.e. there is a stack. */
- /* FIXME: This should be cacheing the frame and only running when
- the frame changes. */
-
- if (has_stack_frames ())
- {
- flang = get_frame_language ();
- if (!warned
- && flang != language_unknown
- && flang != current_language->la_language)
- {
- printf_filtered ("%s\n", lang_frame_mismatch_warn);
- warned = 1;
- }
- }
+ check_frame_language_change ();
do_cleanups (cleanup);
discard_cleanups (cleanup_if_error);
diff --git a/gdb/top.h b/gdb/top.h
index 3e6679c..8806402 100644
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -44,6 +44,8 @@ extern void quit_command (char *, int);
extern void quit_cover (void);
extern void execute_command (char *, int);
+extern void check_frame_language_change (void);
+
/* Prepare for execution of a command.
Call this before every command, CLI or MI.
Returns a cleanup to be run after the command is completed. */