2002-01-10 Michael Snyder <msnyder@redhat.com>
[binutils-gdb.git] / gdb / main.c
1 /* Top level stuff for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3 1996, 1997, 1998, 1999, 2000, 2001, 2002
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
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.
12
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.
17
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. */
22
23 #include "defs.h"
24 #include "top.h"
25 #include "target.h"
26 #include "inferior.h"
27 #include "symfile.h"
28 #include "gdbcore.h"
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"
37 #include "event-loop.h"
38 #include "ui-out.h"
39
40 /* If nonzero, display time usage both at startup and for each command. */
41
42 int display_time;
43
44 /* If nonzero, display space usage both at startup and for each command. */
45
46 int display_space;
47
48 /* Whether this is the async version or not. The async version is
49 invoked on the command line with the -nw --async options. In this
50 version, the usual command_loop is substituted by and event loop which
51 processes UI events asynchronously. */
52 int event_loop_p = 1;
53
54 #ifdef UI_OUT
55 /* Has an interpreter been specified and if so, which. */
56 char *interpreter_p;
57 #endif
58
59 /* Whether this is the command line version or not */
60 int tui_version = 0;
61
62 /* Whether xdb commands will be handled */
63 int xdb_commands = 0;
64
65 /* Whether dbx commands will be handled */
66 int dbx_commands = 0;
67
68 struct ui_file *gdb_stdout;
69 struct ui_file *gdb_stderr;
70 struct ui_file *gdb_stdlog;
71 struct ui_file *gdb_stdtarg;
72
73 /* Used to initialize error() - defined in utils.c */
74
75 extern void error_init (void);
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 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
100 the do_cleanups() below is redundant. Unfortunately, many FUNCs
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
113 struct captured_main_args
114 {
115 int argc;
116 char **argv;
117 };
118
119 static int
120 captured_main (void *data)
121 {
122 struct captured_main_args *context = data;
123 int argc = context->argc;
124 char **argv = context->argv;
125 int count;
126 static int quiet = 0;
127 static int batch = 0;
128 static int set_args = 0;
129
130 /* Pointers to various arguments from command line. */
131 char *symarg = NULL;
132 char *execarg = NULL;
133 char *corearg = NULL;
134 char *cdarg = NULL;
135 char *ttyarg = NULL;
136
137 /* These are static so that we can take their address in an initializer. */
138 static int print_help;
139 static int print_version;
140
141 /* Pointers to all arguments of --command option. */
142 char **cmdarg;
143 /* Allocated size of cmdarg. */
144 int cmdsize;
145 /* Number of elements of cmdarg used. */
146 int ncmd;
147
148 /* Indices of all arguments of --directory option. */
149 char **dirarg;
150 /* Allocated size. */
151 int dirsize;
152 /* Number of elements used. */
153 int ndir;
154
155 struct stat homebuf, cwdbuf;
156 char *homedir, *homeinit;
157
158 register int i;
159
160 long time_at_startup = get_run_time ();
161
162 START_PROGRESS (argv[0], 0);
163
164 #ifdef MPW
165 /* Do all Mac-specific setup. */
166 mac_init ();
167 #endif /* MPW */
168
169 /* This needs to happen before the first use of malloc. */
170 init_malloc ((PTR) NULL);
171
172 #if defined (ALIGN_STACK_ON_STARTUP)
173 i = (int) &count & 0x3;
174 if (i != 0)
175 alloca (4 - i);
176 #endif
177
178 cmdsize = 1;
179 cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg));
180 ncmd = 0;
181 dirsize = 1;
182 dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
183 ndir = 0;
184
185 quit_flag = 0;
186 line = (char *) xmalloc (linesize);
187 line[0] = '\0'; /* Terminate saved (now empty) cmd line */
188 instream = stdin;
189
190 getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
191 current_directory = gdb_dirbuf;
192
193 gdb_stdout = stdio_fileopen (stdout);
194 gdb_stderr = stdio_fileopen (stderr);
195 gdb_stdlog = gdb_stderr; /* for moment */
196 gdb_stdtarg = gdb_stderr; /* for moment */
197
198 /* initialize error() */
199 error_init ();
200
201 /* Parse arguments and options. */
202 {
203 int c;
204 /* When var field is 0, use flag field to record the equivalent
205 short option (or arbitrary numbers starting at 10 for those
206 with no equivalent). */
207 static struct option long_options[] =
208 {
209 {"async", no_argument, &event_loop_p, 1},
210 {"noasync", no_argument, &event_loop_p, 0},
211 #if defined(TUI)
212 {"tui", no_argument, &tui_version, 1},
213 #endif
214 {"xdb", no_argument, &xdb_commands, 1},
215 {"dbx", no_argument, &dbx_commands, 1},
216 {"readnow", no_argument, &readnow_symbol_files, 1},
217 {"r", no_argument, &readnow_symbol_files, 1},
218 {"mapped", no_argument, &mapped_symbol_files, 1},
219 {"m", no_argument, &mapped_symbol_files, 1},
220 {"quiet", no_argument, &quiet, 1},
221 {"q", no_argument, &quiet, 1},
222 {"silent", no_argument, &quiet, 1},
223 {"nx", no_argument, &inhibit_gdbinit, 1},
224 {"n", no_argument, &inhibit_gdbinit, 1},
225 {"batch", no_argument, &batch, 1},
226 {"epoch", no_argument, &epoch_interface, 1},
227
228 /* This is a synonym for "--annotate=1". --annotate is now preferred,
229 but keep this here for a long time because people will be running
230 emacses which use --fullname. */
231 {"fullname", no_argument, 0, 'f'},
232 {"f", no_argument, 0, 'f'},
233
234 {"annotate", required_argument, 0, 12},
235 {"help", no_argument, &print_help, 1},
236 {"se", required_argument, 0, 10},
237 {"symbols", required_argument, 0, 's'},
238 {"s", required_argument, 0, 's'},
239 {"exec", required_argument, 0, 'e'},
240 {"e", required_argument, 0, 'e'},
241 {"core", required_argument, 0, 'c'},
242 {"c", required_argument, 0, 'c'},
243 {"pid", required_argument, 0, 'p'},
244 {"p", required_argument, 0, 'p'},
245 {"command", required_argument, 0, 'x'},
246 {"version", no_argument, &print_version, 1},
247 {"x", required_argument, 0, 'x'},
248 #ifdef GDBTK
249 {"tclcommand", required_argument, 0, 'z'},
250 {"enable-external-editor", no_argument, 0, 'y'},
251 {"editor-command", required_argument, 0, 'w'},
252 #endif
253 #ifdef UI_OUT
254 {"ui", required_argument, 0, 'i'},
255 {"interpreter", required_argument, 0, 'i'},
256 {"i", required_argument, 0, 'i'},
257 #endif
258 {"directory", required_argument, 0, 'd'},
259 {"d", required_argument, 0, 'd'},
260 {"cd", required_argument, 0, 11},
261 {"tty", required_argument, 0, 't'},
262 {"baud", required_argument, 0, 'b'},
263 {"b", required_argument, 0, 'b'},
264 {"nw", no_argument, &use_windows, 0},
265 {"nowindows", no_argument, &use_windows, 0},
266 {"w", no_argument, &use_windows, 1},
267 {"windows", no_argument, &use_windows, 1},
268 {"statistics", no_argument, 0, 13},
269 {"write", no_argument, &write_files, 1},
270 {"args", no_argument, &set_args, 1},
271 /* Allow machine descriptions to add more options... */
272 #ifdef ADDITIONAL_OPTIONS
273 ADDITIONAL_OPTIONS
274 #endif
275 {0, no_argument, 0, 0}
276 };
277
278 while (1)
279 {
280 int option_index;
281
282 c = getopt_long_only (argc, argv, "",
283 long_options, &option_index);
284 if (c == EOF || set_args)
285 break;
286
287 /* Long option that takes an argument. */
288 if (c == 0 && long_options[option_index].flag == 0)
289 c = long_options[option_index].val;
290
291 switch (c)
292 {
293 case 0:
294 /* Long option that just sets a flag. */
295 break;
296 case 10:
297 symarg = optarg;
298 execarg = optarg;
299 break;
300 case 11:
301 cdarg = optarg;
302 break;
303 case 12:
304 /* FIXME: what if the syntax is wrong (e.g. not digits)? */
305 annotation_level = atoi (optarg);
306 break;
307 case 13:
308 /* Enable the display of both time and space usage. */
309 display_time = 1;
310 display_space = 1;
311 break;
312 case 'f':
313 annotation_level = 1;
314 /* We have probably been invoked from emacs. Disable window interface. */
315 use_windows = 0;
316 break;
317 case 's':
318 symarg = optarg;
319 break;
320 case 'e':
321 execarg = optarg;
322 break;
323 case 'c':
324 corearg = optarg;
325 break;
326 case 'p':
327 /* "corearg" is shared by "--core" and "--pid" */
328 corearg = optarg;
329 break;
330 case 'x':
331 cmdarg[ncmd++] = optarg;
332 if (ncmd >= cmdsize)
333 {
334 cmdsize *= 2;
335 cmdarg = (char **) xrealloc ((char *) cmdarg,
336 cmdsize * sizeof (*cmdarg));
337 }
338 break;
339 #ifdef GDBTK
340 case 'z':
341 {
342 extern int gdbtk_test (char *);
343 if (!gdbtk_test (optarg))
344 {
345 fprintf_unfiltered (gdb_stderr, "%s: unable to load tclcommand file \"%s\"",
346 argv[0], optarg);
347 exit (1);
348 }
349 break;
350 }
351 case 'y':
352 /* Backwards compatibility only. */
353 break;
354 case 'w':
355 {
356 external_editor_command = xstrdup (optarg);
357 break;
358 }
359 #endif /* GDBTK */
360 #ifdef UI_OUT
361 case 'i':
362 interpreter_p = optarg;
363 break;
364 #endif
365 case 'd':
366 dirarg[ndir++] = optarg;
367 if (ndir >= dirsize)
368 {
369 dirsize *= 2;
370 dirarg = (char **) xrealloc ((char *) dirarg,
371 dirsize * sizeof (*dirarg));
372 }
373 break;
374 case 't':
375 ttyarg = optarg;
376 break;
377 case 'q':
378 quiet = 1;
379 break;
380 case 'b':
381 {
382 int i;
383 char *p;
384
385 i = strtol (optarg, &p, 0);
386 if (i == 0 && p == optarg)
387
388 /* Don't use *_filtered or warning() (which relies on
389 current_target) until after initialize_all_files(). */
390
391 fprintf_unfiltered
392 (gdb_stderr,
393 "warning: could not set baud rate to `%s'.\n", optarg);
394 else
395 baud_rate = i;
396 }
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
406 current_target) until after initialize_all_files(). */
407
408 fprintf_unfiltered
409 (gdb_stderr,
410 "warning: could not set timeout limit to `%s'.\n", optarg);
411 else
412 remote_timeout = i;
413 }
414 break;
415
416 #ifdef ADDITIONAL_OPTION_CASES
417 ADDITIONAL_OPTION_CASES
418 #endif
419 case '?':
420 fprintf_unfiltered (gdb_stderr,
421 "Use `%s --help' for a complete list of options.\n",
422 argv[0]);
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;
442 #endif
443
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,
452 "%s: `--args' specified but no program specified\n",
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:
473 /* The documentation says this can be a "ProcID" as well.
474 We will try it as both a corefile and a pid. */
475 corearg = argv[optind];
476 break;
477 case 3:
478 fprintf_unfiltered (gdb_stderr,
479 "Excess command line arguments ignored. (%s%s)\n",
480 argv[optind], (optind == argc - 1) ? "" : " ...");
481 break;
482 }
483 }
484 if (batch)
485 quiet = 1;
486 }
487
488 /* Initialize all files. Give the interpreter a chance to take
489 control of the console via the init_ui_hook()) */
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
512 to read a symbol file (possibly slowly). */
513 print_gdb_version (gdb_stdout);
514 if (symarg)
515 printf_filtered ("..");
516 wrap_here ("");
517 gdb_flush (gdb_stdout); /* Force to screen during slow operations */
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... */
524 warning_pre_print = "\nwarning: ";
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. */
530 homedir = getenv ("HOME");
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 {
541 catch_command_errors (source_command, homeinit, 0, RETURN_MASK_ALL);
542 }
543
544 /* Do stats; no need to do them elsewhere since we'll only
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
549 memset (&homebuf, 0, sizeof (struct stat));
550 memset (&cwdbuf, 0, sizeof (struct stat));
551
552 stat (homeinit, &homebuf);
553 stat (gdbinit, &cwdbuf); /* We'll only need this if
554 homedir was set. */
555 }
556
557 /* Now perform all the actions indicated by the arguments. */
558 if (cdarg != NULL)
559 {
560 catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
561 }
562
563 for (i = 0; i < ndir; i++)
564 catch_command_errors (directory_command, dirarg[i], 0, RETURN_MASK_ALL);
565 xfree (dirarg);
566
567 if (execarg != NULL
568 && symarg != NULL
569 && STREQ (execarg, symarg))
570 {
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! */
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);
576 }
577 else
578 {
579 if (execarg != NULL)
580 catch_command_errors (exec_file_attach, execarg, !batch, RETURN_MASK_ALL);
581 if (symarg != NULL)
582 catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
583 }
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;
592 warning_pre_print = "\nwarning: ";
593
594 if (corearg != NULL)
595 {
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]))
601 {
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);
606 }
607 else /* Can't be a pid, better be a corefile. */
608 catch_command_errors (core_file_command, corearg,
609 !batch, RETURN_MASK_ALL);
610 }
611
612 if (ttyarg != NULL)
613 catch_command_errors (tty_command, ttyarg, !batch, RETURN_MASK_ALL);
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;
622 warning_pre_print = "warning: ";
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). */
626
627 if (!homedir
628 || memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
629 if (!inhibit_gdbinit)
630 {
631 catch_command_errors (source_command, gdbinit, 0, RETURN_MASK_ALL);
632 }
633
634 for (i = 0; i < ncmd; i++)
635 {
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 */
640 {
641 /* NOTE: I am commenting this out, because it is not clear
642 where this feature is used. It is very old and
643 undocumented. ezannoni: 1999-05-04 */
644 #if 0
645 if (cmdarg[i][0] == '-' && cmdarg[i][1] == '\0')
646 read_command_file (stdin);
647 else
648 #endif
649 source_command (cmdarg[i], !batch);
650 do_cleanups (ALL_CLEANUPS);
651 }
652 #endif
653 catch_command_errors (source_command, cmdarg[i], !batch, RETURN_MASK_ALL);
654 }
655 xfree (cmdarg);
656
657 /* Read in the old history after all the command files have been read. */
658 init_history ();
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
681 printf_unfiltered ("Startup time: %ld.%06ld\n",
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
691 printf_unfiltered ("Startup size: data size %ld\n",
692 (long) (lim - (char *) &environ));
693 #endif
694 }
695
696 #if 0
697 /* FIXME: cagney/1999-11-06: The original main loop was like: */
698 while (1)
699 {
700 if (!SET_TOP_LEVEL ())
701 {
702 do_cleanups (ALL_CLEANUPS); /* Do complete cleanup */
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 ();
710 quit_command ((char *) 0, instream == stdin);
711 }
712 }
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 }
731 /* No exit -- exit is through quit_command. */
732 }
733
734 int
735 main (int argc, char **argv)
736 {
737 struct captured_main_args args;
738 args.argc = argc;
739 args.argv = argv;
740 catch_errors (captured_main, &args, "", RETURN_MASK_ALL);
741 return 0;
742 }
743
744
745 /* Don't use *_filtered for printing help. We don't want to prompt
746 for continue no matter how small the screen or how much we're going
747 to print. */
748
749 static void
750 print_gdb_help (struct ui_file *stream)
751 {
752 fputs_unfiltered ("\
753 This is the GNU debugger. Usage:\n\n\
754 gdb [options] [executable-file [core-file or process-id]]\n\
755 gdb [options] --args executable-file [inferior-arguments ...]\n\n\
756 Options:\n\n\
757 ", stream);
758 fputs_unfiltered ("\
759 --args Arguments after executable-file are passed to inferior\n\
760 ", stream);
761 fputs_unfiltered ("\
762 --[no]async Enable (disable) asynchronous version of CLI\n\
763 ", stream);
764 fputs_unfiltered ("\
765 -b BAUDRATE Set serial port baud rate used for remote debugging.\n\
766 --batch Exit after processing options.\n\
767 --cd=DIR Change current directory to DIR.\n\
768 --command=FILE Execute GDB commands from FILE.\n\
769 --core=COREFILE Analyze the core dump COREFILE.\n\
770 --pid=PID Attach to running process PID.\n\
771 ", stream);
772 fputs_unfiltered ("\
773 --dbx DBX compatibility mode.\n\
774 --directory=DIR Search for source files in DIR.\n\
775 --epoch Output information used by epoch emacs-GDB interface.\n\
776 --exec=EXECFILE Use EXECFILE as the executable.\n\
777 --fullname Output information used by emacs-GDB interface.\n\
778 --help Print this message.\n\
779 ", stream);
780 fputs_unfiltered ("\
781 --interpreter=INTERP\n\
782 Select a specific interpreter / user interface\n\
783 ", stream);
784 fputs_unfiltered ("\
785 --mapped Use mapped symbol files if supported on this system.\n\
786 --nw Do not use a window interface.\n\
787 --nx Do not read ", stream);
788 fputs_unfiltered (gdbinit, stream);
789 fputs_unfiltered (" file.\n\
790 --quiet Do not print version number on startup.\n\
791 --readnow Fully read symbol files on first access.\n\
792 ", stream);
793 fputs_unfiltered ("\
794 --se=FILE Use FILE as symbol file and executable file.\n\
795 --symbols=SYMFILE Read symbols from SYMFILE.\n\
796 --tty=TTY Use TTY for input/output by the program being debugged.\n\
797 ", stream);
798 #if defined(TUI)
799 fputs_unfiltered ("\
800 --tui Use a terminal user interface.\n\
801 ", stream);
802 #endif
803 fputs_unfiltered ("\
804 --version Print version information and then exit.\n\
805 -w Use a window interface.\n\
806 --write Set writing into executable and core files.\n\
807 --xdb XDB compatibility mode.\n\
808 ", stream);
809 #ifdef ADDITIONAL_OPTION_HELP
810 fputs_unfiltered (ADDITIONAL_OPTION_HELP, stream);
811 #endif
812 fputs_unfiltered ("\n\
813 For more information, type \"help\" from within GDB, or consult the\n\
814 GDB manual (available as on-line info or a printed manual).\n\
815 Report bugs to \"bug-gdb@gnu.org\".\
816 ", stream);
817 }