| Index: gdb/top.c
|
| diff --git a/gdb/top.c b/gdb/top.c
|
| index 903795eff4132c5e47b4f201fb8b4ee62320a9ad..061ad48f41e756cc22032490543f7a77037e8d10 100644
|
| --- a/gdb/top.c
|
| +++ b/gdb/top.c
|
| @@ -47,6 +47,7 @@
|
| #include "gdbthread.h"
|
| #include "python/python.h"
|
| #include "interps.h"
|
| +#include "observer.h"
|
|
|
| /* readline include files. */
|
| #include "readline/readline.h"
|
| @@ -98,11 +99,13 @@ int use_windows = 0;
|
|
|
| extern char lang_frame_mismatch_warn[]; /* language.c */
|
|
|
| -/* Flag for whether we want all the "from_tty" gubbish printed. */
|
| +/* Flag for whether we want to confirm potentially dangerous
|
| + operations. Default is yes. */
|
| +
|
| +int confirm = 1;
|
|
|
| -int caution = 1; /* Default is yes, sigh. */
|
| static void
|
| -show_caution (struct ui_file *file, int from_tty,
|
| +show_confirm (struct ui_file *file, int from_tty,
|
| struct cmd_list_element *c, const char *value)
|
| {
|
| fprintf_filtered (file, _("Whether to confirm potentially "
|
| @@ -289,9 +292,9 @@ void (*deprecated_context_hook) (int id);
|
| /* static */ void
|
| quit_cover (void)
|
| {
|
| - caution = 0; /* Throw caution to the wind -- we're exiting.
|
| - This prevents asking the user dumb
|
| - questions. */
|
| + /* Stop asking user for confirmation --- we're exiting. This
|
| + prevents asking the user dumb questions. */
|
| + confirm = 0;
|
| quit_command ((char *) 0, 0);
|
| }
|
| #endif /* defined SIGHUP */
|
| @@ -360,6 +363,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. */
|
|
|
| @@ -368,8 +412,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 ();
|
| @@ -429,16 +471,17 @@ execute_command (char *p, int from_tty)
|
| if (c->flags & DEPRECATED_WARN_USER)
|
| deprecated_cmd_warning (&line);
|
|
|
| - if (c->class == class_user)
|
| + /* c->user_commands would be NULL in the case of a python command. */
|
| + if (c->class == class_user && c->user_commands)
|
| execute_user_command (c, arg);
|
| else if (c->type == set_cmd || c->type == show_cmd)
|
| - do_setshow_command (arg, from_tty & caution, c);
|
| + do_setshow_command (arg, from_tty, c);
|
| else if (!cmd_func_p (c))
|
| error (_("That is not a command, just a help topic."));
|
| else if (deprecated_call_command_hook)
|
| - deprecated_call_command_hook (c, arg, from_tty & caution);
|
| + deprecated_call_command_hook (c, arg, from_tty);
|
| else
|
| - cmd_func (c, arg, from_tty & caution);
|
| + cmd_func (c, arg, from_tty);
|
|
|
| /* If the interpreter is in sync mode (we're running a user
|
| command's list, running command hooks or similars), and we
|
| @@ -456,36 +499,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);
|
| @@ -1284,8 +1298,8 @@ quit_target (void *arg)
|
| if (write_history_p && history_filename)
|
| write_history (history_filename);
|
|
|
| - do_final_cleanups (ALL_CLEANUPS); /* Do any final cleanups before
|
| - exiting. */
|
| + do_final_cleanups (all_cleanups ()); /* Do any final cleanups before
|
| + exiting. */
|
| return 0;
|
| }
|
|
|
| @@ -1546,6 +1560,15 @@ show_exec_done_display_p (struct ui_file *file, int from_tty,
|
| "asynchronous execution commands is %s.\n"),
|
| value);
|
| }
|
| +
|
| +/* "set" command for the gdb_datadir configuration variable. */
|
| +
|
| +static void
|
| +set_gdb_datadir (char *args, int from_tty, struct cmd_list_element *c)
|
| +{
|
| + observer_notify_gdb_datadir_changed ();
|
| +}
|
| +
|
| static void
|
| init_main (void)
|
| {
|
| @@ -1623,11 +1646,11 @@ Show the filename in which to record the command history"), _("\
|
| show_history_filename,
|
| &sethistlist, &showhistlist);
|
|
|
| - add_setshow_boolean_cmd ("confirm", class_support, &caution, _("\
|
| + add_setshow_boolean_cmd ("confirm", class_support, &confirm, _("\
|
| Set whether to confirm potentially dangerous operations."), _("\
|
| Show whether to confirm potentially dangerous operations."), NULL,
|
| NULL,
|
| - show_caution,
|
| + show_confirm,
|
| &setlist, &showlist);
|
|
|
| add_setshow_zinteger_cmd ("annotate", class_obscure, &annotation_level, _("\
|
| @@ -1653,7 +1676,7 @@ Use \"on\" to enable the notification, and \"off\" to disable it."),
|
| _("Show GDB's data directory."),
|
| _("\
|
| When set, GDB uses the specified path to search for data files."),
|
| - NULL, NULL,
|
| + set_gdb_datadir, NULL,
|
| &setlist,
|
| &showlist);
|
| }
|
|
|