* config/m88k/{tm-delta88.h,tm-delta88v4.h}, m88k-tdep.c:
[deliverable/binutils-gdb.git] / gdb / maint.c
CommitLineData
0239d9b3
FF
1/* Support for GDB maintenance commands.
2 Copyright (C) 1992 Free Software Foundation, Inc.
3 Written by Fred Fish at Cygnus Support.
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21
22#include "defs.h"
23
24#if MAINTENANCE_CMDS /* Entire file goes away if not including maint cmds */
25
26#include <signal.h>
27#include "command.h"
28#include "gdbcmd.h"
29#include "symtab.h"
30#include "gdbtypes.h"
311592ff 31#include "demangle.h"
b1eaba9a 32#include "gdbcore.h"
100f92e2
JK
33#include "expression.h" /* For language.h */
34#include "language.h"
0239d9b3
FF
35
36static void
37maintenance_command PARAMS ((char *, int));
38
39static void
40maintenance_dump_me PARAMS ((char *, int));
41
311592ff
FF
42static void
43maintenance_demangle PARAMS ((char *, int));
44
0239d9b3
FF
45/*
46
47LOCAL FUNCTION
48
49 maintenance_command -- access the maintenance subcommands
50
51SYNOPSIS
52
53 void maintenance_command (char *args, int from_tty)
54
55DESCRIPTION
56
57*/
58
59static void
60maintenance_command (args, from_tty)
61 char *args;
62 int from_tty;
63{
199b2450
TL
64 printf_unfiltered ("\"maintenance\" must be followed by the name of a maintenance command.\n");
65 help_list (maintenancelist, "maintenance ", -1, gdb_stdout);
0239d9b3
FF
66}
67
68
69/* ARGSUSED */
70static void
71maintenance_dump_me (args, from_tty)
72 char *args;
73 int from_tty;
74{
75 if (query ("Should GDB dump core? "))
76 {
77 signal (SIGQUIT, SIG_DFL);
78 kill (getpid (), SIGQUIT);
79 }
80}
81
311592ff
FF
82/* Someday we should allow demangling for things other than just
83 explicit strings. For example, we might want to be able to
84 specify the address of a string in either GDB's process space
85 or the debuggee's process space, and have gdb fetch and demangle
86 that string. If we have a char* pointer "ptr" that points to
87 a string, we might want to be able to given just the name and
88 have GDB demangle and print what it points to, etc. (FIXME) */
89
90static void
91maintenance_demangle (args, from_tty)
92 char *args;
93 int from_tty;
94{
95 char *demangled;
96
97 if (args == NULL || *args == '\0')
98 {
199b2450 99 printf_unfiltered ("\"maintenance demangle\" takes an argument to demangle.\n");
311592ff
FF
100 }
101 else
102 {
103 demangled = cplus_demangle (args, DMGL_ANSI | DMGL_PARAMS);
104 if (demangled != NULL)
105 {
199b2450 106 printf_unfiltered ("%s\n", demangled);
311592ff
FF
107 free (demangled);
108 }
109 else
110 {
199b2450 111 printf_unfiltered ("Can't demangle \"%s\"\n", args);
311592ff
FF
112 }
113 }
114}
115
0239d9b3
FF
116/* The "maintenance info" command is defined as a prefix, with allow_unknown 0.
117 Therefore, its own definition is called only for "maintenance info" with
118 no args. */
119
120/* ARGSUSED */
121static void
122maintenance_info_command (arg, from_tty)
123 char *arg;
124 int from_tty;
125{
199b2450
TL
126 printf_unfiltered ("\"maintenance info\" must be followed by the name of an info command.\n");
127 help_list (maintenanceinfolist, "maintenance info ", -1, gdb_stdout);
0239d9b3
FF
128}
129
b1eaba9a
SG
130static void
131print_section_table (abfd, asect, ignore)
132 bfd *abfd;
133 asection *asect;
134 PTR ignore;
135{
136 flagword flags;
137
138 flags = bfd_get_section_flags (abfd, asect);
139
833e0d94 140 /* FIXME-32x64: Need print_address_numeric with field width. */
b1eaba9a 141 printf_filtered (" %s",
5573d7d4
JK
142 local_hex_string_custom
143 ((unsigned long) bfd_section_vma (abfd, asect), "08l"));
b1eaba9a 144 printf_filtered ("->%s",
5573d7d4
JK
145 local_hex_string_custom
146 ((unsigned long) (bfd_section_vma (abfd, asect)
147 + bfd_section_size (abfd, asect)),
148 "08l"));
149 printf_filtered (" at %s",
150 local_hex_string_custom
151 ((unsigned long) asect->filepos, "08l"));
b1eaba9a
SG
152 printf_filtered (": %s", bfd_section_name (abfd, asect));
153
154 if (flags & SEC_ALLOC)
155 printf_filtered (" ALLOC");
156 if (flags & SEC_LOAD)
157 printf_filtered (" LOAD");
158 if (flags & SEC_RELOC)
159 printf_filtered (" RELOC");
160 if (flags & SEC_READONLY)
161 printf_filtered (" READONLY");
162 if (flags & SEC_CODE)
163 printf_filtered (" CODE");
164 if (flags & SEC_DATA)
165 printf_filtered (" DATA");
166 if (flags & SEC_ROM)
167 printf_filtered (" ROM");
168 if (flags & SEC_CONSTRUCTOR)
169 printf_filtered (" CONSTRUCTOR");
170 if (flags & SEC_HAS_CONTENTS)
171 printf_filtered (" HAS_CONTENTS");
172 if (flags & SEC_NEVER_LOAD)
173 printf_filtered (" NEVER_LOAD");
174 if (flags & SEC_SHARED_LIBRARY)
175 printf_filtered (" SHARED_LIBRARY");
176 if (flags & SEC_IS_COMMON)
177 printf_filtered (" IS_COMMON");
178
179 printf_filtered ("\n");
180}
181
182/* ARGSUSED */
183static void
184maintenance_info_sections (arg, from_tty)
185 char *arg;
186 int from_tty;
187{
188 if (exec_bfd)
189 {
190 printf_filtered ("Exec file:\n");
191 printf_filtered (" `%s', ", bfd_get_filename(exec_bfd));
192 wrap_here (" ");
193 printf_filtered ("file type %s.\n", bfd_get_target(exec_bfd));
194 bfd_map_over_sections(exec_bfd, print_section_table, 0);
195 }
196
197 if (core_bfd)
198 {
199 printf_filtered ("Core file:\n");
200 printf_filtered (" `%s', ", bfd_get_filename(core_bfd));
201 wrap_here (" ");
202 printf_filtered ("file type %s.\n", bfd_get_target(core_bfd));
203 bfd_map_over_sections(core_bfd, print_section_table, 0);
204 }
205}
206
311592ff
FF
207/* The "maintenance print" command is defined as a prefix, with allow_unknown
208 0. Therefore, its own definition is called only for "maintenance print"
209 with no args. */
210
211/* ARGSUSED */
212static void
213maintenance_print_command (arg, from_tty)
214 char *arg;
215 int from_tty;
216{
199b2450
TL
217 printf_unfiltered ("\"maintenance print\" must be followed by the name of a print command.\n");
218 help_list (maintenanceprintlist, "maintenance print ", -1, gdb_stdout);
311592ff
FF
219}
220
976bb0be 221#endif /* MAINTENANCE_CMDS */
0239d9b3
FF
222
223void
224_initialize_maint_cmds ()
225{
976bb0be 226#if MAINTENANCE_CMDS /* Entire file goes away if not including maint cmds */
0239d9b3
FF
227 add_prefix_cmd ("maintenance", class_maintenance, maintenance_command,
228 "Commands for use by GDB maintainers.\n\
229Includes commands to dump specific internal GDB structures in\n\
311592ff
FF
230a human readable form, to cause GDB to deliberately dump core,\n\
231to test internal functions such as the C++ demangler, etc.",
2e9309df 232 &maintenancelist, "maintenance ", 0,
0239d9b3
FF
233 &cmdlist);
234
327f7197 235 add_com_alias ("mt", "maintenance", class_maintenance, 1);
311592ff 236
327f7197
JG
237 add_prefix_cmd ("info", class_maintenance, maintenance_info_command,
238 "Commands for showing internal info about the program being debugged.",
2e9309df 239 &maintenanceinfolist, "maintenance info ", 0,
0239d9b3
FF
240 &maintenancelist);
241
b1eaba9a
SG
242 add_cmd ("sections", class_maintenance, maintenance_info_sections,
243 "List the BFD sections of the exec and core files.",
244 &maintenanceinfolist);
245
311592ff
FF
246 add_prefix_cmd ("print", class_maintenance, maintenance_print_command,
247 "Maintenance command for printing GDB internal state.",
248 &maintenanceprintlist, "maintenance print ", 0,
249 &maintenancelist);
250
0239d9b3
FF
251 add_cmd ("dump-me", class_maintenance, maintenance_dump_me,
252 "Get fatal error; make debugger dump its core.\n\
253GDB sets it's handling of SIGQUIT back to SIG_DFL and then sends\n\
254itself a SIGQUIT signal.",
255 &maintenancelist);
256
311592ff
FF
257 add_cmd ("demangle", class_maintenance, maintenance_demangle,
258 "Demangle a C++ mangled name.\n\
259Call internal GDB demangler routine to demangle a C++ link name\n\
260and prints the result.",
261 &maintenancelist);
262
263 add_cmd ("type", class_maintenance, maintenance_print_type,
0239d9b3
FF
264 "Print a type chain for a given symbol.\n\
265For each node in a type chain, print the raw data for each member of\n\
266the type structure, and the interpretation of the data.",
311592ff 267 &maintenanceprintlist);
0239d9b3 268
311592ff 269 add_cmd ("symbols", class_maintenance, maintenance_print_symbols,
0239d9b3
FF
270 "Print dump of current symbol definitions.\n\
271Entries in the full symbol table are dumped to file OUTFILE.\n\
272If a SOURCE file is specified, dump only that file's symbols.",
311592ff 273 &maintenanceprintlist);
0239d9b3 274
311592ff 275 add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols,
0239d9b3
FF
276 "Print dump of current minimal symbol definitions.\n\
277Entries in the minimal symbol table are dumped to file OUTFILE.\n\
278If a SOURCE file is specified, dump only that file's minimal symbols.",
311592ff 279 &maintenanceprintlist);
0239d9b3 280
311592ff 281 add_cmd ("psymbols", class_maintenance, maintenance_print_psymbols,
0239d9b3
FF
282 "Print dump of current partial symbol definitions.\n\
283Entries in the partial symbol table are dumped to file OUTFILE.\n\
284If a SOURCE file is specified, dump only that file's partial symbols.",
311592ff 285 &maintenanceprintlist);
0239d9b3 286
311592ff 287 add_cmd ("objfiles", class_maintenance, maintenance_print_objfiles,
0239d9b3 288 "Print dump of current object file definitions.",
311592ff 289 &maintenanceprintlist);
0239d9b3 290#endif /* MAINTENANCE_CMDS */
976bb0be 291}
This page took 0.116727 seconds and 4 git commands to generate.