X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fmaint.c;h=d016dc42ea0f1704db2bb22fc623cffb8cf7989b;hb=d9cc5895fd5107150e2dbdab3ea1bb58c190ef24;hp=3e1b63f6765edc35acc6814ce830135377d775f8;hpb=a532ca62825cc3e09712af03d0dfaaf4ae96ffbf;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/maint.c b/gdb/maint.c index 3e1b63f676..d016dc42ea 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -1,6 +1,8 @@ /* Support for GDB maintenance commands. - Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001 - Free Software Foundation, Inc. + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, + 2003, 2004, 2007 Free Software Foundation, Inc. + Written by Fred Fish at Cygnus Support. This file is part of GDB. @@ -17,8 +19,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ #include "defs.h" @@ -36,12 +38,12 @@ #include "objfiles.h" #include "value.h" +#include "cli/cli-decode.h" + extern void _initialize_maint_cmds (void); static void maintenance_command (char *, int); -static void maintenance_dump_me (char *, int); - static void maintenance_internal_error (char *args, int from_tty); static void maintenance_demangle (char *, int); @@ -52,8 +54,6 @@ static void maintenance_space_display (char *, int); static void maintenance_info_command (char *, int); -static void print_section_table (bfd *, asection *, void *); - static void maintenance_info_sections (char *, int); static void maintenance_print_command (char *, int); @@ -67,6 +67,12 @@ static void maintenance_do_deprecate (char *, int); and one with slow communications. */ int watchdog = 0; +static void +show_watchdog (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Watchdog timer is %s.\n"), value); +} /* @@ -85,12 +91,11 @@ int watchdog = 0; static void maintenance_command (char *args, int from_tty) { - printf_unfiltered ("\"maintenance\" must be followed by the name of a maintenance command.\n"); + printf_unfiltered (_("\"maintenance\" must be followed by the name of a maintenance command.\n")); help_list (maintenancelist, "maintenance ", -1, gdb_stdout); } #ifndef _WIN32 -/* ARGSUSED */ static void maintenance_dump_me (char *args, int from_tty) { @@ -116,8 +121,18 @@ maintenance_dump_me (char *args, int from_tty) static void maintenance_internal_error (char *args, int from_tty) { - internal_error (__FILE__, __LINE__, - "internal maintenance"); + internal_error (__FILE__, __LINE__, "%s", (args == NULL ? "" : args)); +} + +/* Stimulate the internal error mechanism that GDB uses when an + internal problem is detected. Allows testing of the mechanism. + Also useful when the user wants to drop a core file but not exit + GDB. */ + +static void +maintenance_internal_warning (char *args, int from_tty) +{ + internal_warning (__FILE__, __LINE__, "%s", (args == NULL ? "" : args)); } /* Someday we should allow demangling for things other than just @@ -135,11 +150,12 @@ maintenance_demangle (char *args, int from_tty) if (args == NULL || *args == '\0') { - printf_unfiltered ("\"maintenance demangle\" takes an argument to demangle.\n"); + printf_unfiltered (_("\"maintenance demangle\" takes an argument to demangle.\n")); } else { - demangled = cplus_demangle (args, DMGL_ANSI | DMGL_PARAMS); + demangled = language_demangle (current_language, args, + DMGL_ANSI | DMGL_PARAMS); if (demangled != NULL) { printf_unfiltered ("%s\n", demangled); @@ -147,7 +163,7 @@ maintenance_demangle (char *args, int from_tty) } else { - printf_unfiltered ("Can't demangle \"%s\"\n", args); + printf_unfiltered (_("Can't demangle \"%s\"\n"), args); } } } @@ -158,7 +174,7 @@ maintenance_time_display (char *args, int from_tty) extern int display_time; if (args == NULL || *args == '\0') - printf_unfiltered ("\"maintenance time\" takes a numeric argument.\n"); + printf_unfiltered (_("\"maintenance time\" takes a numeric argument.\n")); else display_time = strtol (args, NULL, 10); } @@ -178,33 +194,32 @@ maintenance_space_display (char *args, int from_tty) allow_unknown 0. Therefore, its own definition is called only for "maintenance info" with no args. */ -/* ARGSUSED */ static void maintenance_info_command (char *arg, int from_tty) { - printf_unfiltered ("\"maintenance info\" must be followed by the name of an info command.\n"); + printf_unfiltered (_("\"maintenance info\" must be followed by the name of an info command.\n")); help_list (maintenanceinfolist, "maintenance info ", -1, gdb_stdout); } /* Mini tokenizing lexer for 'maint info sections' command. */ static int -match_substring (char *string, char *substr) +match_substring (const char *string, const char *substr) { int substr_len = strlen(substr); - char *tok; + const char *tok; while ((tok = strstr (string, substr)) != NULL) { /* Got a partial match. Is it a whole word? */ - if (tok == string || - tok[-1] == ' ' || - tok[-1] == '\t') + if (tok == string + || tok[-1] == ' ' + || tok[-1] == '\t') { /* Token is delimited at the front... */ - if (tok[substr_len] == ' ' || - tok[substr_len] == '\t' || - tok[substr_len] == '\0') + if (tok[substr_len] == ' ' + || tok[substr_len] == '\t' + || tok[substr_len] == '\0') { /* Token is delimited at the rear. Got a whole-word match. */ return 1; @@ -289,15 +304,16 @@ print_bfd_flags (flagword flags) } static void -print_section_info (const char *name, flagword flags, - CORE_ADDR addr, CORE_ADDR endaddr, - unsigned long filepos) +maint_print_section_info (const char *name, flagword flags, + CORE_ADDR addr, CORE_ADDR endaddr, + unsigned long filepos) { - /* FIXME-32x64: Need print_address_numeric with field width. */ + /* FIXME-32x64: Need deprecated_print_address_numeric with field + width. */ printf_filtered (" 0x%s", paddr (addr)); printf_filtered ("->0x%s", paddr (endaddr)); - printf_filtered (" at 0x%s", - local_hex_string_custom ((unsigned long) filepos, "08l")); + printf_filtered (" at %s", + hex_string_custom ((unsigned long) filepos, 8)); printf_filtered (": %s", name); print_bfd_flags (flags); printf_filtered ("\n"); @@ -311,15 +327,15 @@ print_bfd_section_info (bfd *abfd, flagword flags = bfd_get_section_flags (abfd, asect); const char *name = bfd_section_name (abfd, asect); - if (arg == NULL || *((char *) arg) == '\0' || - match_substring ((char *) arg, name) || - match_bfd_flags ((char *) arg, flags)) + if (arg == NULL || *((char *) arg) == '\0' + || match_substring ((char *) arg, name) + || match_bfd_flags ((char *) arg, flags)) { CORE_ADDR addr, endaddr; addr = bfd_section_vma (abfd, asect); endaddr = addr + bfd_section_size (abfd, asect); - print_section_info (name, flags, addr, endaddr, asect->filepos); + maint_print_section_info (name, flags, addr, endaddr, asect->filepos); } } @@ -331,25 +347,24 @@ print_objfile_section_info (bfd *abfd, flagword flags = bfd_get_section_flags (abfd, asect->the_bfd_section); const char *name = bfd_section_name (abfd, asect->the_bfd_section); - if (string == NULL || *string == '\0' || - match_substring (string, name) || - match_bfd_flags (string, flags)) + if (string == NULL || *string == '\0' + || match_substring (string, name) + || match_bfd_flags (string, flags)) { - print_section_info (name, flags, asect->addr, asect->endaddr, + maint_print_section_info (name, flags, asect->addr, asect->endaddr, asect->the_bfd_section->filepos); } } -/* ARGSUSED */ static void maintenance_info_sections (char *arg, int from_tty) { if (exec_bfd) { - printf_filtered ("Exec file:\n"); + printf_filtered (_("Exec file:\n")); printf_filtered (" `%s', ", bfd_get_filename (exec_bfd)); wrap_here (" "); - printf_filtered ("file type %s.\n", bfd_get_target (exec_bfd)); + printf_filtered (_("file type %s.\n"), bfd_get_target (exec_bfd)); if (arg && *arg && match_substring (arg, "ALLOBJ")) { struct objfile *ofile; @@ -364,7 +379,7 @@ maintenance_info_sections (char *arg, int from_tty) ALL_OBJFILES (ofile) { - printf_filtered (" Object file: %s\n", + printf_filtered (_(" Object file: %s\n"), bfd_get_filename (ofile->obfd)); ALL_OBJFILE_OSECTIONS (ofile, osect) { @@ -378,15 +393,14 @@ maintenance_info_sections (char *arg, int from_tty) if (core_bfd) { - printf_filtered ("Core file:\n"); + printf_filtered (_("Core file:\n")); printf_filtered (" `%s', ", bfd_get_filename (core_bfd)); wrap_here (" "); - printf_filtered ("file type %s.\n", bfd_get_target (core_bfd)); + printf_filtered (_("file type %s.\n"), bfd_get_target (core_bfd)); bfd_map_over_sections (core_bfd, print_bfd_section_info, arg); } } -/* ARGSUSED */ void maintenance_print_statistics (char *args, int from_tty) { @@ -394,7 +408,7 @@ maintenance_print_statistics (char *args, int from_tty) print_symbol_bcache_statistics (); } -void +static void maintenance_print_architecture (char *args, int from_tty) { if (args == NULL) @@ -403,7 +417,7 @@ maintenance_print_architecture (char *args, int from_tty) { struct ui_file *file = gdb_fopen (args, "w"); if (file == NULL) - perror_with_name ("maintenance print architecture"); + perror_with_name (_("maintenance print architecture")); gdbarch_dump (current_gdbarch, file); ui_file_delete (file); } @@ -413,11 +427,10 @@ maintenance_print_architecture (char *args, int from_tty) allow_unknown 0. Therefore, its own definition is called only for "maintenance print" with no args. */ -/* ARGSUSED */ static void maintenance_print_command (char *arg, int from_tty) { - printf_unfiltered ("\"maintenance print\" must be followed by the name of a print command.\n"); + printf_unfiltered (_("\"maintenance print\" must be followed by the name of a print command.\n")); help_list (maintenanceprintlist, "maintenance print ", -1, gdb_stdout); } @@ -437,7 +450,7 @@ maintenance_translate_address (char *arg, int from_tty) struct objfile *objfile; if (arg == NULL || *arg == 0) - error ("requires argument (address or section + address)"); + error (_("requires argument (address or section + address)")); sect = NULL; p = arg; @@ -447,7 +460,7 @@ maintenance_translate_address (char *arg, int from_tty) while (*p && !isspace (*p)) /* Find end of section name */ p++; if (*p == '\000') /* End of command? */ - error ("Need to specify and
"); + error (_("Need to specify and
")); *p++ = '\000'; while (isspace (*p)) p++; /* Skip whitespace */ @@ -460,7 +473,7 @@ maintenance_translate_address (char *arg, int from_tty) } if (!sect) - error ("Unknown section %s.", arg); + error (_("Unknown section %s."), arg); } address = parse_and_eval_address (p); @@ -472,12 +485,12 @@ maintenance_translate_address (char *arg, int from_tty) if (sym) printf_filtered ("%s+%s\n", - SYMBOL_SOURCE_NAME (sym), + SYMBOL_PRINT_NAME (sym), paddr_u (address - SYMBOL_VALUE_ADDRESS (sym))); else if (sect) - printf_filtered ("no symbol at %s:0x%s\n", sect->name, paddr (address)); + printf_filtered (_("no symbol at %s:0x%s\n"), sect->name, paddr (address)); else - printf_filtered ("no symbol at 0x%s\n", paddr (address)); + printf_filtered (_("no symbol at 0x%s\n"), paddr (address)); return; } @@ -492,9 +505,9 @@ maintenance_deprecate (char *args, int from_tty) { if (args == NULL || *args == '\0') { - printf_unfiltered ("\"maintenance deprecate\" takes an argument, \n\ + printf_unfiltered (_("\"maintenance deprecate\" takes an argument, \n\ the command you want to deprecate, and optionally the replacement command \n\ -enclosed in quotes.\n"); +enclosed in quotes.\n")); } maintenance_do_deprecate (args, 1); @@ -507,8 +520,8 @@ maintenance_undeprecate (char *args, int from_tty) { if (args == NULL || *args == '\0') { - printf_unfiltered ("\"maintenance undeprecate\" takes an argument, \n\ -the command you want to undeprecate.\n"); + printf_unfiltered (_("\"maintenance undeprecate\" takes an argument, \n\ +the command you want to undeprecate.\n")); } maintenance_do_deprecate (args, 0); @@ -540,7 +553,7 @@ maintenance_do_deprecate (char *text, int deprecate) if (!lookup_cmd_composition (text, &alias, &prefix_cmd, &cmd)) { - printf_filtered ("Can't find command '%s' to deprecate.\n", text); + printf_filtered (_("Can't find command '%s' to deprecate.\n"), text); return; } @@ -601,13 +614,13 @@ maintenance_do_deprecate (char *text, int deprecate) /* Maintenance set/show framework. */ -static struct cmd_list_element *maintenance_set_cmdlist; -static struct cmd_list_element *maintenance_show_cmdlist; +struct cmd_list_element *maintenance_set_cmdlist; +struct cmd_list_element *maintenance_show_cmdlist; static void maintenance_set_cmd (char *args, int from_tty) { - printf_unfiltered ("\"maintenance set\" must be followed by the name of a set command.\n"); + printf_unfiltered (_("\"maintenance set\" must be followed by the name of a set command.\n")); help_list (maintenance_set_cmdlist, "maintenance set ", -1, gdb_stdout); } @@ -617,16 +630,73 @@ maintenance_show_cmd (char *args, int from_tty) cmd_show_list (maintenance_show_cmdlist, from_tty, ""); } -#ifdef NOTYET /* Profiling support. */ static int maintenance_profile_p; +static void +show_maintenance_profile_p (struct ui_file *file, int from_tty, + struct cmd_list_element *c, const char *value) +{ + fprintf_filtered (file, _("Internal profiling is %s.\n"), value); +} + +#if defined (HAVE_MONSTARTUP) && defined (HAVE__MCLEANUP) + +#ifdef HAVE__ETEXT +extern char _etext; +#define TEXTEND &_etext +#else +extern char etext; +#define TEXTEND &etext +#endif + +static int profiling_state; +static void +mcleanup_wrapper (void) +{ + extern void _mcleanup (void); + + if (profiling_state) + _mcleanup (); +} + +static void +maintenance_set_profile_cmd (char *args, int from_tty, struct cmd_list_element *c) +{ + if (maintenance_profile_p == profiling_state) + return; + + profiling_state = maintenance_profile_p; + + if (maintenance_profile_p) + { + static int profiling_initialized; + + extern void monstartup (unsigned long, unsigned long); + extern int main(); + + if (!profiling_initialized) + { + atexit (mcleanup_wrapper); + profiling_initialized = 1; + } + + /* "main" is now always the first function in the text segment, so use + its address for monstartup. */ + monstartup ((unsigned long) &main, (unsigned long) TEXTEND); + } + else + { + extern void _mcleanup (void); + _mcleanup (); + } +} +#else static void maintenance_set_profile_cmd (char *args, int from_tty, struct cmd_list_element *c) { - maintenance_profile_p = 0; - warning ("\"maintenance set profile\" command not supported.\n"); + error (_("Profiling support is not available on this system.")); } #endif @@ -635,24 +705,24 @@ _initialize_maint_cmds (void) { struct cmd_list_element *tmpcmd; - add_prefix_cmd ("maintenance", class_maintenance, maintenance_command, - "Commands for use by GDB maintainers.\n\ + add_prefix_cmd ("maintenance", class_maintenance, maintenance_command, _("\ +Commands for use by GDB maintainers.\n\ Includes commands to dump specific internal GDB structures in\n\ a human readable form, to cause GDB to deliberately dump core,\n\ -to test internal functions such as the C++ demangler, etc.", +to test internal functions such as the C++/ObjC demangler, etc."), &maintenancelist, "maintenance ", 0, &cmdlist); add_com_alias ("mt", "maintenance", class_maintenance, 1); - add_prefix_cmd ("info", class_maintenance, maintenance_info_command, - "Commands for showing internal info about the program being debugged.", + add_prefix_cmd ("info", class_maintenance, maintenance_info_command, _("\ +Commands for showing internal info about the program being debugged."), &maintenanceinfolist, "maintenance info ", 0, &maintenancelist); add_alias_cmd ("i", "info", class_maintenance, 1, &maintenancelist); - add_cmd ("sections", class_maintenance, maintenance_info_sections, - "List the BFD sections of the exec and core files. \n + add_cmd ("sections", class_maintenance, maintenance_info_sections, _("\ +List the BFD sections of the exec and core files. \n\ Arguments may be any combination of:\n\ [one or more section names]\n\ ALLOC LOAD RELOC READONLY CODE DATA ROM CONSTRUCTOR\n\ @@ -660,137 +730,155 @@ Arguments may be any combination of:\n\ Sections matching any argument will be listed (no argument\n\ implies all sections). In addition, the special argument\n\ ALLOBJ\n\ -lists all sections from all object files, including shared libraries.", +lists all sections from all object files, including shared libraries."), &maintenanceinfolist); add_prefix_cmd ("print", class_maintenance, maintenance_print_command, - "Maintenance command for printing GDB internal state.", + _("Maintenance command for printing GDB internal state."), &maintenanceprintlist, "maintenance print ", 0, &maintenancelist); - add_prefix_cmd ("set", class_maintenance, maintenance_set_cmd, "\ + add_prefix_cmd ("set", class_maintenance, maintenance_set_cmd, _("\ Set GDB internal variables used by the GDB maintainer.\n\ -Configure variables internal to GDB that aid in GDB's maintenance", +Configure variables internal to GDB that aid in GDB's maintenance"), &maintenance_set_cmdlist, "maintenance set ", 0/*allow-unknown*/, &maintenancelist); - add_prefix_cmd ("show", class_maintenance, maintenance_show_cmd, "\ + add_prefix_cmd ("show", class_maintenance, maintenance_show_cmd, _("\ Show GDB internal variables used by the GDB maintainer.\n\ -Configure variables internal to GDB that aid in GDB's maintenance", +Configure variables internal to GDB that aid in GDB's maintenance"), &maintenance_show_cmdlist, "maintenance show ", 0/*allow-unknown*/, &maintenancelist); #ifndef _WIN32 - add_cmd ("dump-me", class_maintenance, maintenance_dump_me, - "Get fatal error; make debugger dump its core.\n\ -GDB sets it's handling of SIGQUIT back to SIG_DFL and then sends\n\ -itself a SIGQUIT signal.", + add_cmd ("dump-me", class_maintenance, maintenance_dump_me, _("\ +Get fatal error; make debugger dump its core.\n\ +GDB sets its handling of SIGQUIT back to SIG_DFL and then sends\n\ +itself a SIGQUIT signal."), &maintenancelist); #endif - add_cmd ("internal-error", class_maintenance, maintenance_internal_error, - "Give GDB an internal error.\n\ -Cause GDB to behave as if an internal error was detected.", + add_cmd ("internal-error", class_maintenance, + maintenance_internal_error, _("\ +Give GDB an internal error.\n\ +Cause GDB to behave as if an internal error was detected."), &maintenancelist); - add_cmd ("demangle", class_maintenance, maintenance_demangle, - "Demangle a C++ mangled name.\n\ + add_cmd ("internal-warning", class_maintenance, + maintenance_internal_warning, _("\ +Give GDB an internal warning.\n\ +Cause GDB to behave as if an internal warning was reported."), + &maintenancelist); + + add_cmd ("demangle", class_maintenance, maintenance_demangle, _("\ +Demangle a C++/ObjC mangled name.\n\ Call internal GDB demangler routine to demangle a C++ link name\n\ -and prints the result.", +and prints the result."), &maintenancelist); - add_cmd ("time", class_maintenance, maintenance_time_display, - "Set the display of time usage.\n\ + add_cmd ("time", class_maintenance, maintenance_time_display, _("\ +Set the display of time usage.\n\ If nonzero, will cause the execution time for each command to be\n\ -displayed, following the command's output.", +displayed, following the command's output."), &maintenancelist); - add_cmd ("space", class_maintenance, maintenance_space_display, - "Set the display of space usage.\n\ + add_cmd ("space", class_maintenance, maintenance_space_display, _("\ +Set the display of space usage.\n\ If nonzero, will cause the execution space for each command to be\n\ -displayed, following the command's output.", +displayed, following the command's output."), &maintenancelist); - add_cmd ("type", class_maintenance, maintenance_print_type, - "Print a type chain for a given symbol.\n\ + add_cmd ("type", class_maintenance, maintenance_print_type, _("\ +Print a type chain for a given symbol.\n\ For each node in a type chain, print the raw data for each member of\n\ -the type structure, and the interpretation of the data.", +the type structure, and the interpretation of the data."), &maintenanceprintlist); - add_cmd ("symbols", class_maintenance, maintenance_print_symbols, - "Print dump of current symbol definitions.\n\ + add_cmd ("symbols", class_maintenance, maintenance_print_symbols, _("\ +Print dump of current symbol definitions.\n\ Entries in the full symbol table are dumped to file OUTFILE.\n\ -If a SOURCE file is specified, dump only that file's symbols.", +If a SOURCE file is specified, dump only that file's symbols."), &maintenanceprintlist); - add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols, - "Print dump of current minimal symbol definitions.\n\ + add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols, _("\ +Print dump of current minimal symbol definitions.\n\ Entries in the minimal symbol table are dumped to file OUTFILE.\n\ -If a SOURCE file is specified, dump only that file's minimal symbols.", +If a SOURCE file is specified, dump only that file's minimal symbols."), &maintenanceprintlist); - add_cmd ("psymbols", class_maintenance, maintenance_print_psymbols, - "Print dump of current partial symbol definitions.\n\ + add_cmd ("psymbols", class_maintenance, maintenance_print_psymbols, _("\ +Print dump of current partial symbol definitions.\n\ Entries in the partial symbol table are dumped to file OUTFILE.\n\ -If a SOURCE file is specified, dump only that file's partial symbols.", +If a SOURCE file is specified, dump only that file's partial symbols."), &maintenanceprintlist); add_cmd ("objfiles", class_maintenance, maintenance_print_objfiles, - "Print dump of current object file definitions.", + _("Print dump of current object file definitions."), &maintenanceprintlist); + add_cmd ("symtabs", class_maintenance, maintenance_info_symtabs, _("\ +List the full symbol tables for all object files.\n\ +This does not include information about individual symbols, blocks, or\n\ +linetables --- just the symbol table structures themselves.\n\ +With an argument REGEXP, list the symbol tables whose names that match that."), + &maintenanceinfolist); + + add_cmd ("psymtabs", class_maintenance, maintenance_info_psymtabs, _("\ +List the partial symbol tables for all object files.\n\ +This does not include information about individual partial symbols,\n\ +just the symbol table structures themselves."), + &maintenanceinfolist); + add_cmd ("statistics", class_maintenance, maintenance_print_statistics, - "Print statistics about internal gdb state.", + _("Print statistics about internal gdb state."), &maintenanceprintlist); - add_cmd ("architecture", class_maintenance, maintenance_print_architecture, - "Print the internal architecture configuration.\ -Takes an optional file parameter.", + add_cmd ("architecture", class_maintenance, + maintenance_print_architecture, _("\ +Print the internal architecture configuration.\n\ +Takes an optional file parameter."), &maintenanceprintlist); add_cmd ("check-symtabs", class_maintenance, maintenance_check_symtabs, - "Check consistency of psymtabs and symtabs.", + _("Check consistency of psymtabs and symtabs."), &maintenancelist); add_cmd ("translate-address", class_maintenance, maintenance_translate_address, - "Translate a section name and address to a symbol.", + _("Translate a section name and address to a symbol."), &maintenancelist); - add_cmd ("deprecate", class_maintenance, maintenance_deprecate, - "Deprecate a command. Note that this is just in here so the \n\ + add_cmd ("deprecate", class_maintenance, maintenance_deprecate, _("\ +Deprecate a command. Note that this is just in here so the \n\ testsuite can check the comamnd deprecator. You probably shouldn't use this,\n\ rather you should use the C function deprecate_cmd(). If you decide you \n\ want to use it: maintenance deprecate 'commandname' \"replacement\". The \n\ -replacement is optional.", &maintenancelist); +replacement is optional."), &maintenancelist); - add_cmd ("undeprecate", class_maintenance, maintenance_undeprecate, - "Undeprecate a command. Note that this is just in here so the \n\ + add_cmd ("undeprecate", class_maintenance, maintenance_undeprecate, _("\ +Undeprecate a command. Note that this is just in here so the \n\ testsuite can check the comamnd deprecator. You probably shouldn't use this,\n\ -If you decide you want to use it: maintenance undeprecate 'commandname'", +If you decide you want to use it: maintenance undeprecate 'commandname'"), &maintenancelist); - add_show_from_set ( - add_set_cmd ("watchdog", class_maintenance, var_zinteger, (char *) &watchdog, - "Set watchdog timer.\n\ -When non-zero, this timeout is used instead of waiting forever for a target to\n\ -finish a low-level step or continue operation. If the specified amount of time\n\ -passes without a response from the target, an error occurs.", &setlist), - &showlist); - - -#ifdef NOTYET - /* FIXME: cagney/2001-09-24: A patch introducing a - add_set_boolean_cmd() is pending, the below should probably use - it. A patch implementing profiling is pending, this just sets up - the framework. */ - tmpcmd = add_set_cmd ("profile", class_maintenance, - var_boolean, &maintenance_profile_p, - "Set internal profiling.\n\ -When enabled GDB is profiled.", - &maintenance_set_cmdlist); - tmpcmd->function.sfunc = maintenance_set_profile_cmd; - add_show_from_set (tmpcmd, &maintenance_show_cmdlist); -#endif + add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\ +Set watchdog timer."), _("\ +Show watchdog timer."), _("\ +When non-zero, this timeout is used instead of waiting forever for a target\n\ +to finish a low-level step or continue operation. If the specified amount\n\ +of time passes without a response from the target, an error occurs."), + NULL, + show_watchdog, + &setlist, &showlist); + + add_setshow_boolean_cmd ("profile", class_maintenance, + &maintenance_profile_p, _("\ +Set internal profiling."), _("\ +Show internal profiling."), _("\ +When enabled GDB is profiled."), + maintenance_set_profile_cmd, + show_maintenance_profile_p, + &maintenance_set_cmdlist, + &maintenance_show_cmdlist); }