Add sys_fcntl argument interfaces to linux_record_tdep.
[deliverable/binutils-gdb.git] / gdb / maint.c
index 257bf22d47860cb7569dc995d9a13cffb40bc8a0..56cafe9ae3ee08d8cc275e231ed60ce1961b0d59 100644 (file)
@@ -1,7 +1,7 @@
 /* Support for GDB maintenance commands.
 
-   Copyright (C) 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,
@@ -18,9 +18,7 @@
    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., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #include "defs.h"
@@ -37,6 +35,7 @@
 #include "symfile.h"
 #include "objfiles.h"
 #include "value.h"
+#include "gdb_assert.h"
 
 #include "cli/cli-decode.h"
 
@@ -99,7 +98,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.  */
@@ -308,8 +307,7 @@ maint_print_section_info (const char *name, flagword flags,
                          CORE_ADDR addr, CORE_ADDR endaddr, 
                          unsigned long filepos)
 {
-  /* FIXME-32x64: Need deprecated_print_address_numeric with field
-     width.  */
+  /* FIXME-32x64: Need paddress with field width.  */
   printf_filtered ("    0x%s", paddr (addr));
   printf_filtered ("->0x%s", paddr (endaddr));
   printf_filtered (" at %s",
@@ -351,8 +349,10 @@ 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);
+      maint_print_section_info (name, flags,
+                               obj_section_addr (asect),
+                               obj_section_endaddr (asect),
+                               asect->the_bfd_section->filepos);
     }
 }
 
@@ -415,11 +415,13 @@ maintenance_print_architecture (char *args, int from_tty)
     gdbarch_dump (current_gdbarch, gdb_stdout);
   else
     {
+      struct cleanup *cleanups;
       struct ui_file *file = gdb_fopen (args, "w");
       if (file == NULL)
        perror_with_name (_("maintenance print architecture"));
+      cleanups = make_cleanup_ui_file_delete (file);
       gdbarch_dump (current_gdbarch, file);    
-      ui_file_delete (file);
+      do_cleanups (cleanups);
     }
 }
 
@@ -444,7 +446,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;
@@ -465,14 +467,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);
     }
 
@@ -484,11 +485,35 @@ 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:0x%s\n"),
+                    sect->the_bfd_section->name, paddr (address));
   else
     printf_filtered (_("no symbol at 0x%s\n"), paddr (address));
 
@@ -640,16 +665,16 @@ show_maintenance_profile_p (struct ui_file *file, int from_tty,
   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
+#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
@@ -851,14 +876,14 @@ Takes an optional file parameter."),
 
   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\
+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);
 
   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\
+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);
 
This page took 0.028909 seconds and 4 git commands to generate.