*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / maint.c
index 3b898b3c790cf0fa8d79f0b271742f9d4c306134..ecbae129a02bc3bff1f192422f30172063eba755 100644 (file)
@@ -1,7 +1,7 @@
 /* Support for GDB maintenance commands.
 
-   Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001,
-   2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
+   2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
 
    Written by Fred Fish at Cygnus Support.
 
@@ -9,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
 
    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.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #include "defs.h"
+#include "arch-utils.h"
 #include <ctype.h>
 #include <signal.h>
 #include "command.h"
@@ -37,6 +36,7 @@
 #include "symfile.h"
 #include "objfiles.h"
 #include "value.h"
+#include "gdb_assert.h"
 
 #include "cli/cli-decode.h"
 
@@ -44,8 +44,6 @@ 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);
@@ -69,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);
+}
 
 /*
 
@@ -95,7 +99,7 @@ maintenance_command (char *args, int from_tty)
 static void
 maintenance_dump_me (char *args, int from_tty)
 {
-  if (query ("Should GDB dump core? "))
+  if (query (_("Should GDB dump core? ")))
     {
 #ifdef __DJGPP__
       /* SIGQUIT by default is ignored, so use SIGABRT instead.  */
@@ -302,12 +306,10 @@ print_bfd_flags (flagword flags)
 static void
 maint_print_section_info (const char *name, flagword flags, 
                          CORE_ADDR addr, CORE_ADDR endaddr, 
-                         unsigned long filepos)
+                         unsigned long filepos, int addr_size)
 {
-  /* FIXME-32x64: Need deprecated_print_address_numeric with field
-     width.  */
-  printf_filtered ("    0x%s", paddr (addr));
-  printf_filtered ("->0x%s", paddr (endaddr));
+  printf_filtered ("    %s", hex_string_custom (addr, addr_size));
+  printf_filtered ("->%s", hex_string_custom (endaddr, addr_size));
   printf_filtered (" at %s",
                   hex_string_custom ((unsigned long) filepos, 8));
   printf_filtered (": %s", name);
@@ -327,11 +329,14 @@ print_bfd_section_info (bfd *abfd,
       || match_substring ((char *) arg, name)
       || match_bfd_flags ((char *) arg, flags))
     {
+      struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
+      int addr_size = gdbarch_addr_bit (gdbarch) / 8;
       CORE_ADDR addr, endaddr;
 
       addr = bfd_section_vma (abfd, asect);
       endaddr = addr + bfd_section_size (abfd, asect);
-      maint_print_section_info (name, flags, addr, endaddr, asect->filepos);
+      maint_print_section_info (name, flags, addr, endaddr,
+                               asect->filepos, addr_size);
     }
 }
 
@@ -347,8 +352,13 @@ print_objfile_section_info (bfd *abfd,
       || match_substring (string, name)
       || match_bfd_flags (string, flags))
     {
-      maint_print_section_info (name, flags, asect->addr, asect->endaddr, 
-                         asect->the_bfd_section->filepos);
+      struct gdbarch *gdbarch = gdbarch_from_bfd (abfd);
+      int addr_size = gdbarch_addr_bit (gdbarch) / 8;
+      maint_print_section_info (name, flags,
+                               obj_section_addr (asect),
+                               obj_section_endaddr (asect),
+                               asect->the_bfd_section->filepos,
+                               addr_size);
     }
 }
 
@@ -407,15 +417,19 @@ maintenance_print_statistics (char *args, int from_tty)
 static void
 maintenance_print_architecture (char *args, int from_tty)
 {
+  struct gdbarch *gdbarch = get_current_arch ();
+
   if (args == NULL)
-    gdbarch_dump (current_gdbarch, gdb_stdout);
+    gdbarch_dump (gdbarch, gdb_stdout);
   else
     {
+      struct cleanup *cleanups;
       struct ui_file *file = gdb_fopen (args, "w");
       if (file == NULL)
        perror_with_name (_("maintenance print architecture"));
-      gdbarch_dump (current_gdbarch, file);    
-      ui_file_delete (file);
+      cleanups = make_cleanup_ui_file_delete (file);
+      gdbarch_dump (gdbarch, file);
+      do_cleanups (cleanups);
     }
 }
 
@@ -440,7 +454,7 @@ static void
 maintenance_translate_address (char *arg, int from_tty)
 {
   CORE_ADDR address;
-  asection *sect;
+  struct obj_section *sect;
   char *p;
   struct minimal_symbol *sym;
   struct objfile *objfile;
@@ -461,14 +475,13 @@ maintenance_translate_address (char *arg, int from_tty)
       while (isspace (*p))
        p++;                    /* Skip whitespace */
 
-      ALL_OBJFILES (objfile)
+      ALL_OBJSECTIONS (objfile, sect)
       {
-       sect = bfd_get_section_by_name (objfile->obfd, arg);
-       if (sect != NULL)
+       if (strcmp (sect->the_bfd_section->name, arg) == 0)
          break;
       }
 
-      if (!sect)
+      if (!objfile)
        error (_("Unknown section %s."), arg);
     }
 
@@ -480,13 +493,37 @@ maintenance_translate_address (char *arg, int from_tty)
     sym = lookup_minimal_symbol_by_pc (address);
 
   if (sym)
-    printf_filtered ("%s+%s\n",
-                    SYMBOL_PRINT_NAME (sym),
-                    paddr_u (address - SYMBOL_VALUE_ADDRESS (sym)));
+    {
+      const char *symbol_name = SYMBOL_PRINT_NAME (sym);
+      const char *symbol_offset = pulongest (address - SYMBOL_VALUE_ADDRESS (sym));
+
+      sect = SYMBOL_OBJ_SECTION(sym);
+      if (sect != NULL)
+       {
+         const char *section_name;
+         const char *obj_name;
+
+         gdb_assert (sect->the_bfd_section && sect->the_bfd_section->name);
+         section_name = sect->the_bfd_section->name;
+
+         gdb_assert (sect->objfile && sect->objfile->name);
+         obj_name = sect->objfile->name;
+
+         if (MULTI_OBJFILE_P ())
+           printf_filtered (_("%s + %s in section %s of %s\n"),
+                            symbol_name, symbol_offset, section_name, obj_name);
+         else
+           printf_filtered (_("%s + %s in section %s\n"),
+                            symbol_name, symbol_offset, section_name);
+       }
+      else
+       printf_filtered (_("%s + %s\n"), symbol_name, symbol_offset);
+    }
   else if (sect)
-    printf_filtered (_("no symbol at %s:0x%s\n"), sect->name, paddr (address));
+    printf_filtered (_("no symbol at %s:%s\n"),
+                    sect->the_bfd_section->name, hex_string (address));
   else
-    printf_filtered (_("no symbol at 0x%s\n"), paddr (address));
+    printf_filtered (_("no symbol at %s\n"), hex_string (address));
 
   return;
 }
@@ -629,17 +666,23 @@ maintenance_show_cmd (char *args, int from_tty)
 /* Profiling support.  */
 
 static int maintenance_profile_p;
-
-#if defined (HAVE_MONSTARTUP) && defined (HAVE__MCLEANUP)
+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);
+}
 
 #ifdef HAVE__ETEXT
 extern char _etext;
 #define TEXTEND &_etext
-#else
+#elif defined (HAVE_ETEXT)
 extern char etext;
 #define TEXTEND &etext
 #endif
 
+#if defined (HAVE_MONSTARTUP) && defined (HAVE__MCLEANUP) && defined (TEXTEND)
+
 static int profiling_state;
 
 static void
@@ -695,24 +738,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++/ObjC 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\
@@ -720,153 +763,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\
+  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.",
+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 ("internal-warning", class_maintenance, maintenance_internal_warning,
-          "Give GDB an internal warning.\n\
-Cause GDB to behave as if an internal warning was reported.",
+  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\
+  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\
+  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.",
+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\
+  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.",
+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\
-testsuite can check the comamnd deprecator. You probably shouldn't use this,\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 command 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\
-testsuite can check the comamnd deprecator. You probably shouldn't use this,\n\
-If you decide you want to use it: maintenance undeprecate 'commandname'",
+  add_cmd ("undeprecate", class_maintenance, maintenance_undeprecate, _("\
+Undeprecate a command.  Note that this is just in here so the \n\
+testsuite can check the command deprecator. You probably shouldn't use this,\n\
+If you decide you want to use it: maintenance undeprecate 'commandname'"),
           &maintenancelist);
 
-  deprecated_add_show_from_set
-    (add_set_cmd ("watchdog", class_maintenance, var_zinteger,
-                 (char *) &watchdog,
-                 "Set watchdog timer.\n\
+  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.",
-                 &setlist),
-     &showlist);
-
+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."),
-                          NULL, /* FIXME: i18n: Internal profiling is %s.  */
-                          maintenance_set_profile_cmd, NULL,
+                          maintenance_set_profile_cmd,
+                          show_maintenance_profile_p,
                           &maintenance_set_cmdlist,
                           &maintenance_show_cmdlist);
 }
This page took 0.030795 seconds and 4 git commands to generate.