~ubuntu-branches/ubuntu/utopic/crash/utopic-proposed

« back to all changes in this revision

Viewing changes to gdb-6.1/gdb-6.1/gdb-6.1/gdb-6.1/gdb-6.1/gdb-6.1/gdb/main.c

  • Committer: Bazaar Package Importer
  • Author(s): Stephan Hermann
  • Date: 2008-05-05 12:54:24 UTC
  • mfrom: (0.1.10 upstream) (2.1.3 lenny)
  • Revision ID: james.westby@ubuntu.com-20080505125424-5q3qi10b5t8f1hc1
Tags: 4.0-6.3-1ubuntu1
* Merge from debian unstable, remaining changes:
  - debian/patches/01_spu_commands.dpatch:
    + SPU extension support
  - debian/rules:
    + Build SPU on powerpc

Show diffs side-by-side

added added

removed removed

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