OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [gdb/] [cli/] [cli-cmds.c] - Blame information for rev 1767

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/* GDB CLI commands.
2
   Copyright 2000, 2001 Free Software Foundation, Inc.
3
 
4
   This file is part of GDB.
5
 
6
   This program is free software; you can redistribute it and/or modify
7
   it under the terms of the GNU General Public License as published by
8
   the Free Software Foundation; either version 2 of the License, or
9
   (at your option) any later version.
10
 
11
   This program is distributed in the hope that it will be useful,
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
   GNU General Public License for more details.
15
 
16
   You should have received a copy of the GNU General Public License
17
   along with this program; if not, write to the Free Software
18
   Foundation, Inc., 59 Temple Place - Suite 330,
19
   Boston, MA 02111-1307, USA.  */
20
 
21
#include "defs.h"
22
#include "completer.h"
23
#include "target.h"      /* For baud_rate, remote_debug and remote_timeout */
24
#include "gdb_wait.h"           /* For shell escape implementation */
25
#include "gnu-regex.h"          /* Used by apropos_command */
26
#include "filenames.h"          /* for DOSish file names */
27
 
28
#ifdef UI_OUT
29
#include "ui-out.h"
30
#endif
31
 
32
#include "top.h"
33
#include "cli/cli-decode.h"
34
#include "cli/cli-script.h"
35
#include "cli/cli-setshow.h"
36
#include "cli/cli-cmds.h"
37
 
38
#ifndef GDBINIT_FILENAME
39
#define GDBINIT_FILENAME        ".gdbinit"
40
#endif
41
 
42
/* FIXME: this should be auto-configured!  */
43
#ifdef __MSDOS__
44
# define CANT_FORK
45
#endif
46
 
47
/* From gdb/top.c */
48
 
49
extern void dont_repeat (void);
50
 
51
extern void set_verbose (char *, int, struct cmd_list_element *);
52
 
53
extern void show_history (char *, int);
54
 
55
extern void set_history (char *, int);
56
 
57
extern void show_commands (char *, int);
58
 
59
/* Prototypes for local functions */
60
 
61
static void complete_command (char *, int);
62
 
63
static void echo_command (char *, int);
64
 
65
static void pwd_command (char *, int);
66
 
67
static void show_version (char *, int);
68
 
69
static void validate_comname (char *);
70
 
71
static void help_command (char *, int);
72
 
73
static void show_command (char *, int);
74
 
75
static void info_command (char *, int);
76
 
77
static void show_debug (char *, int);
78
 
79
static void set_debug (char *, int);
80
 
81
static void show_user (char *, int);
82
 
83
static void make_command (char *, int);
84
 
85
static void shell_escape (char *, int);
86
 
87
void apropos_command (char *, int);
88
 
89
/* Define all cmd_list_elements.  */
90
 
91
/* Chain containing all defined commands.  */
92
 
93
struct cmd_list_element *cmdlist;
94
 
95
/* Chain containing all defined info subcommands.  */
96
 
97
struct cmd_list_element *infolist;
98
 
99
/* Chain containing all defined enable subcommands. */
100
 
101
struct cmd_list_element *enablelist;
102
 
103
/* Chain containing all defined disable subcommands. */
104
 
105
struct cmd_list_element *disablelist;
106
 
107
/* Chain containing all defined toggle subcommands. */
108
 
109
struct cmd_list_element *togglelist;
110
 
111
/* Chain containing all defined stop subcommands. */
112
 
113
struct cmd_list_element *stoplist;
114
 
115
/* Chain containing all defined delete subcommands. */
116
 
117
struct cmd_list_element *deletelist;
118
 
119
/* Chain containing all defined "enable breakpoint" subcommands. */
120
 
121
struct cmd_list_element *enablebreaklist;
122
 
123
/* Chain containing all defined set subcommands */
124
 
125
struct cmd_list_element *setlist;
126
 
127
/* Chain containing all defined unset subcommands */
128
 
129
struct cmd_list_element *unsetlist;
130
 
131
/* Chain containing all defined show subcommands.  */
132
 
133
struct cmd_list_element *showlist;
134
 
135
/* Chain containing all defined \"set history\".  */
136
 
137
struct cmd_list_element *sethistlist;
138
 
139
/* Chain containing all defined \"show history\".  */
140
 
141
struct cmd_list_element *showhistlist;
142
 
143
/* Chain containing all defined \"unset history\".  */
144
 
145
struct cmd_list_element *unsethistlist;
146
 
147
/* Chain containing all defined maintenance subcommands. */
148
 
149
struct cmd_list_element *maintenancelist;
150
 
151
/* Chain containing all defined "maintenance info" subcommands. */
152
 
153
struct cmd_list_element *maintenanceinfolist;
154
 
155
/* Chain containing all defined "maintenance print" subcommands. */
156
 
157
struct cmd_list_element *maintenanceprintlist;
158
 
159
struct cmd_list_element *setprintlist;
160
 
161
struct cmd_list_element *showprintlist;
162
 
163
struct cmd_list_element *setdebuglist;
164
 
165
struct cmd_list_element *showdebuglist;
166
 
167
struct cmd_list_element *setchecklist;
168
 
169
struct cmd_list_element *showchecklist;
170
 
171
/* Utility used everywhere when at least one argument is needed and
172
   none is supplied. */
173
 
174
void
175
error_no_arg (char *why)
176
{
177
  error ("Argument required (%s).", why);
178
}
179
 
180
/* The "info" command is defined as a prefix, with allow_unknown = 0.
181
   Therefore, its own definition is called only for "info" with no args.  */
182
 
183
/* ARGSUSED */
184
static void
185
info_command (char *arg, int from_tty)
186
{
187
  printf_unfiltered ("\"info\" must be followed by the name of an info command.\n");
188
  help_list (infolist, "info ", -1, gdb_stdout);
189
}
190
 
191
/* The "show" command with no arguments shows all the settings.  */
192
 
193
/* ARGSUSED */
194
static void
195
show_command (char *arg, int from_tty)
196
{
197
  cmd_show_list (showlist, from_tty, "");
198
}
199
 
200
/* Provide documentation on command or list given by COMMAND.  FROM_TTY
201
   is ignored.  */
202
 
203
/* ARGSUSED */
204
static void
205
help_command (char *command, int from_tty)
206
{
207
  help_cmd (command, gdb_stdout);
208
}
209
 
210
/* The "complete" command is used by Emacs to implement completion.  */
211
 
212
/* ARGSUSED */
213
static void
214
complete_command (char *arg, int from_tty)
215
{
216
  int i;
217
  int argpoint;
218
  char *completion;
219
 
220
  dont_repeat ();
221
 
222
  if (arg == NULL)
223
    arg = "";
224
  argpoint = strlen (arg);
225
 
226
  for (completion = line_completion_function (arg, i = 0, arg, argpoint);
227
       completion;
228
       completion = line_completion_function (arg, ++i, arg, argpoint))
229
    {
230
      printf_unfiltered ("%s\n", completion);
231
      xfree (completion);
232
    }
233
}
234
 
235
int is_complete_command (void (*func) (char *args, int from_tty))
236
{
237
  return func == complete_command;
238
}
239
 
240
/* ARGSUSED */
241
static void
242
show_version (char *args, int from_tty)
243
{
244
  immediate_quit++;
245
  print_gdb_version (gdb_stdout);
246
  printf_filtered ("\n");
247
  immediate_quit--;
248
}
249
 
250
/* Handle the quit command.  */
251
 
252
void
253
quit_command (char *args, int from_tty)
254
{
255
  if (!quit_confirm ())
256
    error ("Not confirmed.");
257
  quit_force (args, from_tty);
258
}
259
 
260
/* ARGSUSED */
261
static void
262
pwd_command (char *args, int from_tty)
263
{
264
  if (args)
265
    error ("The \"pwd\" command does not take an argument: %s", args);
266
  getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
267
 
268
  if (!STREQ (gdb_dirbuf, current_directory))
269
    printf_unfiltered ("Working directory %s\n (canonically %s).\n",
270
                       current_directory, gdb_dirbuf);
271
  else
272
    printf_unfiltered ("Working directory %s.\n", current_directory);
273
}
274
 
275
void
276
cd_command (char *dir, int from_tty)
277
{
278
  int len;
279
  /* Found something other than leading repetitions of "/..".  */
280
  int found_real_path;
281
  char *p;
282
 
283
  /* If the new directory is absolute, repeat is a no-op; if relative,
284
     repeat might be useful but is more likely to be a mistake.  */
285
  dont_repeat ();
286
 
287
  if (dir == 0)
288
    error_no_arg ("new working directory");
289
 
290
  dir = tilde_expand (dir);
291
  make_cleanup (xfree, dir);
292
 
293
  if (chdir (dir) < 0)
294
    perror_with_name (dir);
295
 
296
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
297
  /* There's too much mess with DOSish names like "d:", "d:.",
298
     "d:./foo" etc.  Instead of having lots of special #ifdef'ed code,
299
     simply get the canonicalized name of the current directory.  */
300
  dir = getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
301
#endif
302
 
303
  len = strlen (dir);
304
  if (IS_DIR_SEPARATOR (dir[len - 1]))
305
    {
306
      /* Remove the trailing slash unless this is a root directory
307
         (including a drive letter on non-Unix systems).  */
308
      if (!(len == 1)           /* "/" */
309
#ifdef HAVE_DOS_BASED_FILE_SYSTEM
310
          && !(len == 3 && dir[1] == ':') /* "d:/" */
311
#endif
312
          )
313
        len--;
314
    }
315
 
316
  dir = savestring (dir, len);
317
  if (IS_ABSOLUTE_PATH (dir))
318
    current_directory = dir;
319
  else
320
    {
321
      if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]))
322
        current_directory = concat (current_directory, dir, NULL);
323
      else
324
        current_directory = concat (current_directory, SLASH_STRING, dir, NULL);
325
      xfree (dir);
326
    }
327
 
328
  /* Now simplify any occurrences of `.' and `..' in the pathname.  */
329
 
330
  found_real_path = 0;
331
  for (p = current_directory; *p;)
332
    {
333
      if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.'
334
          && (p[2] == 0 || IS_DIR_SEPARATOR (p[2])))
335
        strcpy (p, p + 2);
336
      else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.'
337
               && (p[3] == 0 || IS_DIR_SEPARATOR (p[3])))
338
        {
339
          if (found_real_path)
340
            {
341
              /* Search backwards for the directory just before the "/.."
342
                 and obliterate it and the "/..".  */
343
              char *q = p;
344
              while (q != current_directory && !IS_DIR_SEPARATOR (q[-1]))
345
                --q;
346
 
347
              if (q == current_directory)
348
                /* current_directory is
349
                   a relative pathname ("can't happen"--leave it alone).  */
350
                ++p;
351
              else
352
                {
353
                  strcpy (q - 1, p + 3);
354
                  p = q - 1;
355
                }
356
            }
357
          else
358
            /* We are dealing with leading repetitions of "/..", for example
359
               "/../..", which is the Mach super-root.  */
360
            p += 3;
361
        }
362
      else
363
        {
364
          found_real_path = 1;
365
          ++p;
366
        }
367
    }
368
 
369
  forget_cached_source_info ();
370
 
371
  if (from_tty)
372
    pwd_command ((char *) 0, 1);
373
}
374
 
375
void
376
source_command (char *args, int from_tty)
377
{
378
  FILE *stream;
379
  struct cleanup *old_cleanups;
380
  char *file = args;
381
 
382
  if (file == NULL)
383
    {
384
      error ("source command requires pathname of file to source.");
385
    }
386
 
387
  file = tilde_expand (file);
388
  old_cleanups = make_cleanup (xfree, file);
389
 
390
  stream = fopen (file, FOPEN_RT);
391
  if (!stream)
392
    {
393
      if (from_tty)
394
        perror_with_name (file);
395
      else
396
        return;
397
    }
398
 
399
  script_from_file (stream, file);
400
 
401
  do_cleanups (old_cleanups);
402
}
403
 
404
/* ARGSUSED */
405
static void
406
echo_command (char *text, int from_tty)
407
{
408
  char *p = text;
409
  register int c;
410
 
411
  if (text)
412
    while ((c = *p++) != '\0')
413
      {
414
        if (c == '\\')
415
          {
416
            /* \ at end of argument is used after spaces
417
               so they won't be lost.  */
418
            if (*p == 0)
419
              return;
420
 
421
            c = parse_escape (&p);
422
            if (c >= 0)
423
              printf_filtered ("%c", c);
424
          }
425
        else
426
          printf_filtered ("%c", c);
427
      }
428
 
429
  /* Force this output to appear now.  */
430
  wrap_here ("");
431
  gdb_flush (gdb_stdout);
432
}
433
 
434
/* ARGSUSED */
435
static void
436
shell_escape (char *arg, int from_tty)
437
{
438
#ifdef CANT_FORK
439
  /* If ARG is NULL, they want an inferior shell, but `system' just
440
     reports if the shell is available when passed a NULL arg.  */
441
  int rc = system (arg ? arg : "");
442
 
443
  if (!arg)
444
    arg = "inferior shell";
445
 
446
  if (rc == -1)
447
    {
448
      fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", arg,
449
                          safe_strerror (errno));
450
      gdb_flush (gdb_stderr);
451
    }
452
  else if (rc)
453
    {
454
      fprintf_unfiltered (gdb_stderr, "%s exited with status %d\n", arg, rc);
455
      gdb_flush (gdb_stderr);
456
    }
457
#ifdef __DJGPP__
458
  /* Make sure to return to the directory GDB thinks it is, in case the
459
     shell command we just ran changed it.  */
460
  chdir (current_directory);
461
#endif
462
#else /* Can fork.  */
463
  int rc, status, pid;
464
  char *p, *user_shell;
465
 
466
  if ((user_shell = (char *) getenv ("SHELL")) == NULL)
467
    user_shell = "/bin/sh";
468
 
469
  /* Get the name of the shell for arg0 */
470
  if ((p = strrchr (user_shell, '/')) == NULL)
471
    p = user_shell;
472
  else
473
    p++;                        /* Get past '/' */
474
 
475
  if ((pid = fork ()) == 0)
476
    {
477
      if (!arg)
478
        execl (user_shell, p, 0);
479
      else
480
        execl (user_shell, p, "-c", arg, 0);
481
 
482
      fprintf_unfiltered (gdb_stderr, "Cannot execute %s: %s\n", user_shell,
483
                          safe_strerror (errno));
484
      gdb_flush (gdb_stderr);
485
      _exit (0177);
486
    }
487
 
488
  if (pid != -1)
489
    while ((rc = wait (&status)) != pid && rc != -1)
490
      ;
491
  else
492
    error ("Fork failed");
493
#endif /* Can fork.  */
494
}
495
 
496
static void
497
make_command (char *arg, int from_tty)
498
{
499
  char *p;
500
 
501
  if (arg == 0)
502
    p = "make";
503
  else
504
    {
505
      p = xmalloc (sizeof ("make ") + strlen (arg));
506
      strcpy (p, "make ");
507
      strcpy (p + sizeof ("make ") - 1, arg);
508
    }
509
 
510
  shell_escape (p, from_tty);
511
}
512
 
513
/* ARGSUSED */
514
static void
515
show_user (char *args, int from_tty)
516
{
517
  struct cmd_list_element *c;
518
  extern struct cmd_list_element *cmdlist;
519
 
520
  if (args)
521
    {
522
      c = lookup_cmd (&args, cmdlist, "", 0, 1);
523
      if (c->class != class_user)
524
        error ("Not a user command.");
525
      show_user_1 (c, gdb_stdout);
526
    }
527
  else
528
    {
529
      for (c = cmdlist; c; c = c->next)
530
        {
531
          if (c->class == class_user)
532
            show_user_1 (c, gdb_stdout);
533
        }
534
    }
535
}
536
 
537
/* Search through names of commands and documentations for a certain
538
   regular expression.
539
*/
540
void
541
apropos_command (char *searchstr, int from_tty)
542
{
543
  extern struct cmd_list_element *cmdlist; /*This is the main command list*/
544
  regex_t pattern;
545
  char *pattern_fastmap;
546
  char errorbuffer[512];
547
  pattern_fastmap = xcalloc (256, sizeof (char));
548
  if (searchstr == NULL)
549
      error("REGEXP string is empty");
550
 
551
  if (regcomp(&pattern,searchstr,REG_ICASE) == 0)
552
    {
553
      pattern.fastmap=pattern_fastmap;
554
      re_compile_fastmap(&pattern);
555
      apropos_cmd (gdb_stdout,cmdlist,&pattern,"");
556
    }
557
  else
558
    {
559
      regerror(regcomp(&pattern,searchstr,REG_ICASE),NULL,errorbuffer,512);
560
      error("Error in regular expression:%s",errorbuffer);
561
    }
562
  xfree (pattern_fastmap);
563
}
564
 
565
static void
566
set_debug (char *arg, int from_tty)
567
{
568
  printf_unfiltered ("\"set debug\" must be followed by the name of a print subcommand.\n");
569
  help_list (setdebuglist, "set debug ", -1, gdb_stdout);
570
}
571
 
572
static void
573
show_debug (char *args, int from_tty)
574
{
575
  cmd_show_list (showdebuglist, from_tty, "");
576
}
577
 
578
void
579
init_cmd_lists (void)
580
{
581
  cmdlist = NULL;
582
  infolist = NULL;
583
  enablelist = NULL;
584
  disablelist = NULL;
585
  togglelist = NULL;
586
  stoplist = NULL;
587
  deletelist = NULL;
588
  enablebreaklist = NULL;
589
  setlist = NULL;
590
  unsetlist = NULL;
591
  showlist = NULL;
592
  sethistlist = NULL;
593
  showhistlist = NULL;
594
  unsethistlist = NULL;
595
  maintenancelist = NULL;
596
  maintenanceinfolist = NULL;
597
  maintenanceprintlist = NULL;
598
  setprintlist = NULL;
599
  showprintlist = NULL;
600
  setchecklist = NULL;
601
  showchecklist = NULL;
602
}
603
 
604
 
605
void
606
init_cli_cmds (void)
607
{
608
  struct cmd_list_element *c;
609
 
610
  /* Define the classes of commands.
611
     They will appear in the help list in the reverse of this order.  */
612
 
613
  add_cmd ("internals", class_maintenance, NO_FUNCTION,
614
           "Maintenance commands.\n\
615
Some gdb commands are provided just for use by gdb maintainers.\n\
616
These commands are subject to frequent change, and may not be as\n\
617
well documented as user commands.",
618
           &cmdlist);
619
  add_cmd ("obscure", class_obscure, NO_FUNCTION, "Obscure features.", &cmdlist);
620
  add_cmd ("aliases", class_alias, NO_FUNCTION, "Aliases of other commands.", &cmdlist);
621
  add_cmd ("user-defined", class_user, NO_FUNCTION, "User-defined commands.\n\
622
The commands in this class are those defined by the user.\n\
623
Use the \"define\" command to define a command.", &cmdlist);
624
  add_cmd ("support", class_support, NO_FUNCTION, "Support facilities.", &cmdlist);
625
  if (!dbx_commands)
626
    add_cmd ("status", class_info, NO_FUNCTION, "Status inquiries.", &cmdlist);
627
  add_cmd ("files", class_files, NO_FUNCTION, "Specifying and examining files.", &cmdlist);
628
  add_cmd ("breakpoints", class_breakpoint, NO_FUNCTION, "Making program stop at certain points.", &cmdlist);
629
  add_cmd ("data", class_vars, NO_FUNCTION, "Examining data.", &cmdlist);
630
  add_cmd ("stack", class_stack, NO_FUNCTION, "Examining the stack.\n\
631
The stack is made up of stack frames.  Gdb assigns numbers to stack frames\n\
632
counting from zero for the innermost (currently executing) frame.\n\n\
633
At any time gdb identifies one frame as the \"selected\" frame.\n\
634
Variable lookups are done with respect to the selected frame.\n\
635
When the program being debugged stops, gdb selects the innermost frame.\n\
636
The commands below can be used to select other frames by number or address.",
637
           &cmdlist);
638
  add_cmd ("running", class_run, NO_FUNCTION, "Running the program.", &cmdlist);
639
 
640
  /* Define general commands. */
641
 
642
  add_com ("pwd", class_files, pwd_command,
643
        "Print working directory.  This is used for your program as well.");
644
  c = add_cmd ("cd", class_files, cd_command,
645
               "Set working directory to DIR for debugger and program being debugged.\n\
646
The change does not take effect for the program being debugged\n\
647
until the next time it is started.", &cmdlist);
648
  c->completer = filename_completer;
649
 
650
  add_com ("echo", class_support, echo_command,
651
           "Print a constant string.  Give string as argument.\n\
652
C escape sequences may be used in the argument.\n\
653
No newline is added at the end of the argument;\n\
654
use \"\\n\" if you want a newline to be printed.\n\
655
Since leading and trailing whitespace are ignored in command arguments,\n\
656
if you want to print some you must use \"\\\" before leading whitespace\n\
657
to be printed or after trailing whitespace.");
658
  add_com ("document", class_support, document_command,
659
           "Document a user-defined command.\n\
660
Give command name as argument.  Give documentation on following lines.\n\
661
End with a line of just \"end\".");
662
  add_com ("define", class_support, define_command,
663
           "Define a new command name.  Command name is argument.\n\
664
Definition appears on following lines, one command per line.\n\
665
End with a line of just \"end\".\n\
666
Use the \"document\" command to give documentation for the new command.\n\
667
Commands defined in this way may have up to ten arguments.");
668
 
669
  c = add_cmd ("source", class_support, source_command,
670
               "Read commands from a file named FILE.\n\
671
Note that the file \"" GDBINIT_FILENAME "\" is read automatically in this way\n\
672
when gdb is started.", &cmdlist);
673
  c->completer = filename_completer;
674
 
675
  add_com ("quit", class_support, quit_command, "Exit gdb.");
676
  add_com ("help", class_support, help_command, "Print list of commands.");
677
  add_com_alias ("q", "quit", class_support, 1);
678
  add_com_alias ("h", "help", class_support, 1);
679
 
680
  c = add_set_cmd ("verbose", class_support, var_boolean, (char *) &info_verbose,
681
                   "Set ",
682
                   &setlist),
683
    add_show_from_set (c, &showlist);
684
  c->function.sfunc = set_verbose;
685
  set_verbose (NULL, 0, c);
686
 
687
  add_prefix_cmd ("history", class_support, set_history,
688
                  "Generic command for setting command history parameters.",
689
                  &sethistlist, "set history ", 0, &setlist);
690
  add_prefix_cmd ("history", class_support, show_history,
691
                  "Generic command for showing command history parameters.",
692
                  &showhistlist, "show history ", 0, &showlist);
693
 
694
  add_show_from_set
695
    (add_set_cmd ("expansion", no_class, var_boolean, (char *) &history_expansion_p,
696
                  "Set history expansion on command input.\n\
697
Without an argument, history expansion is enabled.", &sethistlist),
698
     &showhistlist);
699
 
700
  add_prefix_cmd ("info", class_info, info_command,
701
     "Generic command for showing things about the program being debugged.",
702
                  &infolist, "info ", 0, &cmdlist);
703
  add_com_alias ("i", "info", class_info, 1);
704
 
705
  add_com ("complete", class_obscure, complete_command,
706
           "List the completions for the rest of the line as a command.");
707
 
708
  add_prefix_cmd ("show", class_info, show_command,
709
                  "Generic command for showing things about the debugger.",
710
                  &showlist, "show ", 0, &cmdlist);
711
  /* Another way to get at the same thing.  */
712
  add_info ("set", show_command, "Show all GDB settings.");
713
 
714
  add_cmd ("commands", no_class, show_commands,
715
           "Show the history of commands you typed.\n\
716
You can supply a command number to start with, or a `+' to start after\n\
717
the previous command number shown.",
718
           &showlist);
719
 
720
  add_cmd ("version", no_class, show_version,
721
           "Show what version of GDB this is.", &showlist);
722
 
723
  add_com ("while", class_support, while_command,
724
           "Execute nested commands WHILE the conditional expression is non zero.\n\
725
The conditional expression must follow the word `while' and must in turn be\n\
726
followed by a new line.  The nested commands must be entered one per line,\n\
727
and should be terminated by the word `end'.");
728
 
729
  add_com ("if", class_support, if_command,
730
           "Execute nested commands once IF the conditional expression is non zero.\n\
731
The conditional expression must follow the word `if' and must in turn be\n\
732
followed by a new line.  The nested commands must be entered one per line,\n\
733
and should be terminated by the word 'else' or `end'.  If an else clause\n\
734
is used, the same rules apply to its nested commands as to the first ones.");
735
 
736
  /* If target is open when baud changes, it doesn't take effect until the
737
     next open (I think, not sure).  */
738
  add_show_from_set (add_set_cmd ("remotebaud", no_class,
739
                                  var_zinteger, (char *) &baud_rate,
740
                                  "Set baud rate for remote serial I/O.\n\
741
This value is used to set the speed of the serial port when debugging\n\
742
using remote targets.", &setlist),
743
                     &showlist);
744
 
745
  c = add_set_cmd ("remotedebug", no_class, var_zinteger,
746
                   (char *) &remote_debug,
747
                   "Set debugging of remote protocol.\n\
748
When enabled, each packet sent or received with the remote target\n\
749
is displayed.", &setlist);
750
  deprecate_cmd (c, "set debug remote");
751
  deprecate_cmd (add_show_from_set (c, &showlist), "show debug remote");
752
 
753
  add_show_from_set (add_set_cmd ("remote", no_class, var_zinteger,
754
                                  (char *) &remote_debug,
755
                                  "Set debugging of remote protocol.\n\
756
When enabled, each packet sent or received with the remote target\n\
757
is displayed.", &setdebuglist),
758
                     &showdebuglist);
759
 
760
  add_show_from_set (
761
                      add_set_cmd ("remotetimeout", no_class, var_integer, (char *) &remote_timeout,
762
                                   "Set timeout limit to wait for target to respond.\n\
763
This value is used to set the time limit for gdb to wait for a response\n\
764
from the target.", &setlist),
765
                      &showlist);
766
 
767
  add_prefix_cmd ("debug", no_class, set_debug,
768
                  "Generic command for setting gdb debugging flags",
769
                  &setdebuglist, "set debug ", 0, &setlist);
770
 
771
  add_prefix_cmd ("debug", no_class, show_debug,
772
                  "Generic command for showing gdb debugging flags",
773
                  &showdebuglist, "show debug ", 0, &showlist);
774
 
775
  c = add_com ("shell", class_support, shell_escape,
776
               "Execute the rest of the line as a shell command.  \n\
777
With no arguments, run an inferior shell.");
778
  c->completer = filename_completer;
779
 
780
  /* NOTE: cagney/2000-03-20: Being able to enter ``(gdb) !ls'' would
781
     be a really useful feature.  Unfortunately, the below wont do
782
     this.  Instead it adds support for the form ``(gdb) ! ls''
783
     (i.e. the space is required).  If the ``!'' command below is
784
     added the complains about no ``!'' command would be replaced by
785
     complains about how the ``!'' command is broken :-) */
786
  if (xdb_commands)
787
    add_com_alias ("!", "shell", class_support, 0);
788
 
789
  c = add_com ("make", class_support, make_command,
790
          "Run the ``make'' program using the rest of the line as arguments.");
791
  c->completer = filename_completer;
792
  add_cmd ("user", no_class, show_user,
793
           "Show definitions of user defined commands.\n\
794
Argument is the name of the user defined command.\n\
795
With no argument, show definitions of all user defined commands.", &showlist);
796
  add_com ("apropos", class_support, apropos_command, "Search for commands matching a REGEXP");
797
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.