| Index: gdb/cli/cli-cmds.c
|
| diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
|
| index c905ca28dc4fb9d2120134d85847b42fd8a2fb67..52a6bc90a78c62f99c5e10511dd7ca490a29a7b0 100644
|
| --- a/gdb/cli/cli-cmds.c
|
| +++ b/gdb/cli/cli-cmds.c
|
| @@ -1,6 +1,6 @@
|
| /* GDB CLI commands.
|
|
|
| - Copyright (C) 2000-2005, 2007-2012 Free Software Foundation, Inc.
|
| + Copyright (C) 2000-2013 Free Software Foundation, Inc.
|
|
|
| This file is part of GDB.
|
|
|
| @@ -27,7 +27,7 @@
|
| #include "target.h" /* For baud_rate, remote_debug and remote_timeout. */
|
| #include "gdb_wait.h" /* For shell escape implementation. */
|
| #include "gdb_regex.h" /* Used by apropos_command. */
|
| -#include "gdb_string.h"
|
| +#include <string.h>
|
| #include "gdb_vfork.h"
|
| #include "linespec.h"
|
| #include "expression.h"
|
| @@ -39,6 +39,7 @@
|
| #include "source.h"
|
| #include "disasm.h"
|
| #include "tracepoint.h"
|
| +#include "filestuff.h"
|
|
|
| #include "ui-out.h"
|
|
|
| @@ -47,6 +48,7 @@
|
| #include "cli/cli-script.h"
|
| #include "cli/cli-setshow.h"
|
| #include "cli/cli-cmds.h"
|
| +#include "cli/cli-utils.h"
|
|
|
| #include "python/python.h"
|
|
|
| @@ -86,8 +88,6 @@ static void edit_command (char *, int);
|
|
|
| static void list_command (char *, int);
|
|
|
| -void apropos_command (char *, int);
|
| -
|
| /* Prototypes for local utility functions */
|
|
|
| static void ambiguous_line_spec (struct symtabs_and_lines *);
|
| @@ -96,7 +96,7 @@ static void filter_sals (struct symtabs_and_lines *);
|
|
|
|
|
| /* Limit the call depth of user-defined commands */
|
| -int max_user_call_depth;
|
| +unsigned int max_user_call_depth;
|
|
|
| /* Define all cmd_list_elements. */
|
|
|
| @@ -116,10 +116,6 @@ struct cmd_list_element *enablelist;
|
|
|
| struct cmd_list_element *disablelist;
|
|
|
| -/* Chain containing all defined toggle subcommands. */
|
| -
|
| -struct cmd_list_element *togglelist;
|
| -
|
| /* Chain containing all defined stop subcommands. */
|
|
|
| struct cmd_list_element *stoplist;
|
| @@ -136,10 +132,6 @@ struct cmd_list_element *detachlist;
|
|
|
| struct cmd_list_element *killlist;
|
|
|
| -/* Chain containing all defined "enable breakpoint" subcommands. */
|
| -
|
| -struct cmd_list_element *enablebreaklist;
|
| -
|
| /* Chain containing all defined set subcommands */
|
|
|
| struct cmd_list_element *setlist;
|
| @@ -188,8 +180,6 @@ struct cmd_list_element *setchecklist;
|
|
|
| struct cmd_list_element *showchecklist;
|
|
|
| -struct cmd_list_element *skiplist;
|
| -
|
| /* Command tracing state. */
|
|
|
| int source_verbose = 0;
|
| @@ -293,8 +283,6 @@ complete_command (char *arg, int from_tty)
|
| unique item once. */
|
| for (ix = 0; VEC_iterate (char_ptr, completions, ix, item); ++ix)
|
| {
|
| - int next_item;
|
| -
|
| if (prev == NULL || strcmp (item, prev) != 0)
|
| {
|
| printf_unfiltered ("%s%s\n", arg_prefix, item);
|
| @@ -319,10 +307,14 @@ is_complete_command (struct cmd_list_element *c)
|
| static void
|
| show_version (char *args, int from_tty)
|
| {
|
| - immediate_quit++;
|
| print_gdb_version (gdb_stdout);
|
| printf_filtered ("\n");
|
| - immediate_quit--;
|
| +}
|
| +
|
| +static void
|
| +show_configuration (char *args, int from_tty)
|
| +{
|
| + print_gdb_configuration (gdb_stdout);
|
| }
|
|
|
| /* Handle the quit command. */
|
| @@ -333,7 +325,7 @@ quit_command (char *args, int from_tty)
|
| if (!quit_confirm ())
|
| error (_("Not confirmed."));
|
|
|
| - disconnect_tracing (from_tty);
|
| + query_if_trace_running (from_tty);
|
|
|
| quit_force (args, from_tty);
|
| }
|
| @@ -361,16 +353,17 @@ cd_command (char *dir, int from_tty)
|
| /* Found something other than leading repetitions of "/..". */
|
| int found_real_path;
|
| char *p;
|
| + struct cleanup *cleanup;
|
|
|
| /* If the new directory is absolute, repeat is a no-op; if relative,
|
| repeat might be useful but is more likely to be a mistake. */
|
| dont_repeat ();
|
|
|
| if (dir == 0)
|
| - error_no_arg (_("new working directory"));
|
| + dir = "~";
|
|
|
| dir = tilde_expand (dir);
|
| - make_cleanup (xfree, dir);
|
| + cleanup = make_cleanup (xfree, dir);
|
|
|
| if (chdir (dir) < 0)
|
| perror_with_name (dir);
|
| @@ -454,6 +447,8 @@ cd_command (char *dir, int from_tty)
|
|
|
| if (from_tty)
|
| pwd_command ((char *) 0, 1);
|
| +
|
| + do_cleanups (cleanup);
|
| }
|
|
|
| /* Show the current value of the 'script-extension' option. */
|
| @@ -475,10 +470,7 @@ show_script_ext_mode (struct ui_file *file, int from_tty,
|
| we tried to open.
|
|
|
| If SEARCH_PATH is non-zero, and the file isn't found in cwd,
|
| - search for it in the source search path.
|
| -
|
| - NOTE: This calls openp which uses xfullpath to compute the full path
|
| - instead of gdb_realpath. Symbolic links are not resolved. */
|
| + search for it in the source search path. */
|
|
|
| int
|
| find_and_open_script (const char *script_file, int search_path,
|
| @@ -487,7 +479,7 @@ find_and_open_script (const char *script_file, int search_path,
|
| char *file;
|
| int fd;
|
| struct cleanup *old_cleanups;
|
| - int search_flags = OPF_TRY_CWD_FIRST;
|
| + int search_flags = OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH;
|
|
|
| file = tilde_expand (script_file);
|
| old_cleanups = make_cleanup (xfree, file);
|
| @@ -579,11 +571,14 @@ source_script_with_search (const char *file, int from_tty, int search_path)
|
| /* The script wasn't found, or was otherwise inaccessible.
|
| If the source command was invoked interactively, throw an
|
| error. Otherwise (e.g. if it was invoked by a script),
|
| - silently ignore the error. */
|
| + just emit a warning, rather than cause an error. */
|
| if (from_tty)
|
| perror_with_name (file);
|
| else
|
| - return;
|
| + {
|
| + perror_warning_with_name (file);
|
| + return;
|
| + }
|
| }
|
|
|
| old_cleanups = make_cleanup (xfree, full_path);
|
| @@ -601,7 +596,7 @@ source_script_with_search (const char *file, int from_tty, int search_path)
|
| for use in loading .gdbinit scripts. */
|
|
|
| void
|
| -source_script (char *file, int from_tty)
|
| +source_script (const char *file, int from_tty)
|
| {
|
| source_script_with_search (file, from_tty, 0);
|
| }
|
| @@ -639,8 +634,7 @@ source_command (char *args, int from_tty)
|
| {
|
| /* Make sure leading white space does not break the
|
| comparisons. */
|
| - while (isspace(args[0]))
|
| - args++;
|
| + args = skip_spaces (args);
|
|
|
| if (args[0] != '-')
|
| break;
|
| @@ -663,9 +657,7 @@ source_command (char *args, int from_tty)
|
| break;
|
| }
|
|
|
| - while (isspace (args[0]))
|
| - args++;
|
| - file = args;
|
| + file = skip_spaces (args);
|
| }
|
|
|
| source_script_with_search (file, from_tty, search_path);
|
| @@ -677,7 +669,7 @@ source_command (char *args, int from_tty)
|
| static void
|
| echo_command (char *text, int from_tty)
|
| {
|
| - char *p = text;
|
| + const char *p = text;
|
| int c;
|
|
|
| if (text)
|
| @@ -738,6 +730,8 @@ shell_escape (char *arg, int from_tty)
|
| {
|
| const char *p, *user_shell;
|
|
|
| + close_most_fds ();
|
| +
|
| if ((user_shell = (char *) getenv ("SHELL")) == NULL)
|
| user_shell = "/bin/sh";
|
|
|
| @@ -770,7 +764,8 @@ edit_command (char *arg, int from_tty)
|
| struct symbol *sym;
|
| char *arg1;
|
| char *editor;
|
| - char *p, *fn;
|
| + char *p;
|
| + const char *fn;
|
|
|
| /* Pull in the current default source line if necessary. */
|
| if (arg == 0)
|
| @@ -822,9 +817,8 @@ edit_command (char *arg, int from_tty)
|
| struct gdbarch *gdbarch;
|
|
|
| if (sal.symtab == 0)
|
| - /* FIXME-32x64--assumes sal.pc fits in long. */
|
| error (_("No source file for address %s."),
|
| - hex_string ((unsigned long) sal.pc));
|
| + paddress (get_current_arch (), sal.pc));
|
|
|
| gdbarch = get_objfile_arch (sal.symtab->objfile);
|
| sym = find_pc_function (sal.pc);
|
| @@ -832,11 +826,13 @@ edit_command (char *arg, int from_tty)
|
| printf_filtered ("%s is in %s (%s:%d).\n",
|
| paddress (gdbarch, sal.pc),
|
| SYMBOL_PRINT_NAME (sym),
|
| - sal.symtab->filename, sal.line);
|
| + symtab_to_filename_for_display (sal.symtab),
|
| + sal.line);
|
| else
|
| printf_filtered ("%s is at %s:%d.\n",
|
| paddress (gdbarch, sal.pc),
|
| - sal.symtab->filename, sal.line);
|
| + symtab_to_filename_for_display (sal.symtab),
|
| + sal.line);
|
| }
|
|
|
| /* If what was given does not imply a symtab, it must be an
|
| @@ -849,16 +845,7 @@ edit_command (char *arg, int from_tty)
|
| if ((editor = (char *) getenv ("EDITOR")) == NULL)
|
| editor = "/bin/ex";
|
|
|
| - /* If we don't already know the full absolute file name of the
|
| - source file, find it now. */
|
| - if (!sal.symtab->fullname)
|
| - {
|
| - fn = symtab_to_fullname (sal.symtab);
|
| - if (!fn)
|
| - fn = "unknown";
|
| - }
|
| - else
|
| - fn = sal.symtab->fullname;
|
| + fn = symtab_to_fullname (sal.symtab);
|
|
|
| /* Quote the file name, in case it has whitespace or other special
|
| characters. */
|
| @@ -994,9 +981,8 @@ list_command (char *arg, int from_tty)
|
| struct gdbarch *gdbarch;
|
|
|
| if (sal.symtab == 0)
|
| - /* FIXME-32x64--assumes sal.pc fits in long. */
|
| error (_("No source file for address %s."),
|
| - hex_string ((unsigned long) sal.pc));
|
| + paddress (get_current_arch (), sal.pc));
|
|
|
| gdbarch = get_objfile_arch (sal.symtab->objfile);
|
| sym = find_pc_function (sal.pc);
|
| @@ -1004,11 +990,11 @@ list_command (char *arg, int from_tty)
|
| printf_filtered ("%s is in %s (%s:%d).\n",
|
| paddress (gdbarch, sal.pc),
|
| SYMBOL_PRINT_NAME (sym),
|
| - sal.symtab->filename, sal.line);
|
| + symtab_to_filename_for_display (sal.symtab), sal.line);
|
| else
|
| printf_filtered ("%s is at %s:%d.\n",
|
| paddress (gdbarch, sal.pc),
|
| - sal.symtab->filename, sal.line);
|
| + symtab_to_filename_for_display (sal.symtab), sal.line);
|
| }
|
|
|
| /* If line was not specified by just a line number, and it does not
|
| @@ -1099,7 +1085,7 @@ disassemble_current_function (int flags)
|
|
|
| frame = get_selected_frame (_("No frame selected."));
|
| gdbarch = get_frame_arch (frame);
|
| - pc = get_frame_pc (frame);
|
| + pc = get_frame_address_in_block (frame);
|
| if (find_pc_partial_function (pc, &name, &low, &high) == 0)
|
| error (_("No function contains program counter for selected frame."));
|
| #if defined(TUI)
|
| @@ -1136,20 +1122,22 @@ disassemble_command (char *arg, int from_tty)
|
| const char *name;
|
| CORE_ADDR pc;
|
| int flags;
|
| + const char *p;
|
|
|
| + p = arg;
|
| name = NULL;
|
| flags = 0;
|
|
|
| - if (arg && *arg == '/')
|
| + if (p && *p == '/')
|
| {
|
| - ++arg;
|
| + ++p;
|
|
|
| - if (*arg == '\0')
|
| + if (*p == '\0')
|
| error (_("Missing modifier."));
|
|
|
| - while (*arg && ! isspace (*arg))
|
| + while (*p && ! isspace (*p))
|
| {
|
| - switch (*arg++)
|
| + switch (*p++)
|
| {
|
| case 'm':
|
| flags |= DISASSEMBLY_SOURCE;
|
| @@ -1162,21 +1150,20 @@ disassemble_command (char *arg, int from_tty)
|
| }
|
| }
|
|
|
| - while (isspace (*arg))
|
| - ++arg;
|
| + p = skip_spaces_const (p);
|
| }
|
|
|
| - if (! arg || ! *arg)
|
| + if (! p || ! *p)
|
| {
|
| flags |= DISASSEMBLY_OMIT_FNAME;
|
| disassemble_current_function (flags);
|
| return;
|
| }
|
|
|
| - pc = value_as_address (parse_to_comma_and_eval (&arg));
|
| - if (arg[0] == ',')
|
| - ++arg;
|
| - if (arg[0] == '\0')
|
| + pc = value_as_address (parse_to_comma_and_eval (&p));
|
| + if (p[0] == ',')
|
| + ++p;
|
| + if (p[0] == '\0')
|
| {
|
| /* One argument. */
|
| if (find_pc_partial_function (pc, &name, &low, &high) == 0)
|
| @@ -1196,14 +1183,13 @@ disassemble_command (char *arg, int from_tty)
|
| /* Two arguments. */
|
| int incl_flag = 0;
|
| low = pc;
|
| - while (isspace (*arg))
|
| - arg++;
|
| - if (arg[0] == '+')
|
| + p = skip_spaces_const (p);
|
| + if (p[0] == '+')
|
| {
|
| - ++arg;
|
| + ++p;
|
| incl_flag = 1;
|
| }
|
| - high = parse_and_eval_address (arg);
|
| + high = parse_and_eval_address (p);
|
| if (incl_flag)
|
| high += low;
|
| }
|
| @@ -1236,7 +1222,7 @@ show_user (char *args, int from_tty)
|
|
|
| if (args)
|
| {
|
| - char *comname = args;
|
| + const char *comname = args;
|
|
|
| c = lookup_cmd (&comname, cmdlist, "", 0, 1);
|
| /* c->user_commands would be NULL if it's a python command. */
|
| @@ -1257,7 +1243,7 @@ show_user (char *args, int from_tty)
|
| /* Search through names of commands and documentations for a certain
|
| regular expression. */
|
|
|
| -void
|
| +static void
|
| apropos_command (char *searchstr, int from_tty)
|
| {
|
| regex_t pattern;
|
| @@ -1314,7 +1300,7 @@ argv_to_dyn_string (char **argv, int n)
|
| Return TRUE if COMMAND exists, unambiguously. Otherwise FALSE. */
|
|
|
| static int
|
| -valid_command_p (char *command)
|
| +valid_command_p (const char *command)
|
| {
|
| struct cmd_list_element *c;
|
|
|
| @@ -1341,14 +1327,14 @@ alias_command (char *args, int from_tty)
|
| char *args2, *equals, *alias, *command;
|
| char **alias_argv, **command_argv;
|
| dyn_string_t alias_dyn_string, command_dyn_string;
|
| - struct cmd_list_element *c;
|
| + struct cleanup *cleanup;
|
| static const char usage[] = N_("Usage: alias [-a] [--] ALIAS = COMMAND");
|
|
|
| if (args == NULL || strchr (args, '=') == NULL)
|
| error (_(usage));
|
|
|
| args2 = xstrdup (args);
|
| - make_cleanup (xfree, args2);
|
| + cleanup = make_cleanup (xfree, args2);
|
| equals = strchr (args2, '=');
|
| *equals = '\0';
|
| alias_argv = gdb_buildargv (args2);
|
| @@ -1424,7 +1410,7 @@ alias_command (char *args, int from_tty)
|
| else
|
| {
|
| dyn_string_t alias_prefix_dyn_string, command_prefix_dyn_string;
|
| - char *alias_prefix, *command_prefix;
|
| + const char *alias_prefix, *command_prefix;
|
| struct cmd_list_element *c_alias, *c_command;
|
|
|
| if (alias_argc != command_argc)
|
| @@ -1455,6 +1441,8 @@ alias_command (char *args, int from_tty)
|
| command_argv[command_argc - 1],
|
| class_alias, abbrev_flag, c_command->prefixlist);
|
| }
|
| +
|
| + do_cleanups (cleanup);
|
| }
|
|
|
| /* Print a list of files and line numbers which a user may choose from
|
| @@ -1469,7 +1457,8 @@ ambiguous_line_spec (struct symtabs_and_lines *sals)
|
|
|
| for (i = 0; i < sals->nelts; ++i)
|
| printf_filtered (_("file: \"%s\", line number: %d\n"),
|
| - sals->sals[i].symtab->filename, sals->sals[i].line);
|
| + symtab_to_filename_for_display (sals->sals[i].symtab),
|
| + sals->sals[i].line);
|
| }
|
|
|
| /* Sort function for filter_sals. */
|
| @@ -1542,13 +1531,14 @@ filter_sals (struct symtabs_and_lines *sals)
|
| ++out;
|
| }
|
| }
|
| - sals->nelts = out;
|
|
|
| if (sals->nelts == 0)
|
| {
|
| xfree (sals->sals);
|
| sals->sals = NULL;
|
| }
|
| + else
|
| + sals->nelts = out;
|
| }
|
|
|
| static void
|
| @@ -1569,30 +1559,6 @@ void
|
| init_cmd_lists (void)
|
| {
|
| max_user_call_depth = 1024;
|
| -
|
| - cmdlist = NULL;
|
| - infolist = NULL;
|
| - enablelist = NULL;
|
| - disablelist = NULL;
|
| - togglelist = NULL;
|
| - stoplist = NULL;
|
| - deletelist = NULL;
|
| - detachlist = NULL;
|
| - enablebreaklist = NULL;
|
| - setlist = NULL;
|
| - unsetlist = NULL;
|
| - showlist = NULL;
|
| - sethistlist = NULL;
|
| - showhistlist = NULL;
|
| - unsethistlist = NULL;
|
| - maintenancelist = NULL;
|
| - maintenanceinfolist = NULL;
|
| - maintenanceprintlist = NULL;
|
| - setprintlist = NULL;
|
| - showprintlist = NULL;
|
| - setchecklist = NULL;
|
| - showchecklist = NULL;
|
| - skiplist = NULL;
|
| }
|
|
|
| static void
|
| @@ -1617,14 +1583,6 @@ show_history_expansion_p (struct ui_file *file, int from_tty,
|
| }
|
|
|
| static void
|
| -show_baud_rate (struct ui_file *file, int from_tty,
|
| - struct cmd_list_element *c, const char *value)
|
| -{
|
| - fprintf_filtered (file, _("Baud rate for remote serial I/O is %s.\n"),
|
| - value);
|
| -}
|
| -
|
| -static void
|
| show_remote_debug (struct ui_file *file, int from_tty,
|
| struct cmd_list_element *c, const char *value)
|
| {
|
| @@ -1651,11 +1609,13 @@ show_max_user_call_depth (struct ui_file *file, int from_tty,
|
| }
|
|
|
|
|
| +
|
| +initialize_file_ftype _initialize_cli_cmds;
|
| +
|
| void
|
| -init_cli_cmds (void)
|
| +_initialize_cli_cmds (void)
|
| {
|
| struct cmd_list_element *c;
|
| - char *source_help_text;
|
|
|
| /* Define the classes of commands.
|
| They will appear in the help list in alphabetical order. */
|
| @@ -1711,30 +1671,6 @@ use \"\\n\" if you want a newline to be printed.\n\
|
| Since leading and trailing whitespace are ignored in command arguments,\n\
|
| if you want to print some you must use \"\\\" before leading whitespace\n\
|
| to be printed or after trailing whitespace."));
|
| - add_com ("document", class_support, document_command, _("\
|
| -Document a user-defined command.\n\
|
| -Give command name as argument. Give documentation on following lines.\n\
|
| -End with a line of just \"end\"."));
|
| - add_com ("define", class_support, define_command, _("\
|
| -Define a new command name. Command name is argument.\n\
|
| -Definition appears on following lines, one command per line.\n\
|
| -End with a line of just \"end\".\n\
|
| -Use the \"document\" command to give documentation for the new command.\n\
|
| -Commands defined in this way may have up to ten arguments."));
|
| -
|
| - source_help_text = xstrprintf (_("\
|
| -Read commands from a file named FILE.\n\
|
| -\n\
|
| -Usage: source [-s] [-v] FILE\n\
|
| --s: search for the script in the source search path,\n\
|
| - even if FILE contains directories.\n\
|
| --v: each command in FILE is echoed as it is executed.\n\
|
| -\n\
|
| -Note that the file \"%s\" is read automatically in this way\n\
|
| -when GDB is started."), gdbinit);
|
| - c = add_cmd ("source", class_support, source_command,
|
| - source_help_text, &cmdlist);
|
| - set_cmd_completer (c, filename_completer);
|
|
|
| add_setshow_enum_cmd ("script-extension", class_support,
|
| script_ext_enums, &script_ext_mode, _("\
|
| @@ -1802,29 +1738,8 @@ the previous command number shown."),
|
| add_cmd ("version", no_set_class, show_version,
|
| _("Show what version of GDB this is."), &showlist);
|
|
|
| - add_com ("while", class_support, while_command, _("\
|
| -Execute nested commands WHILE the conditional expression is non zero.\n\
|
| -The conditional expression must follow the word `while' and must in turn be\n\
|
| -followed by a new line. The nested commands must be entered one per line,\n\
|
| -and should be terminated by the word `end'."));
|
| -
|
| - add_com ("if", class_support, if_command, _("\
|
| -Execute nested commands once IF the conditional expression is non zero.\n\
|
| -The conditional expression must follow the word `if' and must in turn be\n\
|
| -followed by a new line. The nested commands must be entered one per line,\n\
|
| -and should be terminated by the word 'else' or `end'. If an else clause\n\
|
| -is used, the same rules apply to its nested commands as to the first ones."));
|
| -
|
| - /* If target is open when baud changes, it doesn't take effect until
|
| - the next open (I think, not sure). */
|
| - add_setshow_zinteger_cmd ("remotebaud", no_class, &baud_rate, _("\
|
| -Set baud rate for remote serial I/O."), _("\
|
| -Show baud rate for remote serial I/O."), _("\
|
| -This value is used to set the speed of the serial port when debugging\n\
|
| -using remote targets."),
|
| - NULL,
|
| - show_baud_rate,
|
| - &setlist, &showlist);
|
| + add_cmd ("configuration", no_set_class, show_configuration,
|
| + _("Show how GDB was configured at build time."), &showlist);
|
|
|
| add_setshow_zinteger_cmd ("remote", no_class, &remote_debug, _("\
|
| Set debugging of remote protocol."), _("\
|
| @@ -1835,14 +1750,15 @@ is displayed."),
|
| show_remote_debug,
|
| &setdebuglist, &showdebuglist);
|
|
|
| - add_setshow_integer_cmd ("remotetimeout", no_class, &remote_timeout, _("\
|
| + add_setshow_zuinteger_unlimited_cmd ("remotetimeout", no_class,
|
| + &remote_timeout, _("\
|
| Set timeout limit to wait for target to respond."), _("\
|
| Show timeout limit to wait for target to respond."), _("\
|
| This value is used to set the time limit for gdb to wait for a response\n\
|
| from the target."),
|
| - NULL,
|
| - show_remote_timeout,
|
| - &setlist, &showlist);
|
| + NULL,
|
| + show_remote_timeout,
|
| + &setlist, &showlist);
|
|
|
| add_prefix_cmd ("debug", no_class, set_debug,
|
| _("Generic command for setting gdb debugging flags"),
|
| @@ -1899,7 +1815,12 @@ With a /m modifier, source lines are included (if available).\n\
|
| With a /r modifier, raw instructions in hex are included.\n\
|
| With a single argument, the function surrounding that address is dumped.\n\
|
| Two arguments (separated by a comma) are taken as a range of memory to dump,\n\
|
| - in the form of \"start,end\", or \"start,+length\"."));
|
| + in the form of \"start,end\", or \"start,+length\".\n\
|
| +\n\
|
| +Note that the address is interpreted as an expression, not as a location\n\
|
| +like in the \"break\" command.\n\
|
| +So, for example, if you want to disassemble function bar in file foo.c\n\
|
| +you must type \"disassemble 'foo.c'::bar\" and not \"disassemble foo.c:bar\"."));
|
| set_cmd_completer (c, location_completer);
|
| if (xdb_commands)
|
| add_com_alias ("va", "disassemble", class_xdb, 0);
|
| @@ -1916,13 +1837,13 @@ With no argument, show definitions of all user defined commands."), &showlist);
|
| add_com ("apropos", class_support, apropos_command,
|
| _("Search for commands matching a REGEXP"));
|
|
|
| - add_setshow_integer_cmd ("max-user-call-depth", no_class,
|
| + add_setshow_uinteger_cmd ("max-user-call-depth", no_class,
|
| &max_user_call_depth, _("\
|
| Set the max call depth for non-python user-defined commands."), _("\
|
| Show the max call depth for non-python user-defined commands."), NULL,
|
| - NULL,
|
| - show_max_user_call_depth,
|
| - &setlist, &showlist);
|
| + NULL,
|
| + show_max_user_call_depth,
|
| + &setlist, &showlist);
|
|
|
| add_setshow_boolean_cmd ("trace-commands", no_class, &trace_commands, _("\
|
| Set tracing of GDB CLI commands."), _("\
|
| @@ -1946,3 +1867,24 @@ Make \"spe\" an alias of \"set print elements\":\n\
|
| Make \"elms\" an alias of \"elements\" in the \"set print\" command:\n\
|
| alias -a set print elms = set print elements"));
|
| }
|
| +
|
| +void
|
| +init_cli_cmds (void)
|
| +{
|
| + struct cmd_list_element *c;
|
| + char *source_help_text;
|
| +
|
| + source_help_text = xstrprintf (_("\
|
| +Read commands from a file named FILE.\n\
|
| +\n\
|
| +Usage: source [-s] [-v] FILE\n\
|
| +-s: search for the script in the source search path,\n\
|
| + even if FILE contains directories.\n\
|
| +-v: each command in FILE is echoed as it is executed.\n\
|
| +\n\
|
| +Note that the file \"%s\" is read automatically in this way\n\
|
| +when GDB is started."), gdbinit);
|
| + c = add_cmd ("source", class_support, source_command,
|
| + source_help_text, &cmdlist);
|
| + set_cmd_completer (c, filename_completer);
|
| +}
|
|
|