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