#include "symtab.h"
#include "gdbtypes.h"
#include "demangle.h"
+#include "gdbcore.h"
+#include "expression.h" /* For language.h */
+#include "language.h"
static void
maintenance_command PARAMS ((char *, int));
char *args;
int from_tty;
{
- printf ("\"maintenance\" must be followed by the name of a maintenance command.\n");
- help_list (maintenancelist, "maintenance ", -1, stdout);
+ printf_unfiltered ("\"maintenance\" must be followed by the name of a maintenance command.\n");
+ help_list (maintenancelist, "maintenance ", -1, gdb_stdout);
}
if (args == NULL || *args == '\0')
{
- printf ("\"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);
if (demangled != NULL)
{
- printf ("%s\n", demangled);
+ printf_unfiltered ("%s\n", demangled);
free (demangled);
}
else
{
- printf ("Can't demangle \"%s\"\n", args);
+ printf_unfiltered ("Can't demangle \"%s\"\n", args);
}
}
}
char *arg;
int from_tty;
{
- printf ("\"maintenance info\" must be followed by the name of an info command.\n");
- help_list (maintenanceinfolist, "maintenance info ", -1, stdout);
+ printf_unfiltered ("\"maintenance info\" must be followed by the name of an info command.\n");
+ help_list (maintenanceinfolist, "maintenance info ", -1, gdb_stdout);
+}
+
+static void
+print_section_table (abfd, asect, ignore)
+ bfd *abfd;
+ asection *asect;
+ PTR ignore;
+{
+ flagword flags;
+
+ flags = bfd_get_section_flags (abfd, asect);
+
+ /* FIXME-32x64: Need print_address_numeric with field width. */
+ printf_filtered (" %s",
+ local_hex_string_custom
+ ((unsigned long) bfd_section_vma (abfd, asect), "08l"));
+ printf_filtered ("->%s",
+ local_hex_string_custom
+ ((unsigned long) (bfd_section_vma (abfd, asect)
+ + bfd_section_size (abfd, asect)),
+ "08l"));
+ printf_filtered (" at %s",
+ local_hex_string_custom
+ ((unsigned long) asect->filepos, "08l"));
+ printf_filtered (": %s", bfd_section_name (abfd, asect));
+
+ if (flags & SEC_ALLOC)
+ printf_filtered (" ALLOC");
+ if (flags & SEC_LOAD)
+ printf_filtered (" LOAD");
+ if (flags & SEC_RELOC)
+ printf_filtered (" RELOC");
+ if (flags & SEC_READONLY)
+ printf_filtered (" READONLY");
+ if (flags & SEC_CODE)
+ printf_filtered (" CODE");
+ if (flags & SEC_DATA)
+ printf_filtered (" DATA");
+ if (flags & SEC_ROM)
+ printf_filtered (" ROM");
+ if (flags & SEC_CONSTRUCTOR)
+ printf_filtered (" CONSTRUCTOR");
+ if (flags & SEC_HAS_CONTENTS)
+ printf_filtered (" HAS_CONTENTS");
+ if (flags & SEC_NEVER_LOAD)
+ printf_filtered (" NEVER_LOAD");
+ if (flags & SEC_SHARED_LIBRARY)
+ printf_filtered (" SHARED_LIBRARY");
+ if (flags & SEC_IS_COMMON)
+ printf_filtered (" IS_COMMON");
+
+ printf_filtered ("\n");
+}
+
+/* ARGSUSED */
+static void
+maintenance_info_sections (arg, from_tty)
+ char *arg;
+ int from_tty;
+{
+ if (exec_bfd)
+ {
+ 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));
+ bfd_map_over_sections(exec_bfd, print_section_table, 0);
+ }
+
+ if (core_bfd)
+ {
+ 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));
+ bfd_map_over_sections(core_bfd, print_section_table, 0);
+ }
}
/* The "maintenance print" command is defined as a prefix, with allow_unknown
char *arg;
int from_tty;
{
- printf ("\"maintenance print\" must be followed by the name of a print command.\n");
- help_list (maintenanceprintlist, "maintenance print ", -1, stdout);
+ printf_unfiltered ("\"maintenance print\" must be followed by the name of a print command.\n");
+ help_list (maintenanceprintlist, "maintenance print ", -1, gdb_stdout);
}
-/*
-
-GLOBAL FUNCTION
-
- _initialize_maint_cmds -- initialize the process file system stuff
-
-SYNOPSIS
-
- void _initialize_maint_cmds (void)
-
-DESCRIPTION
-
- Do required initializations during gdb startup for using the
- /proc file system interface.
-
-*/
-
+#endif /* MAINTENANCE_CMDS */
void
_initialize_maint_cmds ()
{
+#if MAINTENANCE_CMDS /* Entire file goes away if not including maint cmds */
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\
&maintenancelist, "maintenance ", 0,
&cmdlist);
- add_com_alias ("mt", "maintenance", class_maintenance, 0);
+ add_com_alias ("mt", "maintenance", class_maintenance, 1);
- add_prefix_cmd ("info", class_info, maintenance_info_command,
- "Commands for showing things 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_cmd ("sections", class_maintenance, maintenance_info_sections,
+ "List the BFD sections of the exec and core files.",
+ &maintenanceinfolist);
+
add_prefix_cmd ("print", class_maintenance, maintenance_print_command,
"Maintenance command for printing GDB internal state.",
&maintenanceprintlist, "maintenance print ", 0,
add_cmd ("objfiles", class_maintenance, maintenance_print_objfiles,
"Print dump of current object file definitions.",
&maintenanceprintlist);
-
-}
-
#endif /* MAINTENANCE_CMDS */
+}