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