2010-04-04 Stan Shebs <stan@codesourcery.com>
[deliverable/binutils-gdb.git] / gdb / main.c
CommitLineData
c906108c 1/* Top level stuff for GDB, the GNU debugger.
4389a95a 2
6aba47ca 3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
0fb0cc75 4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008,
4c38e0a4 5 2009, 2010 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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 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 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
21
22#include "defs.h"
c906108c
SS
23#include "top.h"
24#include "target.h"
25#include "inferior.h"
1adeb98a
FN
26#include "symfile.h"
27#include "gdbcore.h"
c906108c 28
60250e8b 29#include "exceptions.h"
c906108c
SS
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"
9e0b60a8 37#include "event-loop.h"
8b93c638 38#include "ui-out.h"
6457bd47 39
4389a95a 40#include "interps.h"
f15ab4a7
AC
41#include "main.h"
42
29b0e8a2
JM
43#include "source.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
b14b1491
TT
67/* GDB datadir, used to store data files. */
68char *gdb_datadir = 0;
69
d9fcf2fb
JM
70struct ui_file *gdb_stdout;
71struct ui_file *gdb_stderr;
72struct ui_file *gdb_stdlog;
449092f6
CV
73struct ui_file *gdb_stdin;
74/* target IO streams */
75struct ui_file *gdb_stdtargin;
22e8e3c7 76struct ui_file *gdb_stdtarg;
449092f6 77struct ui_file *gdb_stdtargerr;
c906108c 78
7c953934
TT
79/* True if --batch or --batch-silent was seen. */
80int batch_flag = 0;
81
1a088d06
AS
82/* Support for the --batch-silent option. */
83int batch_silent = 0;
84
4b0ad762
AS
85/* Support for --return-child-result option.
86 Set the default to -1 to return error in the case
87 that the program does not run or does not complete. */
88int return_child_result = 0;
89int return_child_result_value = -1;
90
c906108c
SS
91/* Whether to enable writing into executable and core files */
92extern int write_files;
93
16e7150e
JG
94/* GDB as it has been invoked from the command line (i.e. argv[0]). */
95static char *gdb_program_name;
96
d9fcf2fb 97static void print_gdb_help (struct ui_file *);
c906108c
SS
98
99/* These two are used to set the external editor commands when gdb is farming
100 out files to be edited by another program. */
101
c5aa993b 102extern char *external_editor_command;
c906108c 103
b14b1491
TT
104/* Relocate a file or directory. PROGNAME is the name by which gdb
105 was invoked (i.e., argv[0]). INITIAL is the default value for the
106 file or directory. FLAG is true if the value is relocatable, false
107 otherwise. Returns a newly allocated string; this may return NULL
108 under the same conditions as make_relative_prefix. */
109static char *
110relocate_path (const char *progname, const char *initial, int flag)
111{
112 if (flag)
113 return make_relative_prefix (progname, BINDIR, initial);
114 return xstrdup (initial);
115}
116
117/* Like relocate_path, but specifically checks for a directory.
118 INITIAL is relocated according to the rules of relocate_path. If
119 the result is a directory, it is used; otherwise, INITIAL is used.
120 The chosen directory is then canonicalized using lrealpath. This
121 function always returns a newly-allocated string. */
122static char *
123relocate_directory (const char *progname, const char *initial, int flag)
124{
125 char *dir;
126
127 dir = relocate_path (progname, initial, flag);
128 if (dir)
129 {
130 struct stat s;
131
132 if (stat (dir, &s) != 0 || !S_ISDIR (s.st_mode))
133 {
134 xfree (dir);
135 dir = NULL;
136 }
137 }
138 if (!dir)
139 dir = xstrdup (initial);
140
141 /* Canonicalize the directory. */
142 if (*dir)
143 {
144 char *canon_sysroot = lrealpath (dir);
145 if (canon_sysroot)
146 {
147 xfree (dir);
148 dir = canon_sysroot;
149 }
150 }
151
152 return dir;
153}
154
16e7150e
JG
155/* Compute the locations of init files that GDB should source and return
156 them in SYSTEM_GDBINIT, HOME_GDBINIT, LOCAL_GDBINIT. If there is
157 no system gdbinit (resp. home gdbinit and local gdbinit) to be loaded,
158 then SYSTEM_GDBINIT (resp. HOME_GDBINIT and LOCAL_GDBINIT) is set to
159 NULL. */
160static void
161get_init_files (char **system_gdbinit,
162 char **home_gdbinit,
163 char **local_gdbinit)
164{
165 static char *sysgdbinit = NULL;
166 static char *homeinit = NULL;
167 static char *localinit = NULL;
168 static int initialized = 0;
169
170 if (!initialized)
171 {
172 struct stat homebuf, cwdbuf, s;
173 char *homedir, *relocated_sysgdbinit;
174
b14b1491 175 if (SYSTEM_GDBINIT[0])
16e7150e 176 {
b14b1491
TT
177 relocated_sysgdbinit = relocate_path (gdb_program_name,
178 SYSTEM_GDBINIT,
179 SYSTEM_GDBINIT_RELOCATABLE);
180 if (relocated_sysgdbinit && stat (relocated_sysgdbinit, &s) == 0)
16e7150e
JG
181 sysgdbinit = relocated_sysgdbinit;
182 else
183 xfree (relocated_sysgdbinit);
184 }
16e7150e
JG
185
186 homedir = getenv ("HOME");
187
188 /* If the .gdbinit file in the current directory is the same as
189 the $HOME/.gdbinit file, it should not be sourced. homebuf
190 and cwdbuf are used in that purpose. Make sure that the stats
191 are zero in case one of them fails (this guarantees that they
192 won't match if either exists). */
193
194 memset (&homebuf, 0, sizeof (struct stat));
195 memset (&cwdbuf, 0, sizeof (struct stat));
196
197 if (homedir)
198 {
199 homeinit = xstrprintf ("%s/%s", homedir, gdbinit);
200 if (stat (homeinit, &homebuf) != 0)
201 {
202 xfree (homeinit);
203 homeinit = NULL;
204 }
205 }
206
207 if (stat (gdbinit, &cwdbuf) == 0)
208 {
209 if (!homeinit
210 || memcmp ((char *) &homebuf, (char *) &cwdbuf,
211 sizeof (struct stat)))
212 localinit = gdbinit;
213 }
214
215 initialized = 1;
216 }
217
218 *system_gdbinit = sysgdbinit;
219 *home_gdbinit = homeinit;
220 *local_gdbinit = localinit;
221}
222
11cf8741
JM
223/* Call command_loop. If it happens to return, pass that through as a
224 non-zero return status. */
225
226static int
227captured_command_loop (void *data)
c906108c 228{
4389a95a 229 current_interp_command_loop ();
11cf8741
JM
230 /* FIXME: cagney/1999-11-05: A correct command_loop() implementaton
231 would clean things up (restoring the cleanup chain) to the state
232 they were just prior to the call. Technically, this means that
e26cc349 233 the do_cleanups() below is redundant. Unfortunately, many FUNCs
11cf8741
JM
234 are not that well behaved. do_cleanups should either be replaced
235 with a do_cleanups call (to cover the problem) or an assertion
236 check to detect bad FUNCs code. */
237 do_cleanups (ALL_CLEANUPS);
238 /* If the command_loop returned, normally (rather than threw an
239 error) we try to quit. If the quit is aborted, catch_errors()
240 which called this catch the signal and restart the command
241 loop. */
242 quit_command (NULL, instream == stdin);
243 return 1;
244}
245
11cf8741
JM
246static int
247captured_main (void *data)
248{
249 struct captured_main_args *context = data;
250 int argc = context->argc;
251 char **argv = context->argv;
c906108c 252 static int quiet = 0;
552c04a7 253 static int set_args = 0;
c906108c
SS
254
255 /* Pointers to various arguments from command line. */
256 char *symarg = NULL;
257 char *execarg = NULL;
a4d9b460 258 char *pidarg = NULL;
c906108c 259 char *corearg = NULL;
a4d9b460 260 char *pid_or_core_arg = NULL;
c906108c
SS
261 char *cdarg = NULL;
262 char *ttyarg = NULL;
263
264 /* These are static so that we can take their address in an initializer. */
265 static int print_help;
266 static int print_version;
267
268 /* Pointers to all arguments of --command option. */
8a5a3c82
AS
269 struct cmdarg {
270 enum {
271 CMDARG_FILE,
272 CMDARG_COMMAND
273 } type;
274 char *string;
275 } *cmdarg;
c906108c
SS
276 /* Allocated size of cmdarg. */
277 int cmdsize;
278 /* Number of elements of cmdarg used. */
279 int ncmd;
280
281 /* Indices of all arguments of --directory option. */
282 char **dirarg;
283 /* Allocated size. */
284 int dirsize;
285 /* Number of elements used. */
286 int ndir;
c5aa993b 287
16e7150e
JG
288 /* gdb init files. */
289 char *system_gdbinit;
290 char *home_gdbinit;
291 char *local_gdbinit;
c906108c 292
52f0bd74 293 int i;
c906108c
SS
294
295 long time_at_startup = get_run_time ();
296
0fbb3da7
TT
297#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
298 setlocale (LC_MESSAGES, "");
299#endif
300#if defined (HAVE_SETLOCALE)
301 setlocale (LC_CTYPE, "");
302#endif
303 bindtextdomain (PACKAGE, LOCALEDIR);
304 textdomain (PACKAGE);
305
6dd77b81
RH
306#ifdef HAVE_SBRK
307 lim_at_start = (char *) sbrk (0);
308#endif
309
c906108c 310 cmdsize = 1;
8a5a3c82 311 cmdarg = (struct cmdarg *) xmalloc (cmdsize * sizeof (*cmdarg));
c906108c
SS
312 ncmd = 0;
313 dirsize = 1;
314 dirarg = (char **) xmalloc (dirsize * sizeof (*dirarg));
315 ndir = 0;
316
317 quit_flag = 0;
318 line = (char *) xmalloc (linesize);
319 line[0] = '\0'; /* Terminate saved (now empty) cmd line */
320 instream = stdin;
321
da59e081
JM
322 gdb_stdout = stdio_fileopen (stdout);
323 gdb_stderr = stdio_fileopen (stderr);
324 gdb_stdlog = gdb_stderr; /* for moment */
325 gdb_stdtarg = gdb_stderr; /* for moment */
449092f6
CV
326 gdb_stdin = stdio_fileopen (stdin);
327 gdb_stdtargerr = gdb_stderr; /* for moment */
328 gdb_stdtargin = gdb_stdin; /* for moment */
c906108c 329
16e7150e
JG
330 gdb_program_name = xstrdup (argv[0]);
331
bf1d7d9c
JB
332 if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
333 /* Don't use *_filtered or warning() (which relies on
334 current_target) until after initialize_all_files(). */
335 fprintf_unfiltered (gdb_stderr,
336 _("%s: warning: error finding working directory: %s\n"),
337 argv[0], safe_strerror (errno));
338
339 current_directory = gdb_dirbuf;
340
030292b7 341 /* Set the sysroot path. */
b14b1491
TT
342 gdb_sysroot = relocate_directory (argv[0], TARGET_SYSTEM_ROOT,
343 TARGET_SYSTEM_ROOT_RELOCATABLE);
030292b7 344
b14b1491
TT
345 debug_file_directory = relocate_directory (argv[0], DEBUGDIR,
346 DEBUGDIR_RELOCATABLE);
030292b7 347
b14b1491
TT
348 gdb_datadir = relocate_directory (argv[0], GDB_DATADIR,
349 GDB_DATADIR_RELOCATABLE);
aa28a74e 350
29b0e8a2
JM
351#ifdef RELOC_SRCDIR
352 add_substitute_path_rule (RELOC_SRCDIR,
353 make_relative_prefix (argv[0], BINDIR,
354 RELOC_SRCDIR));
355#endif
356
4389a95a 357 /* There will always be an interpreter. Either the one passed into
e46e5ccd
KS
358 this captured main, or one specified by the user at start up, or
359 the console. Initialize the interpreter to the one requested by
360 the application. */
361 interpreter_p = xstrdup (context->interpreter_p);
4389a95a 362
c906108c
SS
363 /* Parse arguments and options. */
364 {
365 int c;
366 /* When var field is 0, use flag field to record the equivalent
367 short option (or arbitrary numbers starting at 10 for those
368 with no equivalent). */
49c7e338
AC
369 enum {
370 OPT_SE = 10,
371 OPT_CD,
372 OPT_ANNOTATE,
373 OPT_STATISTICS,
42fa7c0f
AC
374 OPT_TUI,
375 OPT_NOWINDOWS,
376 OPT_WINDOWS
49c7e338 377 };
c906108c 378 static struct option long_options[] =
c5aa993b 379 {
49c7e338 380 {"tui", no_argument, 0, OPT_TUI},
c5aa993b
JM
381 {"xdb", no_argument, &xdb_commands, 1},
382 {"dbx", no_argument, &dbx_commands, 1},
383 {"readnow", no_argument, &readnow_symbol_files, 1},
384 {"r", no_argument, &readnow_symbol_files, 1},
c5aa993b
JM
385 {"quiet", no_argument, &quiet, 1},
386 {"q", no_argument, &quiet, 1},
387 {"silent", no_argument, &quiet, 1},
388 {"nx", no_argument, &inhibit_gdbinit, 1},
389 {"n", no_argument, &inhibit_gdbinit, 1},
1a088d06 390 {"batch-silent", no_argument, 0, 'B'},
7c953934 391 {"batch", no_argument, &batch_flag, 1},
c5aa993b
JM
392 {"epoch", no_argument, &epoch_interface, 1},
393
394 /* This is a synonym for "--annotate=1". --annotate is now preferred,
395 but keep this here for a long time because people will be running
396 emacses which use --fullname. */
397 {"fullname", no_argument, 0, 'f'},
398 {"f", no_argument, 0, 'f'},
399
49c7e338 400 {"annotate", required_argument, 0, OPT_ANNOTATE},
c5aa993b 401 {"help", no_argument, &print_help, 1},
49c7e338 402 {"se", required_argument, 0, OPT_SE},
c5aa993b
JM
403 {"symbols", required_argument, 0, 's'},
404 {"s", required_argument, 0, 's'},
405 {"exec", required_argument, 0, 'e'},
406 {"e", required_argument, 0, 'e'},
407 {"core", required_argument, 0, 'c'},
408 {"c", required_argument, 0, 'c'},
00546b04
MS
409 {"pid", required_argument, 0, 'p'},
410 {"p", required_argument, 0, 'p'},
c5aa993b 411 {"command", required_argument, 0, 'x'},
8a5a3c82 412 {"eval-command", required_argument, 0, 'X'},
c5aa993b
JM
413 {"version", no_argument, &print_version, 1},
414 {"x", required_argument, 0, 'x'},
8a5a3c82 415 {"ex", required_argument, 0, 'X'},
3fc11d3e
JM
416#ifdef GDBTK
417 {"tclcommand", required_argument, 0, 'z'},
418 {"enable-external-editor", no_argument, 0, 'y'},
419 {"editor-command", required_argument, 0, 'w'},
420#endif
8b93c638
JM
421 {"ui", required_argument, 0, 'i'},
422 {"interpreter", required_argument, 0, 'i'},
423 {"i", required_argument, 0, 'i'},
c5aa993b 424 {"directory", required_argument, 0, 'd'},
c4093a6a 425 {"d", required_argument, 0, 'd'},
49c7e338 426 {"cd", required_argument, 0, OPT_CD},
c5aa993b
JM
427 {"tty", required_argument, 0, 't'},
428 {"baud", required_argument, 0, 'b'},
429 {"b", required_argument, 0, 'b'},
42fa7c0f
AC
430 {"nw", no_argument, NULL, OPT_NOWINDOWS},
431 {"nowindows", no_argument, NULL, OPT_NOWINDOWS},
432 {"w", no_argument, NULL, OPT_WINDOWS},
433 {"windows", no_argument, NULL, OPT_WINDOWS},
49c7e338 434 {"statistics", no_argument, 0, OPT_STATISTICS},
c5aa993b 435 {"write", no_argument, &write_files, 1},
552c04a7 436 {"args", no_argument, &set_args, 1},
39c76ca3 437 {"l", required_argument, 0, 'l'},
4b0ad762 438 {"return-child-result", no_argument, &return_child_result, 1},
c5aa993b
JM
439 {0, no_argument, 0, 0}
440 };
c906108c
SS
441
442 while (1)
443 {
444 int option_index;
445
446 c = getopt_long_only (argc, argv, "",
447 long_options, &option_index);
552c04a7 448 if (c == EOF || set_args)
c906108c
SS
449 break;
450
451 /* Long option that takes an argument. */
452 if (c == 0 && long_options[option_index].flag == 0)
453 c = long_options[option_index].val;
454
455 switch (c)
456 {
457 case 0:
458 /* Long option that just sets a flag. */
459 break;
49c7e338 460 case OPT_SE:
c906108c
SS
461 symarg = optarg;
462 execarg = optarg;
463 break;
49c7e338 464 case OPT_CD:
c906108c
SS
465 cdarg = optarg;
466 break;
49c7e338 467 case OPT_ANNOTATE:
c906108c
SS
468 /* FIXME: what if the syntax is wrong (e.g. not digits)? */
469 annotation_level = atoi (optarg);
470 break;
49c7e338 471 case OPT_STATISTICS:
c906108c
SS
472 /* Enable the display of both time and space usage. */
473 display_time = 1;
474 display_space = 1;
475 break;
49c7e338 476 case OPT_TUI:
021e7609 477 /* --tui is equivalent to -i=tui. */
b0da54f1 478#ifdef TUI
021e7609 479 xfree (interpreter_p);
cc4349ed 480 interpreter_p = xstrdup (INTERP_TUI);
b0da54f1
BW
481#else
482 fprintf_unfiltered (gdb_stderr,
483 _("%s: TUI mode is not supported\n"),
484 argv[0]);
485 exit (1);
486#endif
021e7609 487 break;
42fa7c0f
AC
488 case OPT_WINDOWS:
489 /* FIXME: cagney/2003-03-01: Not sure if this option is
490 actually useful, and if it is, what it should do. */
cc4349ed
AS
491#ifdef GDBTK
492 /* --windows is equivalent to -i=insight. */
493 xfree (interpreter_p);
494 interpreter_p = xstrdup (INTERP_INSIGHT);
495#endif
42fa7c0f
AC
496 use_windows = 1;
497 break;
498 case OPT_NOWINDOWS:
499 /* -nw is equivalent to -i=console. */
500 xfree (interpreter_p);
501 interpreter_p = xstrdup (INTERP_CONSOLE);
502 use_windows = 0;
503 break;
c906108c
SS
504 case 'f':
505 annotation_level = 1;
506/* We have probably been invoked from emacs. Disable window interface. */
507 use_windows = 0;
508 break;
509 case 's':
510 symarg = optarg;
511 break;
512 case 'e':
513 execarg = optarg;
514 break;
515 case 'c':
516 corearg = optarg;
517 break;
00546b04 518 case 'p':
a4d9b460 519 pidarg = optarg;
00546b04 520 break;
c906108c 521 case 'x':
8a5a3c82
AS
522 cmdarg[ncmd].type = CMDARG_FILE;
523 cmdarg[ncmd++].string = optarg;
524 if (ncmd >= cmdsize)
525 {
526 cmdsize *= 2;
527 cmdarg = xrealloc ((char *) cmdarg,
528 cmdsize * sizeof (*cmdarg));
529 }
530 break;
531 case 'X':
532 cmdarg[ncmd].type = CMDARG_COMMAND;
533 cmdarg[ncmd++].string = optarg;
c906108c
SS
534 if (ncmd >= cmdsize)
535 {
536 cmdsize *= 2;
8a5a3c82
AS
537 cmdarg = xrealloc ((char *) cmdarg,
538 cmdsize * sizeof (*cmdarg));
c906108c
SS
539 }
540 break;
1a088d06 541 case 'B':
7c953934 542 batch_flag = batch_silent = 1;
1a088d06
AS
543 gdb_stdout = ui_file_new();
544 break;
3fc11d3e
JM
545#ifdef GDBTK
546 case 'z':
547 {
a14ed312 548extern int gdbtk_test (char *);
3fc11d3e
JM
549 if (!gdbtk_test (optarg))
550 {
defc6f8c 551 fprintf_unfiltered (gdb_stderr, _("%s: unable to load tclcommand file \"%s\""),
3fc11d3e
JM
552 argv[0], optarg);
553 exit (1);
554 }
555 break;
556 }
557 case 'y':
78f49586
TT
558 /* Backwards compatibility only. */
559 break;
3fc11d3e
JM
560 case 'w':
561 {
3fc11d3e
JM
562 external_editor_command = xstrdup (optarg);
563 break;
564 }
565#endif /* GDBTK */
fb40c209 566 case 'i':
4389a95a
AC
567 xfree (interpreter_p);
568 interpreter_p = xstrdup (optarg);
fb40c209 569 break;
c906108c
SS
570 case 'd':
571 dirarg[ndir++] = optarg;
572 if (ndir >= dirsize)
573 {
574 dirsize *= 2;
c5aa993b 575 dirarg = (char **) xrealloc ((char *) dirarg,
c906108c
SS
576 dirsize * sizeof (*dirarg));
577 }
578 break;
579 case 't':
580 ttyarg = optarg;
581 break;
582 case 'q':
583 quiet = 1;
584 break;
585 case 'b':
586 {
587 int i;
588 char *p;
589
590 i = strtol (optarg, &p, 0);
591 if (i == 0 && p == optarg)
592
593 /* Don't use *_filtered or warning() (which relies on
c5aa993b 594 current_target) until after initialize_all_files(). */
c906108c
SS
595
596 fprintf_unfiltered
597 (gdb_stderr,
defc6f8c 598 _("warning: could not set baud rate to `%s'.\n"), optarg);
c906108c
SS
599 else
600 baud_rate = i;
601 }
046ca86a 602 break;
c906108c
SS
603 case 'l':
604 {
605 int i;
606 char *p;
607
608 i = strtol (optarg, &p, 0);
609 if (i == 0 && p == optarg)
610
611 /* Don't use *_filtered or warning() (which relies on
c5aa993b 612 current_target) until after initialize_all_files(). */
c906108c
SS
613
614 fprintf_unfiltered
615 (gdb_stderr,
defc6f8c 616 _("warning: could not set timeout limit to `%s'.\n"), optarg);
c906108c
SS
617 else
618 remote_timeout = i;
619 }
620 break;
621
c906108c
SS
622 case '?':
623 fprintf_unfiltered (gdb_stderr,
defc6f8c 624 _("Use `%s --help' for a complete list of options.\n"),
c5aa993b 625 argv[0]);
c906108c
SS
626 exit (1);
627 }
628 }
629
630 /* If --help or --version, disable window interface. */
631 if (print_help || print_version)
632 {
633 use_windows = 0;
c906108c
SS
634 }
635
7c953934 636 if (batch_flag)
c906108c
SS
637 quiet = 1;
638 }
639
0f71a2f6 640 /* Initialize all files. Give the interpreter a chance to take
ba5e7e8d 641 control of the console via the deprecated_init_ui_hook (). */
c906108c
SS
642 gdb_init (argv[0]);
643
3f81c18a
VP
644 /* Now that gdb_init has created the initial inferior, we're in position
645 to set args for that inferior. */
646 if (set_args)
647 {
648 /* The remaining options are the command-line options for the
649 inferior. The first one is the sym/exec file, and the rest
650 are arguments. */
651 if (optind >= argc)
652 {
653 fprintf_unfiltered (gdb_stderr,
654 _("%s: `--args' specified but no program specified\n"),
655 argv[0]);
656 exit (1);
657 }
658 symarg = argv[optind];
659 execarg = argv[optind];
660 ++optind;
661 set_inferior_args_vector (argc - optind, &argv[optind]);
662 }
663 else
664 {
665 /* OK, that's all the options. */
666
667 /* The first argument, if specified, is the name of the
668 executable. */
669 if (optind < argc)
670 {
671 symarg = argv[optind];
672 execarg = argv[optind];
673 optind++;
674 }
675
676 /* If the user hasn't already specified a PID or the name of a
677 core file, then a second optional argument is allowed. If
678 present, this argument should be interpreted as either a
679 PID or a core file, whichever works. */
680 if (pidarg == NULL && corearg == NULL && optind < argc)
681 {
682 pid_or_core_arg = argv[optind];
683 optind++;
684 }
685
686 /* Any argument left on the command line is unexpected and
687 will be ignored. Inform the user. */
688 if (optind < argc)
689 fprintf_unfiltered (gdb_stderr, _("\
690Excess command line arguments ignored. (%s%s)\n"),
691 argv[optind],
692 (optind == argc - 1) ? "" : " ...");
693 }
694
57a46001
JG
695 /* Lookup gdbinit files. Note that the gdbinit file name may be overriden
696 during file initialization, so get_init_files should be called after
697 gdb_init. */
698 get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
699
c906108c 700 /* Do these (and anything which might call wrap_here or *_filtered)
4389a95a
AC
701 after initialize_all_files() but before the interpreter has been
702 installed. Otherwize the help/version messages will be eaten by
703 the interpreter's output handler. */
704
c906108c
SS
705 if (print_version)
706 {
707 print_gdb_version (gdb_stdout);
708 wrap_here ("");
709 printf_filtered ("\n");
710 exit (0);
711 }
712
713 if (print_help)
714 {
715 print_gdb_help (gdb_stdout);
716 fputs_unfiltered ("\n", gdb_stdout);
717 exit (0);
718 }
719
4389a95a
AC
720 /* FIXME: cagney/2003-02-03: The big hack (part 1 of 2) that lets
721 GDB retain the old MI1 interpreter startup behavior. Output the
722 copyright message before the interpreter is installed. That way
723 it isn't encapsulated in MI output. */
724 if (!quiet && strcmp (interpreter_p, INTERP_MI1) == 0)
725 {
726 /* Print all the junk at the top, with trailing "..." if we are about
727 to read a symbol file (possibly slowly). */
728 print_gdb_version (gdb_stdout);
729 if (symarg)
730 printf_filtered ("..");
731 wrap_here ("");
e896d70e 732 printf_filtered ("\n");
4389a95a
AC
733 gdb_flush (gdb_stdout); /* Force to screen during slow operations */
734 }
735
736
737 /* Install the default UI. All the interpreters should have had a
738 look at things by now. Initialize the default interpreter. */
739
740 {
741 /* Find it. */
742 struct interp *interp = interp_lookup (interpreter_p);
743 if (interp == NULL)
8a3fe4f8 744 error (_("Interpreter `%s' unrecognized"), interpreter_p);
4389a95a 745 /* Install it. */
683f2885 746 if (!interp_set (interp, 1))
4389a95a
AC
747 {
748 fprintf_unfiltered (gdb_stderr,
749 "Interpreter `%s' failed to initialize.\n",
750 interpreter_p);
751 exit (1);
752 }
753 }
754
755 /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
756 GDB retain the old MI1 interpreter startup behavior. Output the
757 copyright message after the interpreter is installed when it is
758 any sane interpreter. */
759 if (!quiet && !current_interp_named_p (INTERP_MI1))
c906108c
SS
760 {
761 /* Print all the junk at the top, with trailing "..." if we are about
c5aa993b 762 to read a symbol file (possibly slowly). */
c906108c
SS
763 print_gdb_version (gdb_stdout);
764 if (symarg)
765 printf_filtered ("..");
c5aa993b 766 wrap_here ("");
e896d70e 767 printf_filtered ("\n");
c5aa993b 768 gdb_flush (gdb_stdout); /* Force to screen during slow operations */
c906108c
SS
769 }
770
e896d70e
DJ
771 /* Set off error and warning messages with a blank line. */
772 error_pre_print = "\n";
c906108c 773 quit_pre_print = error_pre_print;
defc6f8c 774 warning_pre_print = _("\nwarning: ");
c906108c 775
16e7150e
JG
776 /* Read and execute the system-wide gdbinit file, if it exists.
777 This is done *before* all the command line arguments are
778 processed; it sets global parameters, which are independent of
779 what file you are debugging or what directory you are in. */
780 if (system_gdbinit && !inhibit_gdbinit)
781 catch_command_errors (source_script, system_gdbinit, 0, RETURN_MASK_ALL);
782
c906108c
SS
783 /* Read and execute $HOME/.gdbinit file, if it exists. This is done
784 *before* all the command line arguments are processed; it sets
785 global parameters, which are independent of what file you are
786 debugging or what directory you are in. */
c906108c 787
16e7150e
JG
788 if (home_gdbinit && !inhibit_gdbinit)
789 catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
c906108c
SS
790
791 /* Now perform all the actions indicated by the arguments. */
792 if (cdarg != NULL)
793 {
11cf8741 794 catch_command_errors (cd_command, cdarg, 0, RETURN_MASK_ALL);
c906108c 795 }
c906108c
SS
796
797 for (i = 0; i < ndir; i++)
13d35ae5 798 catch_command_errors (directory_switch, dirarg[i], 0, RETURN_MASK_ALL);
b8c9b27d 799 xfree (dirarg);
c906108c
SS
800
801 if (execarg != NULL
802 && symarg != NULL
5cb316ef 803 && strcmp (execarg, symarg) == 0)
c906108c 804 {
11cf8741
JM
805 /* The exec file and the symbol-file are the same. If we can't
806 open it, better only print one error message.
807 catch_command_errors returns non-zero on success! */
7c953934
TT
808 if (catch_command_errors (exec_file_attach, execarg, !batch_flag, RETURN_MASK_ALL))
809 catch_command_errors (symbol_file_add_main, symarg, !batch_flag, RETURN_MASK_ALL);
c906108c
SS
810 }
811 else
812 {
813 if (execarg != NULL)
7c953934 814 catch_command_errors (exec_file_attach, execarg, !batch_flag, RETURN_MASK_ALL);
c906108c 815 if (symarg != NULL)
7c953934 816 catch_command_errors (symbol_file_add_main, symarg, !batch_flag, RETURN_MASK_ALL);
c906108c 817 }
c906108c 818
a4d9b460
PA
819 if (corearg && pidarg)
820 error (_("\
821Can't attach to process and specify a core file at the same time."));
822
c906108c 823 if (corearg != NULL)
a4d9b460 824 catch_command_errors (core_file_command, corearg,
7c953934 825 !batch_flag, RETURN_MASK_ALL);
a4d9b460
PA
826 else if (pidarg != NULL)
827 catch_command_errors (attach_command, pidarg,
7c953934 828 !batch_flag, RETURN_MASK_ALL);
a4d9b460 829 else if (pid_or_core_arg)
c906108c 830 {
a4d9b460
PA
831 /* The user specified 'gdb program pid' or gdb program core'.
832 If pid_or_core_arg's first character is a digit, try attach
833 first and then corefile. Otherwise try just corefile. */
00546b04 834
a4d9b460 835 if (isdigit (pid_or_core_arg[0]))
11cf8741 836 {
a4d9b460 837 if (catch_command_errors (attach_command, pid_or_core_arg,
7c953934 838 !batch_flag, RETURN_MASK_ALL) == 0)
a4d9b460 839 catch_command_errors (core_file_command, pid_or_core_arg,
7c953934 840 !batch_flag, RETURN_MASK_ALL);
11cf8741 841 }
a4d9b460
PA
842 else /* Can't be a pid, better be a corefile. */
843 catch_command_errors (core_file_command, pid_or_core_arg,
7c953934 844 !batch_flag, RETURN_MASK_ALL);
c906108c 845 }
c906108c
SS
846
847 if (ttyarg != NULL)
3f81c18a 848 set_inferior_io_terminal (ttyarg);
c906108c 849
c906108c
SS
850 /* Error messages should no longer be distinguished with extra output. */
851 error_pre_print = NULL;
852 quit_pre_print = NULL;
defc6f8c 853 warning_pre_print = _("warning: ");
c906108c
SS
854
855 /* Read the .gdbinit file in the current directory, *if* it isn't
856 the same as the $HOME/.gdbinit file (it should exist, also). */
16e7150e
JG
857 if (local_gdbinit && !inhibit_gdbinit)
858 catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
c906108c
SS
859
860 for (i = 0; i < ncmd; i++)
861 {
8a5a3c82 862 if (cmdarg[i].type == CMDARG_FILE)
16026cd7 863 catch_command_errors (source_script, cmdarg[i].string,
7c953934 864 !batch_flag, RETURN_MASK_ALL);
8a5a3c82
AS
865 else /* cmdarg[i].type == CMDARG_COMMAND */
866 catch_command_errors (execute_command, cmdarg[i].string,
7c953934 867 !batch_flag, RETURN_MASK_ALL);
c906108c 868 }
b8c9b27d 869 xfree (cmdarg);
c906108c
SS
870
871 /* Read in the old history after all the command files have been read. */
c5aa993b 872 init_history ();
c906108c 873
7c953934 874 if (batch_flag)
c906108c
SS
875 {
876 /* We have hit the end of the batch file. */
4b0ad762 877 quit_force (NULL, 0);
c906108c
SS
878 }
879
c906108c
SS
880 /* Show time and/or space usage. */
881
882 if (display_time)
883 {
884 long init_time = get_run_time () - time_at_startup;
885
defc6f8c 886 printf_unfiltered (_("Startup time: %ld.%06ld\n"),
c906108c
SS
887 init_time / 1000000, init_time % 1000000);
888 }
889
890 if (display_space)
891 {
892#ifdef HAVE_SBRK
893 extern char **environ;
894 char *lim = (char *) sbrk (0);
895
defc6f8c 896 printf_unfiltered (_("Startup size: data size %ld\n"),
c906108c
SS
897 (long) (lim - (char *) &environ));
898#endif
899 }
900
11cf8741
JM
901 /* NOTE: cagney/1999-11-07: There is probably no reason for not
902 moving this loop and the code found in captured_command_loop()
903 into the command_loop() proper. The main thing holding back that
904 change - SET_TOP_LEVEL() - has been eliminated. */
905 while (1)
906 {
907 catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
908 }
11cf8741
JM
909 /* No exit -- exit is through quit_command. */
910}
c906108c 911
11cf8741 912int
f15ab4a7 913gdb_main (struct captured_main_args *args)
11cf8741 914{
f15ab4a7
AC
915 use_windows = args->use_windows;
916 catch_errors (captured_main, args, "", RETURN_MASK_ALL);
864dbc90
AC
917 /* The only way to end up here is by an error (normal exit is
918 handled by quit_force()), hence always return an error status. */
919 return 1;
c906108c
SS
920}
921
11cf8741 922
c906108c
SS
923/* Don't use *_filtered for printing help. We don't want to prompt
924 for continue no matter how small the screen or how much we're going
925 to print. */
926
927static void
d9fcf2fb 928print_gdb_help (struct ui_file *stream)
c906108c 929{
16e7150e
JG
930 char *system_gdbinit;
931 char *home_gdbinit;
932 char *local_gdbinit;
933
934 get_init_files (&system_gdbinit, &home_gdbinit, &local_gdbinit);
935
defc6f8c 936 fputs_unfiltered (_("\
c906108c 937This is the GNU debugger. Usage:\n\n\
552c04a7
TT
938 gdb [options] [executable-file [core-file or process-id]]\n\
939 gdb [options] --args executable-file [inferior-arguments ...]\n\n\
c906108c 940Options:\n\n\
defc6f8c
TT
941"), stream);
942 fputs_unfiltered (_("\
552c04a7 943 --args Arguments after executable-file are passed to inferior\n\
defc6f8c
TT
944"), stream);
945 fputs_unfiltered (_("\
c906108c
SS
946 -b BAUDRATE Set serial port baud rate used for remote debugging.\n\
947 --batch Exit after processing options.\n\
1a088d06 948 --batch-silent As for --batch, but suppress all gdb stdout output.\n\
4b0ad762
AS
949 --return-child-result\n\
950 GDB exit code will be the child's exit code.\n\
c906108c 951 --cd=DIR Change current directory to DIR.\n\
8a5a3c82
AS
952 --command=FILE, -x Execute GDB commands from FILE.\n\
953 --eval-command=COMMAND, -ex\n\
954 Execute a single GDB command.\n\
955 May be used multiple times and in conjunction\n\
956 with --command.\n\
c906108c 957 --core=COREFILE Analyze the core dump COREFILE.\n\
00546b04 958 --pid=PID Attach to running process PID.\n\
defc6f8c
TT
959"), stream);
960 fputs_unfiltered (_("\
c906108c
SS
961 --dbx DBX compatibility mode.\n\
962 --directory=DIR Search for source files in DIR.\n\
963 --epoch Output information used by epoch emacs-GDB interface.\n\
964 --exec=EXECFILE Use EXECFILE as the executable.\n\
965 --fullname Output information used by emacs-GDB interface.\n\
966 --help Print this message.\n\
defc6f8c
TT
967"), stream);
968 fputs_unfiltered (_("\
8b93c638
JM
969 --interpreter=INTERP\n\
970 Select a specific interpreter / user interface\n\
defc6f8c
TT
971"), stream);
972 fputs_unfiltered (_("\
f47b1503 973 -l TIMEOUT Set timeout in seconds for remote debugging.\n\
c906108c 974 --nw Do not use a window interface.\n\
defc6f8c 975 --nx Do not read "), stream);
96baa820 976 fputs_unfiltered (gdbinit, stream);
defc6f8c 977 fputs_unfiltered (_(" file.\n\
c906108c
SS
978 --quiet Do not print version number on startup.\n\
979 --readnow Fully read symbol files on first access.\n\
defc6f8c
TT
980"), stream);
981 fputs_unfiltered (_("\
c906108c
SS
982 --se=FILE Use FILE as symbol file and executable file.\n\
983 --symbols=SYMFILE Read symbols from SYMFILE.\n\
984 --tty=TTY Use TTY for input/output by the program being debugged.\n\
defc6f8c 985"), stream);
c906108c 986#if defined(TUI)
defc6f8c 987 fputs_unfiltered (_("\
c906108c 988 --tui Use a terminal user interface.\n\
defc6f8c 989"), stream);
c906108c 990#endif
defc6f8c 991 fputs_unfiltered (_("\
c906108c
SS
992 --version Print version information and then exit.\n\
993 -w Use a window interface.\n\
994 --write Set writing into executable and core files.\n\
995 --xdb XDB compatibility mode.\n\
defc6f8c 996"), stream);
defc6f8c 997 fputs_unfiltered (_("\n\
16e7150e
JG
998At startup, GDB reads the following init files and executes their commands:\n\
999"), stream);
1000 if (system_gdbinit)
1001 fprintf_unfiltered (stream, _("\
1002 * system-wide init file: %s\n\
1003"), system_gdbinit);
1004 if (home_gdbinit)
1005 fprintf_unfiltered (stream, _("\
1006 * user-specific init file: %s\n\
1007"), home_gdbinit);
1008 if (local_gdbinit)
1009 fprintf_unfiltered (stream, _("\
1010 * local init file: ./%s\n\
1011"), local_gdbinit);
1012 fputs_unfiltered (_("\n\
c906108c
SS
1013For more information, type \"help\" from within GDB, or consult the\n\
1014GDB manual (available as on-line info or a printed manual).\n\
defc6f8c 1015"), stream);
c16158bc
JM
1016 if (REPORT_BUGS_TO[0] && stream == gdb_stdout)
1017 fprintf_unfiltered (stream, _("\
1018Report bugs to \"%s\".\n\
1019"), REPORT_BUGS_TO);
c906108c 1020}
This page took 0.842048 seconds and 4 git commands to generate.