/* 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.
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 "symfile.h"
#include "objfiles.h"
#include "value.h"
+#include "gdb_assert.h"
#include "cli/cli-decode.h"
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);
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);
+}
/*
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",
|| 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);
}
}
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);
}
}
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;
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);
}
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));
/* 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
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);
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,
- NULL, /* FIXME: i18n: */
+ show_watchdog,
&setlist, &showlist);
add_setshow_boolean_cmd ("profile", class_maintenance,
Show internal profiling."), _("\
When enabled GDB is profiled."),
maintenance_set_profile_cmd,
- NULL, /* FIXME: i18n: Internal profiling is %s. */
+ show_maintenance_profile_p,
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
}