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