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