X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fmaint.c;h=5d4701cfaccac14b6cce98ab1cb12f6328f2bf0f;hb=472fa5eec2cc521ad5ea37091ea2424ea46552ae;hp=6dd6e8b6954ba772c1bd357157811f495a5197ff;hpb=481695ed5f6e0a8a9c9c50bfac1cdd2b3151e6c9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/maint.c b/gdb/maint.c index 6dd6e8b695..5d4701cfac 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -1,6 +1,6 @@ /* Support for GDB maintenance commands. - Copyright (C) 1992-2017 Free Software Foundation, Inc. + Copyright (C) 1992-2018 Free Software Foundation, Inc. Written by Fred Fish at Cygnus Support. @@ -44,23 +44,7 @@ #include "cli/cli-utils.h" #include "cli/cli-setshow.h" -static void maintenance_command (char *, int); - -static void maintenance_internal_error (char *args, int from_tty); - -static void maintenance_demangle (char *, int); - -static void maintenance_time_display (char *, int); - -static void maintenance_space_display (char *, int); - -static void maintenance_info_command (char *, int); - -static void maintenance_info_sections (char *, int); - -static void maintenance_print_command (char *, int); - -static void maintenance_do_deprecate (char *, int); +static void maintenance_do_deprecate (const char *, int); /* Set this to the maximum number of seconds to wait instead of waiting forever in target_wait(). If this timer times out, then it generates an error and @@ -79,7 +63,7 @@ show_watchdog (struct ui_file *file, int from_tty, /* Access the maintenance subcommands. */ static void -maintenance_command (char *args, int from_tty) +maintenance_command (const char *args, int from_tty) { printf_unfiltered (_("\"maintenance\" must be followed by " "the name of a maintenance command.\n")); @@ -88,7 +72,7 @@ maintenance_command (char *args, int from_tty) #ifndef _WIN32 static void -maintenance_dump_me (char *args, int from_tty) +maintenance_dump_me (const char *args, int from_tty) { if (query (_("Should GDB dump core? "))) { @@ -110,7 +94,7 @@ maintenance_dump_me (char *args, int from_tty) GDB. */ static void -maintenance_internal_error (char *args, int from_tty) +maintenance_internal_error (const char *args, int from_tty) { internal_error (__FILE__, __LINE__, "%s", (args == NULL ? "" : args)); } @@ -121,7 +105,7 @@ maintenance_internal_error (char *args, int from_tty) GDB. */ static void -maintenance_internal_warning (char *args, int from_tty) +maintenance_internal_warning (const char *args, int from_tty) { internal_warning (__FILE__, __LINE__, "%s", (args == NULL ? "" : args)); } @@ -130,7 +114,7 @@ maintenance_internal_warning (char *args, int from_tty) demangler problem is detected. Allows testing of the mechanism. */ static void -maintenance_demangler_warning (char *args, int from_tty) +maintenance_demangler_warning (const char *args, int from_tty) { demangler_warning (__FILE__, __LINE__, "%s", (args == NULL ? "" : args)); } @@ -140,13 +124,13 @@ maintenance_demangler_warning (char *args, int from_tty) "mt demangler-warning" which artificially creates an internal gdb error. */ static void -maintenance_demangle (char *args, int from_tty) +maintenance_demangle (const char *args, int from_tty) { printf_filtered (_("This command has been moved to \"demangle\".\n")); } static void -maintenance_time_display (char *args, int from_tty) +maintenance_time_display (const char *args, int from_tty) { if (args == NULL || *args == '\0') printf_unfiltered (_("\"maintenance time\" takes a numeric argument.\n")); @@ -155,7 +139,7 @@ maintenance_time_display (char *args, int from_tty) } static void -maintenance_space_display (char *args, int from_tty) +maintenance_space_display (const char *args, int from_tty) { if (args == NULL || *args == '\0') printf_unfiltered ("\"maintenance space\" takes a numeric argument.\n"); @@ -168,7 +152,7 @@ maintenance_space_display (char *args, int from_tty) "maintenance info" with no args. */ static void -maintenance_info_command (char *arg, int from_tty) +maintenance_info_command (const char *arg, int from_tty) { printf_unfiltered (_("\"maintenance info\" must be followed " "by the name of an info command.\n")); @@ -181,7 +165,7 @@ maintenance_info_command (char *arg, int from_tty) "maintenance check" with no args. */ static void -maintenance_check_command (char *arg, int from_tty) +maintenance_check_command (const char *arg, int from_tty) { printf_unfiltered (_("\"maintenance check\" must be followed " "by the name of a check command.\n")); @@ -354,7 +338,7 @@ print_objfile_section_info (bfd *abfd, } static void -maintenance_info_sections (char *arg, int from_tty) +maintenance_info_sections (const char *arg, int from_tty) { if (exec_bfd) { @@ -385,7 +369,7 @@ maintenance_info_sections (char *arg, int from_tty) } } else - bfd_map_over_sections (exec_bfd, print_bfd_section_info, arg); + bfd_map_over_sections (exec_bfd, print_bfd_section_info, (void *) arg); } if (core_bfd) @@ -394,19 +378,19 @@ maintenance_info_sections (char *arg, int from_tty) printf_filtered (" `%s', ", bfd_get_filename (core_bfd)); wrap_here (" "); printf_filtered (_("file type %s.\n"), bfd_get_target (core_bfd)); - bfd_map_over_sections (core_bfd, print_bfd_section_info, arg); + bfd_map_over_sections (core_bfd, print_bfd_section_info, (void *) arg); } } static void -maintenance_print_statistics (char *args, int from_tty) +maintenance_print_statistics (const char *args, int from_tty) { print_objfile_statistics (); print_symbol_bcache_statistics (); } static void -maintenance_print_architecture (char *args, int from_tty) +maintenance_print_architecture (const char *args, int from_tty) { struct gdbarch *gdbarch = get_current_arch (); @@ -427,7 +411,7 @@ maintenance_print_architecture (char *args, int from_tty) "maintenance print" with no args. */ static void -maintenance_print_command (char *arg, int from_tty) +maintenance_print_command (const char *arg, int from_tty) { printf_unfiltered (_("\"maintenance print\" must be followed " "by the name of a print command.\n")); @@ -441,11 +425,11 @@ maintenance_print_command (char *arg, int from_tty) or maintenance translate-address . */ static void -maintenance_translate_address (char *arg, int from_tty) +maintenance_translate_address (const char *arg, int from_tty) { CORE_ADDR address; struct obj_section *sect; - char *p; + const char *p; struct bound_minimal_symbol sym; struct objfile *objfile; @@ -461,12 +445,13 @@ maintenance_translate_address (char *arg, int from_tty) p++; if (*p == '\000') /* End of command? */ error (_("Need to specify and
")); - *p++ = '\000'; - p = skip_spaces (p); + + int arg_len = p - arg; + p = skip_spaces (p + 1); ALL_OBJSECTIONS (objfile, sect) { - if (strcmp (sect->the_bfd_section->name, arg) == 0) + if (strncmp (sect->the_bfd_section->name, arg, arg_len) == 0) break; } @@ -525,7 +510,7 @@ maintenance_translate_address (char *arg, int from_tty) offered. */ static void -maintenance_deprecate (char *args, int from_tty) +maintenance_deprecate (const char *args, int from_tty) { if (args == NULL || *args == '\0') { @@ -535,12 +520,11 @@ enclosed in quotes.\n")); } maintenance_do_deprecate (args, 1); - } static void -maintenance_undeprecate (char *args, int from_tty) +maintenance_undeprecate (const char *args, int from_tty) { if (args == NULL || *args == '\0') { @@ -549,7 +533,6 @@ the command you want to undeprecate.\n")); } maintenance_do_deprecate (args, 0); - } /* You really shouldn't be using this. It is just for the testsuite. @@ -560,14 +543,14 @@ the command you want to undeprecate.\n")); replacement. */ static void -maintenance_do_deprecate (char *text, int deprecate) +maintenance_do_deprecate (const char *text, int deprecate) { struct cmd_list_element *alias = NULL; struct cmd_list_element *prefix_cmd = NULL; struct cmd_list_element *cmd = NULL; - char *start_ptr = NULL; - char *end_ptr = NULL; + const char *start_ptr = NULL; + const char *end_ptr = NULL; int len; char *replacement = NULL; @@ -591,8 +574,7 @@ maintenance_do_deprecate (char *text, int deprecate) if (end_ptr != NULL) { len = end_ptr - start_ptr; - start_ptr[len] = '\0'; - replacement = xstrdup (start_ptr); + replacement = savestring (start_ptr, len); } } } @@ -653,7 +635,7 @@ struct cmd_list_element *maintenance_set_cmdlist; struct cmd_list_element *maintenance_show_cmdlist; static void -maintenance_set_cmd (char *args, int from_tty) +maintenance_set_cmd (const char *args, int from_tty) { printf_unfiltered (_("\"maintenance set\" must be followed " "by the name of a set command.\n")); @@ -662,7 +644,7 @@ maintenance_set_cmd (char *args, int from_tty) } static void -maintenance_show_cmd (char *args, int from_tty) +maintenance_show_cmd (const char *args, int from_tty) { cmd_show_list (maintenance_show_cmdlist, from_tty, ""); } @@ -702,7 +684,7 @@ EXTERN_C void monstartup (unsigned long, unsigned long); extern int main (); static void -maintenance_set_profile_cmd (char *args, int from_tty, +maintenance_set_profile_cmd (const char *args, int from_tty, struct cmd_list_element *c) { if (maintenance_profile_p == profiling_state) @@ -733,7 +715,7 @@ maintenance_set_profile_cmd (char *args, int from_tty, } #else static void -maintenance_set_profile_cmd (char *args, int from_tty, +maintenance_set_profile_cmd (const char *args, int from_tty, struct cmd_list_element *c) { error (_("Profiling support is not available on this system.")); @@ -846,7 +828,7 @@ scoped_command_stats::~scoped_command_stats () if (m_space_enabled && per_command_space) { -#ifdef HAVE_SBRK +#ifdef HAVE_USEFUL_SBRK char *lim = (char *) sbrk (0); long space_now = lim - lim_at_start; @@ -884,7 +866,7 @@ scoped_command_stats::scoped_command_stats (bool msg_type) { if (!m_msg_type || per_command_space) { -#ifdef HAVE_SBRK +#ifdef HAVE_USEFUL_SBRK char *lim = (char *) sbrk (0); m_start_space = lim - lim_at_start; m_space_enabled = 1; @@ -925,7 +907,7 @@ scoped_command_stats::scoped_command_stats (bool msg_type) In this case have "mt set per-command on|off" affect every setting. */ static void -set_per_command_cmd (char *args, int from_tty) +set_per_command_cmd (const char *args, int from_tty) { struct cmd_list_element *list; int val; @@ -946,7 +928,7 @@ set_per_command_cmd (char *args, int from_tty) "show per-command " settings. */ static void -show_per_command_cmd (char *args, int from_tty) +show_per_command_cmd (const char *args, int from_tty) { cmd_show_list (per_command_showlist, from_tty, ""); } @@ -955,9 +937,28 @@ show_per_command_cmd (char *args, int from_tty) /* The "maintenance selftest" command. */ static void -maintenance_selftest (char *args, int from_tty) +maintenance_selftest (const char *args, int from_tty) +{ +#if GDB_SELF_TEST + selftests::run_tests (args); +#else + printf_filtered (_("\ +Selftests are not available in a non-development build.\n")); +#endif +} + +static void +maintenance_info_selftests (const char *arg, int from_tty) { - selftests::run_tests (); +#if GDB_SELF_TEST + printf_filtered ("Registered selftests:\n"); + selftests::for_each_selftest ([] (const std::string &name) { + printf_filtered (" - %s\n", name.c_str ()); + }); +#else + printf_filtered (_("\ +Selftests are not available in a non-development build.\n")); +#endif } @@ -1045,12 +1046,12 @@ This command has been moved to \"demangle\"."), add_prefix_cmd ("per-command", class_maintenance, set_per_command_cmd, _("\ Per-command statistics settings."), - &per_command_setlist, "set per-command ", + &per_command_setlist, "maintenance set per-command ", 1/*allow-unknown*/, &maintenance_set_cmdlist); add_prefix_cmd ("per-command", class_maintenance, show_per_command_cmd, _("\ Show per-command statistics settings."), - &per_command_showlist, "show per-command ", + &per_command_showlist, "maintenance show per-command ", 0/*allow-unknown*/, &maintenance_show_cmdlist); add_setshow_boolean_cmd ("time", class_maintenance, @@ -1140,11 +1141,14 @@ If you decide you want to use it: maintenance undeprecate 'commandname'"), add_cmd ("selftest", class_maintenance, maintenance_selftest, _("\ Run gdb's unit tests.\n\ -Usage: maintenance selftest\n\ +Usage: maintenance selftest [filter]\n\ This will run any unit tests that were built in to gdb.\n\ -gdb will abort if any test fails."), +If a filter is given, only the tests with that value in their name will ran."), &maintenancelist); + add_cmd ("selftests", class_maintenance, maintenance_info_selftests, + _("List the registered selftests."), &maintenanceinfolist); + add_setshow_zinteger_cmd ("watchdog", class_maintenance, &watchdog, _("\ Set watchdog timer."), _("\ Show watchdog timer."), _("\