2002-01-10 Michael Snyder <msnyder@redhat.com>
[external/binutils.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 }