utils.c (puts_filtered_tabular): New function.
[deliverable/binutils-gdb.git] / gdb / main.c
CommitLineData
c906108c 1/* Top level stuff for GDB, the GNU debugger.
b6ba6518 2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
00546b04
MS
3 1996, 1997, 1998, 1999, 2000, 2001, 2002
4 Free Software Foundation, Inc.
c906108c 5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23#include "defs.h"
c906108c
SS
24#include "top.h"
25#include "target.h"
26#include "inferior.h"
1adeb98a
FN
27#include "symfile.h"
28#include "gdbcore.h"
c906108c
SS
29
30#include "getopt.h"
31
32#include <sys/types.h>
33#include "gdb_stat.h"
34#include <ctype.h>
35
36#include "gdb_string.h"
9e0b60a8 37#include "event-loop.h"
8b93c638 38#include "ui-out.h"
6457bd47 39
f15ab4a7
AC
40#include "main.h"
41
c906108c
SS
42/* If nonzero, display time usage both at startup and for each command. */
43
44int display_time;
45
46/* If nonzero, display space usage both at startup and for each command. */
47
48int display_space;
49
cd0fc7c3 50/* Whether this is the async version or not. The async version is
c5aa993b
JM
51 invoked on the command line with the -nw --async options. In this
52 version, the usual command_loop is substituted by and event loop which
53 processes UI events asynchronously. */
6426a772 54int event_loop_p = 1;
cd0fc7c3 55
fb40c209
AC
56/* Has an interpreter been specified and if so, which. */
57char *interpreter_p;
fb40c209 58
c906108c
SS
59/* Whether this is the command line version or not */
60int tui_version = 0;
61
62/* Whether xdb commands will be handled */
63int xdb_commands = 0;
64
65/* Whether dbx commands will be handled */
66int dbx_commands = 0;
67
d9fcf2fb
JM
68struct ui_file *gdb_stdout;
69struct ui_file *gdb_stderr;
70struct ui_file *gdb_stdlog;
71struct ui_file *gdb_stdtarg;
c906108c 72
2acceee2
JM
73/* Used to initialize error() - defined in utils.c */
74
75extern void error_init (void);
76
c906108c
SS
77/* Whether to enable writing into executable and core files */
78extern int write_files;
79
d9fcf2fb 80static void print_gdb_help (struct ui_file *);
c906108c
SS
81
82/* These two are used to set the external editor commands when gdb is farming
83 out files to be edited by another program. */
84
c5aa993b 85extern char *external_editor_command;
c906108c 86
11cf8741
JM
87/* Call command_loop. If it happens to return, pass that through as a
88 non-zero return status. */
89
90static int
91captured_command_loop (void *data)
c906108c 92{
11cf8741
JM
93 if (command_loop_hook == NULL)
94 command_loop ();
95 else
96 command_loop_hook ();
97 /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
98 would clean things up (restoring the cleanup chain) to the state
99 they were just prior to the call. Technically, this means that
e26cc349 100 the do_cleanups() below is redundant. Unfortunately, many FUNCs
11cf8741
JM
101 are not that well behaved. do_cleanups should either be replaced
102 with a do_cleanups call (to cover the problem) or an assertion
103 check to detect bad FUNCs code. */
104 do_cleanups (ALL_CLEANUPS);
105 /* If the command_loop returned, normally (rather than threw an
106 error) we try to quit. If the quit is aborted, catch_errors()
107 which called this catch the signal and restart the command
108 loop. */
109 quit_command (NULL, instream == stdin);
110 return 1;
111}
112
11cf8741
JM
113static int
114captured_main (void *data)
115{
116 struct captured_main_args *context = data;
117 int argc = context->argc;
118 char **argv = context->argv;
c906108c
SS
119 int count;
120 static int quiet = 0;
121 static int batch = 0;
552c04a7 122 static int set_args = 0;
c906108c
SS
123
124 /* Pointers to various arguments from command line. */
125 char *symarg = NULL;
126 char *execarg = NULL;
127 char *corearg = NULL;
128 char *cdarg = NULL;
129 char *ttyarg = NULL;
130
131 /* These are static so that we can take their address in an initializer. */
132 static int print_help;
133 static int print_version;
134
135 /* Pointers to all arguments of --command option. */
136 char **cmdarg;
137 /* Allocated size of cmdarg. */
138 int cmdsize;
139 /* Number of elements of cmdarg used. */
140 int ncmd;
141
142 /* Indices of all arguments of --directory option. */
143 char **dirarg;
144 /* Allocated size. */
145 int dirsize;
146 /* Number of elements used. */
147 int ndir;
c5aa993b 148
c906108c
SS
149 struct stat homebuf, cwdbuf;
150 char *homedir, *homeinit;
151
152 register int i;
153
154 long time_at_startup = get_run_time ();
155
0fbb3da7
TT
156#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
157 setlocale (LC_MESSAGES, "");
158#endif
159#if defined (HAVE_SETLOCALE)
160 setlocale (LC_CTYPE, "");
161#endif
162 bindtextdomain (PACKAGE, LOCALEDIR);
163 textdomain (PACKAGE);
164
c906108c
SS
165 START_PROGRESS (argv[0], 0);
166
167#ifdef MPW
168 /* Do all Mac-specific setup. */
169 mac_init ();
170#endif /* MPW */
171
172 /* This needs to happen before the first use of malloc. */
173 init_malloc ((PTR) NULL);
174
175#if defined (ALIGN_STACK_ON_STARTUP)
176 i = (int) &count & 0x3;
177 if (i != 0)
178 alloca (4 - i);
179#endif
180
c906108c
SS
181 cmdsize = 1;
182 cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg));
183 ncmd = 0;
184 dirsize = 1;
185 dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
186 ndir = 0;
187
188 quit_flag = 0;
189 line = (char *) xmalloc (linesize);
190 line[0] = '\0'; /* Terminate saved (now empty) cmd line */
191 instream = stdin;
192
193 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
194 current_directory = gdb_dirbuf;
195
da59e081
JM
196 gdb_stdout = stdio_fileopen (stdout);
197 gdb_stderr = stdio_fileopen (stderr);
198 gdb_stdlog = gdb_stderr; /* for moment */
199 gdb_stdtarg = gdb_stderr; /* for moment */
c906108c 200
2acceee2
JM
201 /* initialize error() */
202 error_init ();
203
c906108c
SS
204 /* Parse arguments and options. */
205 {
206 int c;
207 /* When var field is 0, use flag field to record the equivalent
208 short option (or arbitrary numbers starting at 10 for those
209 with no equivalent). */
210 static struct option long_options[] =
c5aa993b 211 {
6426a772
JM
212 {"async", no_argument, &event_loop_p, 1},
213 {"noasync", no_argument, &event_loop_p, 0},
c906108c 214#if defined(TUI)
c5aa993b 215 {"tui", no_argument, &tui_version, 1},
c906108c 216#endif
c5aa993b
JM
217 {"xdb", no_argument, &xdb_commands, 1},
218 {"dbx", no_argument, &dbx_commands, 1},
219 {"readnow", no_argument, &readnow_symbol_files, 1},
220 {"r", no_argument, &readnow_symbol_files, 1},
221 {"mapped", no_argument, &mapped_symbol_files, 1},
222 {"m", no_argument, &mapped_symbol_files, 1},
223 {"quiet", no_argument, &quiet, 1},
224 {"q", no_argument, &quiet, 1},
225 {"silent", no_argument, &quiet, 1},
226 {"nx", no_argument, &inhibit_gdbinit, 1},
227 {"n", no_argument, &inhibit_gdbinit, 1},
228 {"batch", no_argument, &batch, 1},
229 {"epoch", no_argument, &epoch_interface, 1},
230
231 /* This is a synonym for "--annotate=1". --annotate is now preferred,
232 but keep this here for a long time because people will be running
233 emacses which use --fullname. */
234 {"fullname", no_argument, 0, 'f'},
235 {"f", no_argument, 0, 'f'},
236
237 {"annotate", required_argument, 0, 12},
238 {"help", no_argument, &print_help, 1},
239 {"se", required_argument, 0, 10},
240 {"symbols", required_argument, 0, 's'},
241 {"s", required_argument, 0, 's'},
242 {"exec", required_argument, 0, 'e'},
243 {"e", required_argument, 0, 'e'},
244 {"core", required_argument, 0, 'c'},
245 {"c", required_argument, 0, 'c'},
00546b04
MS
246 {"pid", required_argument, 0, 'p'},
247 {"p", required_argument, 0, 'p'},
c5aa993b
JM
248 {"command", required_argument, 0, 'x'},
249 {"version", no_argument, &print_version, 1},
250 {"x", required_argument, 0, 'x'},
3fc11d3e
JM
251#ifdef GDBTK
252 {"tclcommand", required_argument, 0, 'z'},
253 {"enable-external-editor", no_argument, 0, 'y'},
254 {"editor-command", required_argument, 0, 'w'},
255#endif
8b93c638
JM
256 {"ui", required_argument, 0, 'i'},
257 {"interpreter", required_argument, 0, 'i'},
258 {"i", required_argument, 0, 'i'},
c5aa993b 259 {"directory", required_argument, 0, 'd'},
c4093a6a 260 {"d", required_argument, 0, 'd'},
c5aa993b
JM
261 {"cd", required_argument, 0, 11},
262 {"tty", required_argument, 0, 't'},
263 {"baud", required_argument, 0, 'b'},
264 {"b", required_argument, 0, 'b'},
265 {"nw", no_argument, &use_windows, 0},
266 {"nowindows", no_argument, &use_windows, 0},
267 {"w", no_argument, &use_windows, 1},
268 {"windows", no_argument, &use_windows, 1},
269 {"statistics", no_argument, 0, 13},
270 {"write", no_argument, &write_files, 1},
552c04a7 271 {"args", no_argument, &set_args, 1},
c906108c
SS
272/* Allow machine descriptions to add more options... */
273#ifdef ADDITIONAL_OPTIONS
c5aa993b 274 ADDITIONAL_OPTIONS
c906108c 275#endif
c5aa993b
JM
276 {0, no_argument, 0, 0}
277 };
c906108c
SS
278
279 while (1)
280 {
281 int option_index;
282
283 c = getopt_long_only (argc, argv, "",
284 long_options, &option_index);
552c04a7 285 if (c == EOF || set_args)
c906108c
SS
286 break;
287
288 /* Long option that takes an argument. */
289 if (c == 0 && long_options[option_index].flag == 0)
290 c = long_options[option_index].val;
291
292 switch (c)
293 {
294 case 0:
295 /* Long option that just sets a flag. */
296 break;
297 case 10:
298 symarg = optarg;
299 execarg = optarg;
300 break;
301 case 11:
302 cdarg = optarg;
303 break;
304 case 12:
305 /* FIXME: what if the syntax is wrong (e.g. not digits)? */
306 annotation_level = atoi (optarg);
307 break;
308 case 13:
309 /* Enable the display of both time and space usage. */
310 display_time = 1;
311 display_space = 1;
312 break;
313 case 'f':
314 annotation_level = 1;
315/* We have probably been invoked from emacs. Disable window interface. */
316 use_windows = 0;
317 break;
318 case 's':
319 symarg = optarg;
320 break;
321 case 'e':
322 execarg = optarg;
323 break;
324 case 'c':
325 corearg = optarg;
326 break;
00546b04
MS
327 case 'p':
328 /* "corearg" is shared by "--core" and "--pid" */
329 corearg = optarg;
330 break;
c906108c
SS
331 case 'x':
332 cmdarg[ncmd++] = optarg;
333 if (ncmd >= cmdsize)
334 {
335 cmdsize *= 2;
c5aa993b 336 cmdarg = (char **) xrealloc ((char *) cmdarg,
c906108c
SS
337 cmdsize * sizeof (*cmdarg));
338 }
339 break;
3fc11d3e
JM
340#ifdef GDBTK
341 case 'z':
342 {
a14ed312 343extern int gdbtk_test (char *);
3fc11d3e
JM
344 if (!gdbtk_test (optarg))
345 {
defc6f8c 346 fprintf_unfiltered (gdb_stderr, _("%s: unable to load tclcommand file \"%s\""),
3fc11d3e
JM
347 argv[0], optarg);
348 exit (1);
349 }
350 break;
351 }
352 case 'y':
78f49586
TT
353 /* Backwards compatibility only. */
354 break;
3fc11d3e
JM
355 case 'w':
356 {
3fc11d3e
JM
357 external_editor_command = xstrdup (optarg);
358 break;
359 }
360#endif /* GDBTK */
fb40c209
AC
361 case 'i':
362 interpreter_p = optarg;
363 break;
c906108c
SS
364 case 'd':
365 dirarg[ndir++] = optarg;
366 if (ndir >= dirsize)
367 {
368 dirsize *= 2;
c5aa993b 369 dirarg = (char **) xrealloc ((char *) dirarg,
c906108c
SS
370 dirsize * sizeof (*dirarg));
371 }
372 break;
373 case 't':
374 ttyarg = optarg;
375 break;
376 case 'q':
377 quiet = 1;
378 break;
379 case 'b':
380 {
381 int i;
382 char *p;
383
384 i = strtol (optarg, &p, 0);
385 if (i == 0 && p == optarg)
386
387 /* Don't use *_filtered or warning() (which relies on
c5aa993b 388 current_target) until after initialize_all_files(). */
c906108c
SS
389
390 fprintf_unfiltered
391 (gdb_stderr,
defc6f8c 392 _("warning: could not set baud rate to `%s'.\n"), optarg);
c906108c
SS
393 else
394 baud_rate = i;
395 }
046ca86a 396 break;
c906108c
SS
397 case 'l':
398 {
399 int i;
400 char *p;
401
402 i = strtol (optarg, &p, 0);
403 if (i == 0 && p == optarg)
404
405 /* Don't use *_filtered or warning() (which relies on
c5aa993b 406 current_target) until after initialize_all_files(). */
c906108c
SS
407
408 fprintf_unfiltered
409 (gdb_stderr,
defc6f8c 410 _("warning: could not set timeout limit to `%s'.\n"), optarg);
c906108c
SS
411 else
412 remote_timeout = i;
413 }
414 break;
415
416#ifdef ADDITIONAL_OPTION_CASES
c5aa993b 417 ADDITIONAL_OPTION_CASES
c906108c
SS
418#endif
419 case '?':
420 fprintf_unfiltered (gdb_stderr,
defc6f8c 421 _("Use `%s --help' for a complete list of options.\n"),
c5aa993b 422 argv[0]);
c906108c
SS
423 exit (1);
424 }
425 }
426
427 /* If --help or --version, disable window interface. */
428 if (print_help || print_version)
429 {
430 use_windows = 0;
431#ifdef TUI
432 /* Disable the TUI as well. */
433 tui_version = 0;
434#endif
435 }
436
437#ifdef TUI
438 /* An explicit --tui flag overrides the default UI, which is the
439 window system. */
440 if (tui_version)
441 use_windows = 0;
c5aa993b 442#endif
c906108c 443
552c04a7
TT
444 if (set_args)
445 {
446 /* The remaining options are the command-line options for the
447 inferior. The first one is the sym/exec file, and the rest
448 are arguments. */
449 if (optind >= argc)
450 {
451 fprintf_unfiltered (gdb_stderr,
defc6f8c 452 _("%s: `--args' specified but no program specified\n"),
552c04a7
TT
453 argv[0]);
454 exit (1);
455 }
456 symarg = argv[optind];
457 execarg = argv[optind];
458 ++optind;
459 set_inferior_args_vector (argc - optind, &argv[optind]);
460 }
461 else
462 {
463 /* OK, that's all the options. The other arguments are filenames. */
464 count = 0;
465 for (; optind < argc; optind++)
466 switch (++count)
467 {
468 case 1:
469 symarg = argv[optind];
470 execarg = argv[optind];
471 break;
472 case 2:
00546b04
MS
473 /* The documentation says this can be a "ProcID" as well.
474 We will try it as both a corefile and a pid. */
552c04a7
TT
475 corearg = argv[optind];
476 break;
477 case 3:
478 fprintf_unfiltered (gdb_stderr,
defc6f8c 479 _("Excess command line arguments ignored. (%s%s)\n"),
552c04a7
TT
480 argv[optind], (optind == argc - 1) ? "" : " ...");
481 break;
482 }
483 }
c906108c
SS
484 if (batch)
485 quiet = 1;
486 }
487
0f71a2f6
JM
488 /* Initialize all files. Give the interpreter a chance to take
489 control of the console via the init_ui_hook()) */
c906108c
SS
490 gdb_init (argv[0]);
491
492 /* Do these (and anything which might call wrap_here or *_filtered)
493 after initialize_all_files. */
494 if (print_version)
495 {
496 print_gdb_version (gdb_stdout);
497 wrap_here ("");
498 printf_filtered ("\n");
499 exit (0);
500 }
501
502 if (print_help)
503 {
504 print_gdb_help (gdb_stdout);
505 fputs_unfiltered ("\n", gdb_stdout);
506 exit (0);
507 }
508
509 if (!quiet)
510 {
511 /* Print all the junk at the top, with trailing "..." if we are about
c5aa993b 512 to read a symbol file (possibly slowly). */
c906108c
SS
513 print_gdb_version (gdb_stdout);
514 if (symarg)
515 printf_filtered ("..");
c5aa993b
JM
516 wrap_here ("");
517 gdb_flush (gdb_stdout); /* Force to screen during slow operations */
c906108c
SS
518 }
519
520 error_pre_print = "\n\n";
521 quit_pre_print = error_pre_print;
522
523 /* We may get more than one warning, don't double space all of them... */
defc6f8c 524 warning_pre_print = _("\nwarning: ");
c906108c
SS
525
526 /* Read and execute $HOME/.gdbinit file, if it exists. This is done
527 *before* all the command line arguments are processed; it sets
528 global parameters, which are independent of what file you are
529 debugging or what directory you are in. */
c5aa993b 530 homedir = getenv ("HOME");
c906108c
SS
531 if (homedir)
532 {
533 homeinit = (char *) alloca (strlen (homedir) +
534 strlen (gdbinit) + 10);
535 strcpy (homeinit, homedir);
536 strcat (homeinit, "/");
537 strcat (homeinit, gdbinit);
538
539 if (!inhibit_gdbinit)
540 {
11cf8741 541 catch_command_errors (source_command, homeinit, 0, RETURN_MASK_ALL);
c906108c 542 }
c906108c
SS
543
544 /* Do stats; no need to do them elsewhere since we'll only
c5aa993b
JM
545 need them if homedir is set. Make sure that they are
546 zero in case one of them fails (this guarantees that they
547 won't match if either exists). */
548
c906108c
SS
549 memset (&homebuf, 0, sizeof (struct stat));
550 memset (&cwdbuf, 0, sizeof (struct stat));
c5aa993b 551
c906108c 552 stat (homeinit, &homebuf);
c5aa993b
JM
553 stat (gdbinit, &cwdbuf); /* We'll only need this if
554 homedir was set. */
c906108c
SS
555 }
556
557 /* Now perform all the actions indicated by the arguments. */
558 if (cdarg != NULL)
559 {
11cf8741 560 catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
c906108c 561 }
c906108c
SS
562
563 for (i = 0; i < ndir; i++)
11cf8741 564 catch_command_errors (directory_command, dirarg[i], 0, RETURN_MASK_ALL);
b8c9b27d 565 xfree (dirarg);
c906108c
SS
566
567 if (execarg != NULL
568 && symarg != NULL
569 && STREQ (execarg, symarg))
570 {
11cf8741
JM
571 /* The exec file and the symbol-file are the same. If we can't
572 open it, better only print one error message.
573 catch_command_errors returns non-zero on success! */
1adeb98a
FN
574 if (catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL))
575 catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
c906108c
SS
576 }
577 else
578 {
579 if (execarg != NULL)
1adeb98a 580 catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL);
c906108c 581 if (symarg != NULL)
1adeb98a 582 catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
c906108c 583 }
c906108c
SS
584
585 /* After the symbol file has been read, print a newline to get us
586 beyond the copyright line... But errors should still set off
587 the error message with a (single) blank line. */
588 if (!quiet)
589 printf_filtered ("\n");
590 error_pre_print = "\n";
591 quit_pre_print = error_pre_print;
defc6f8c 592 warning_pre_print = _("\nwarning: ");
c906108c
SS
593
594 if (corearg != NULL)
595 {
00546b04
MS
596 /* corearg may be either a corefile or a pid.
597 If its first character is a digit, try attach first
598 and then corefile. Otherwise try corefile first. */
599
600 if (isdigit (corearg[0]))
11cf8741 601 {
00546b04
MS
602 if (catch_command_errors (attach_command, corearg,
603 !batch, RETURN_MASK_ALL) == 0)
604 catch_command_errors (core_file_command, corearg,
605 !batch, RETURN_MASK_ALL);
11cf8741 606 }
00546b04
MS
607 else /* Can't be a pid, better be a corefile. */
608 catch_command_errors (core_file_command, corearg,
609 !batch, RETURN_MASK_ALL);
c906108c 610 }
c906108c
SS
611
612 if (ttyarg != NULL)
11cf8741 613 catch_command_errors (tty_command, ttyarg, !batch, RETURN_MASK_ALL);
c906108c
SS
614
615#ifdef ADDITIONAL_OPTION_HANDLER
616 ADDITIONAL_OPTION_HANDLER;
617#endif
618
619 /* Error messages should no longer be distinguished with extra output. */
620 error_pre_print = NULL;
621 quit_pre_print = NULL;
defc6f8c 622 warning_pre_print = _("warning: ");
c906108c
SS
623
624 /* Read the .gdbinit file in the current directory, *if* it isn't
625 the same as the $HOME/.gdbinit file (it should exist, also). */
c5aa993b 626
c906108c
SS
627 if (!homedir
628 || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
629 if (!inhibit_gdbinit)
630 {
11cf8741 631 catch_command_errors (source_command, gdbinit, 0, RETURN_MASK_ALL);
c906108c 632 }
c906108c
SS
633
634 for (i = 0; i < ncmd; i++)
635 {
11cf8741
JM
636#if 0
637 /* NOTE: cagney/1999-11-03: SET_TOP_LEVEL() was a macro that
638 expanded into a call to setjmp(). */
639 if (!SET_TOP_LEVEL ()) /* NB: This is #if 0'd out */
c906108c 640 {
b83266a0
SS
641 /* NOTE: I am commenting this out, because it is not clear
642 where this feature is used. It is very old and
c5aa993b 643 undocumented. ezannoni: 1999-05-04 */
b83266a0 644#if 0
c906108c
SS
645 if (cmdarg[i][0] == '-' && cmdarg[i][1] == '\0')
646 read_command_file (stdin);
647 else
b83266a0 648#endif
c906108c
SS
649 source_command (cmdarg[i], !batch);
650 do_cleanups (ALL_CLEANUPS);
651 }
11cf8741
JM
652#endif
653 catch_command_errors (source_command, cmdarg[i], !batch, RETURN_MASK_ALL);
c906108c 654 }
b8c9b27d 655 xfree (cmdarg);
c906108c
SS
656
657 /* Read in the old history after all the command files have been read. */
c5aa993b 658 init_history ();
c906108c
SS
659
660 if (batch)
661 {
662 /* We have hit the end of the batch file. */
663 exit (0);
664 }
665
666 /* Do any host- or target-specific hacks. This is used for i960 targets
667 to force the user to set a nindy target and spec its parameters. */
668
669#ifdef BEFORE_MAIN_LOOP_HOOK
670 BEFORE_MAIN_LOOP_HOOK;
671#endif
672
673 END_PROGRESS (argv[0]);
674
675 /* Show time and/or space usage. */
676
677 if (display_time)
678 {
679 long init_time = get_run_time () - time_at_startup;
680
defc6f8c 681 printf_unfiltered (_("Startup time: %ld.%06ld\n"),
c906108c
SS
682 init_time / 1000000, init_time % 1000000);
683 }
684
685 if (display_space)
686 {
687#ifdef HAVE_SBRK
688 extern char **environ;
689 char *lim = (char *) sbrk (0);
690
defc6f8c 691 printf_unfiltered (_("Startup size: data size %ld\n"),
c906108c
SS
692 (long) (lim - (char *) &environ));
693#endif
694 }
695
11cf8741
JM
696#if 0
697 /* FIXME: cagney/1999-11-06: The original main loop was like: */
c906108c
SS
698 while (1)
699 {
700 if (!SET_TOP_LEVEL ())
701 {
c5aa993b 702 do_cleanups (ALL_CLEANUPS); /* Do complete cleanup */
c906108c
SS
703 /* GUIs generally have their own command loop, mainloop, or whatever.
704 This is a good place to gain control because many error
705 conditions will end up here via longjmp(). */
706 if (command_loop_hook)
707 command_loop_hook ();
708 else
709 command_loop ();
c5aa993b 710 quit_command ((char *) 0, instream == stdin);
c906108c
SS
711 }
712 }
11cf8741
JM
713 /* NOTE: If the command_loop() returned normally, the loop would
714 attempt to exit by calling the function quit_command(). That
715 function would either call exit() or throw an error returning
716 control to SET_TOP_LEVEL. */
717 /* NOTE: The function do_cleanups() was called once each time round
718 the loop. The usefulness of the call isn't clear. If an error
719 was thrown, everything would have already been cleaned up. If
720 command_loop() returned normally and quit_command() was called,
721 either exit() or error() (again cleaning up) would be called. */
722#endif
723 /* NOTE: cagney/1999-11-07: There is probably no reason for not
724 moving this loop and the code found in captured_command_loop()
725 into the command_loop() proper. The main thing holding back that
726 change - SET_TOP_LEVEL() - has been eliminated. */
727 while (1)
728 {
729 catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
730 }
11cf8741
JM
731 /* No exit -- exit is through quit_command. */
732}
c906108c 733
11cf8741 734int
f15ab4a7 735gdb_main (struct captured_main_args *args)
11cf8741 736{
f15ab4a7
AC
737 use_windows = args->use_windows;
738 catch_errors (captured_main, args, "", RETURN_MASK_ALL);
11cf8741 739 return 0;
c906108c
SS
740}
741
11cf8741 742
c906108c
SS
743/* Don't use *_filtered for printing help. We don't want to prompt
744 for continue no matter how small the screen or how much we're going
745 to print. */
746
747static void
d9fcf2fb 748print_gdb_help (struct ui_file *stream)
c906108c 749{
defc6f8c 750 fputs_unfiltered (_("\
c906108c 751This is the GNU debugger. Usage:\n\n\
552c04a7
TT
752 gdb [options] [executable-file [core-file or process-id]]\n\
753 gdb [options] --args executable-file [inferior-arguments ...]\n\n\
c906108c 754Options:\n\n\
defc6f8c
TT
755"), stream);
756 fputs_unfiltered (_("\
552c04a7 757 --args Arguments after executable-file are passed to inferior\n\
defc6f8c
TT
758"), stream);
759 fputs_unfiltered (_("\
0f71a2f6 760 --[no]async Enable (disable) asynchronous version of CLI\n\
defc6f8c
TT
761"), stream);
762 fputs_unfiltered (_("\
c906108c
SS
763 -b BAUDRATE Set serial port baud rate used for remote debugging.\n\
764 --batch Exit after processing options.\n\
765 --cd=DIR Change current directory to DIR.\n\
766 --command=FILE Execute GDB commands from FILE.\n\
767 --core=COREFILE Analyze the core dump COREFILE.\n\
00546b04 768 --pid=PID Attach to running process PID.\n\
defc6f8c
TT
769"), stream);
770 fputs_unfiltered (_("\
c906108c
SS
771 --dbx DBX compatibility mode.\n\
772 --directory=DIR Search for source files in DIR.\n\
773 --epoch Output information used by epoch emacs-GDB interface.\n\
774 --exec=EXECFILE Use EXECFILE as the executable.\n\
775 --fullname Output information used by emacs-GDB interface.\n\
776 --help Print this message.\n\
defc6f8c
TT
777"), stream);
778 fputs_unfiltered (_("\
8b93c638
JM
779 --interpreter=INTERP\n\
780 Select a specific interpreter / user interface\n\
defc6f8c
TT
781"), stream);
782 fputs_unfiltered (_("\
c906108c
SS
783 --mapped Use mapped symbol files if supported on this system.\n\
784 --nw Do not use a window interface.\n\
defc6f8c 785 --nx Do not read "), stream);
96baa820 786 fputs_unfiltered (gdbinit, stream);
defc6f8c 787 fputs_unfiltered (_(" file.\n\
c906108c
SS
788 --quiet Do not print version number on startup.\n\
789 --readnow Fully read symbol files on first access.\n\
defc6f8c
TT
790"), stream);
791 fputs_unfiltered (_("\
c906108c
SS
792 --se=FILE Use FILE as symbol file and executable file.\n\
793 --symbols=SYMFILE Read symbols from SYMFILE.\n\
794 --tty=TTY Use TTY for input/output by the program being debugged.\n\
defc6f8c 795"), stream);
c906108c 796#if defined(TUI)
defc6f8c 797 fputs_unfiltered (_("\
c906108c 798 --tui Use a terminal user interface.\n\
defc6f8c 799"), stream);
c906108c 800#endif
defc6f8c 801 fputs_unfiltered (_("\
c906108c
SS
802 --version Print version information and then exit.\n\
803 -w Use a window interface.\n\
804 --write Set writing into executable and core files.\n\
805 --xdb XDB compatibility mode.\n\
defc6f8c 806"), stream);
c906108c 807#ifdef ADDITIONAL_OPTION_HELP
c5aa993b 808 fputs_unfiltered (ADDITIONAL_OPTION_HELP, stream);
c906108c 809#endif
defc6f8c 810 fputs_unfiltered (_("\n\
c906108c
SS
811For more information, type \"help\" from within GDB, or consult the\n\
812GDB manual (available as on-line info or a printed manual).\n\
2df3850c 813Report bugs to \"bug-gdb@gnu.org\".\
defc6f8c 814"), stream);
c906108c 815}
This page took 0.267508 seconds and 4 git commands to generate.