2003-04-08 Elena Zannoni <ezannoni@redhat.com>
[external/binutils.git] / gdb / infcmd.c
1 /* Memory-access and commands for "inferior" process, for GDB.
2    Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
3    1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 #include "defs.h"
24 #include <signal.h>
25 #include "gdb_string.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "frame.h"
29 #include "inferior.h"
30 #include "environ.h"
31 #include "value.h"
32 #include "gdbcmd.h"
33 #include "symfile.h"
34 #include "gdbcore.h"
35 #include "target.h"
36 #include "language.h"
37 #include "symfile.h"
38 #include "objfiles.h"
39 #include "completer.h"
40 #include "ui-out.h"
41 #include "event-top.h"
42 #include "parser-defs.h"
43 #include "regcache.h"
44 #include "reggroups.h"
45 #include "block.h"
46 #include <ctype.h>
47
48 /* Functions exported for general use, in inferior.h: */
49
50 void all_registers_info (char *, int);
51
52 void registers_info (char *, int);
53
54 void nexti_command (char *, int);
55
56 void stepi_command (char *, int);
57
58 void continue_command (char *, int);
59
60 void interrupt_target_command (char *args, int from_tty);
61
62 /* Local functions: */
63
64 static void nofp_registers_info (char *, int);
65
66 static void print_return_value (int struct_return, struct type *value_type);
67
68 static void finish_command_continuation (struct continuation_arg *);
69
70 static void until_next_command (int);
71
72 static void until_command (char *, int);
73
74 static void path_info (char *, int);
75
76 static void path_command (char *, int);
77
78 static void unset_command (char *, int);
79
80 static void float_info (char *, int);
81
82 static void detach_command (char *, int);
83
84 static void unset_environment_command (char *, int);
85
86 static void set_environment_command (char *, int);
87
88 static void environment_info (char *, int);
89
90 static void program_info (char *, int);
91
92 static void finish_command (char *, int);
93
94 static void signal_command (char *, int);
95
96 static void jump_command (char *, int);
97
98 static void step_1 (int, int, char *);
99 static void step_once (int skip_subroutines, int single_inst, int count);
100 static void step_1_continuation (struct continuation_arg *arg);
101
102 static void next_command (char *, int);
103
104 static void step_command (char *, int);
105
106 static void run_command (char *, int);
107
108 static void run_no_args_command (char *args, int from_tty);
109
110 static void go_command (char *line_no, int from_tty);
111
112 static int strip_bg_char (char **);
113
114 void _initialize_infcmd (void);
115
116 #define GO_USAGE   "Usage: go <location>\n"
117
118 static void breakpoint_auto_delete_contents (void *);
119
120 #define ERROR_NO_INFERIOR \
121    if (!target_has_execution) error ("The program is not being run.");
122
123 /* String containing arguments to give to the program, separated by spaces.
124    Empty string (pointer to '\0') means no args.  */
125
126 static char *inferior_args;
127
128 /* The inferior arguments as a vector.  If INFERIOR_ARGC is nonzero,
129    then we must compute INFERIOR_ARGS from this (via the target).  */
130
131 static int inferior_argc;
132 static char **inferior_argv;
133
134 /* File name for default use for standard in/out in the inferior.  */
135
136 char *inferior_io_terminal;
137
138 /* Pid of our debugged inferior, or 0 if no inferior now.
139    Since various parts of infrun.c test this to see whether there is a program
140    being debugged it should be nonzero (currently 3 is used) for remote
141    debugging.  */
142
143 ptid_t inferior_ptid;
144
145 /* Last signal that the inferior received (why it stopped).  */
146
147 enum target_signal stop_signal;
148
149 /* Address at which inferior stopped.  */
150
151 CORE_ADDR stop_pc;
152
153 /* Chain containing status of breakpoint(s) that we have stopped at.  */
154
155 bpstat stop_bpstat;
156
157 /* Flag indicating that a command has proceeded the inferior past the
158    current breakpoint.  */
159
160 int breakpoint_proceeded;
161
162 /* Nonzero if stopped due to a step command.  */
163
164 int stop_step;
165
166 /* Nonzero if stopped due to completion of a stack dummy routine.  */
167
168 int stop_stack_dummy;
169
170 /* Nonzero if stopped due to a random (unexpected) signal in inferior
171    process.  */
172
173 int stopped_by_random_signal;
174
175 /* Range to single step within.
176    If this is nonzero, respond to a single-step signal
177    by continuing to step if the pc is in this range.  */
178
179 CORE_ADDR step_range_start;     /* Inclusive */
180 CORE_ADDR step_range_end;       /* Exclusive */
181
182 /* Stack frame address as of when stepping command was issued.
183    This is how we know when we step into a subroutine call,
184    and how to set the frame for the breakpoint used to step out.  */
185
186 struct frame_id step_frame_id;
187
188 /* Our notion of the current stack pointer.  */
189
190 CORE_ADDR step_sp;
191
192 enum step_over_calls_kind step_over_calls;
193
194 /* If stepping, nonzero means step count is > 1
195    so don't print frame next time inferior stops
196    if it stops due to stepping.  */
197
198 int step_multi;
199
200 /* Environment to use for running inferior,
201    in format described in environ.h.  */
202
203 struct environ *inferior_environ;
204 \f
205 /* Accessor routines. */
206
207 char *
208 get_inferior_args (void)
209 {
210   if (inferior_argc != 0)
211     {
212       char *n, *old;
213
214       n = gdbarch_construct_inferior_arguments (current_gdbarch,
215                                                 inferior_argc, inferior_argv);
216       old = set_inferior_args (n);
217       xfree (old);
218     }
219
220   if (inferior_args == NULL)
221     inferior_args = xstrdup ("");
222
223   return inferior_args;
224 }
225
226 char *
227 set_inferior_args (char *newargs)
228 {
229   char *saved_args = inferior_args;
230
231   inferior_args = newargs;
232   inferior_argc = 0;
233   inferior_argv = 0;
234
235   return saved_args;
236 }
237
238 void
239 set_inferior_args_vector (int argc, char **argv)
240 {
241   inferior_argc = argc;
242   inferior_argv = argv;
243 }
244
245 /* Notice when `set args' is run.  */
246 static void
247 notice_args_set (char *args, int from_tty, struct cmd_list_element *c)
248 {
249   inferior_argc = 0;
250   inferior_argv = 0;
251 }
252
253 /* Notice when `show args' is run.  */
254 static void
255 notice_args_read (char *args, int from_tty, struct cmd_list_element *c)
256 {
257   /* Might compute the value.  */
258   get_inferior_args ();
259 }
260
261 \f
262 /* Compute command-line string given argument vector.  This does the
263    same shell processing as fork_inferior.  */
264 /* ARGSUSED */
265 char *
266 construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
267 {
268   char *result;
269
270   if (STARTUP_WITH_SHELL)
271     {
272       /* This holds all the characters considered special to the
273          typical Unix shells.  We include `^' because the SunOS
274          /bin/sh treats it as a synonym for `|'.  */
275       char *special = "\"!#$&*()\\|[]{}<>?'\"`~^; \t\n";
276       int i;
277       int length = 0;
278       char *out, *cp;
279
280       /* We over-compute the size.  It shouldn't matter.  */
281       for (i = 0; i < argc; ++i)
282         length += 2 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
283
284       result = (char *) xmalloc (length);
285       out = result;
286
287       for (i = 0; i < argc; ++i)
288         {
289           if (i > 0)
290             *out++ = ' ';
291
292           /* Need to handle empty arguments specially.  */
293           if (argv[i][0] == '\0')
294             {
295               *out++ = '\'';
296               *out++ = '\'';
297             }
298           else
299             {
300               for (cp = argv[i]; *cp; ++cp)
301                 {
302                   if (strchr (special, *cp) != NULL)
303                     *out++ = '\\';
304                   *out++ = *cp;
305                 }
306             }
307         }
308       *out = '\0';
309     }
310   else
311     {
312       /* In this case we can't handle arguments that contain spaces,
313          tabs, or newlines -- see breakup_args().  */
314       int i;
315       int length = 0;
316
317       for (i = 0; i < argc; ++i)
318         {
319           char *cp = strchr (argv[i], ' ');
320           if (cp == NULL)
321             cp = strchr (argv[i], '\t');
322           if (cp == NULL)
323             cp = strchr (argv[i], '\n');
324           if (cp != NULL)
325             error ("can't handle command-line argument containing whitespace");
326           length += strlen (argv[i]) + 1;
327         }
328
329       result = (char *) xmalloc (length);
330       result[0] = '\0';
331       for (i = 0; i < argc; ++i)
332         {
333           if (i > 0)
334             strcat (result, " ");
335           strcat (result, argv[i]);
336         }
337     }
338
339   return result;
340 }
341 \f
342
343 /* This function detects whether or not a '&' character (indicating
344    background execution) has been added as *the last* of the arguments ARGS
345    of a command. If it has, it removes it and returns 1. Otherwise it
346    does nothing and returns 0. */
347 static int
348 strip_bg_char (char **args)
349 {
350   char *p = NULL;
351
352   p = strchr (*args, '&');
353
354   if (p)
355     {
356       if (p == (*args + strlen (*args) - 1))
357         {
358           if (strlen (*args) > 1)
359             {
360               do
361                 p--;
362               while (*p == ' ' || *p == '\t');
363               *(p + 1) = '\0';
364             }
365           else
366             *args = 0;
367           return 1;
368         }
369     }
370   return 0;
371 }
372
373 /* ARGSUSED */
374 void
375 tty_command (char *file, int from_tty)
376 {
377   if (file == 0)
378     error_no_arg ("terminal name for running target process");
379
380   inferior_io_terminal = savestring (file, strlen (file));
381 }
382
383 static void
384 run_command (char *args, int from_tty)
385 {
386   char *exec_file;
387
388   dont_repeat ();
389
390   if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
391     {
392       if (from_tty
393           && !query ("The program being debugged has been started already.\n\
394 Start it from the beginning? "))
395         error ("Program not restarted.");
396       target_kill ();
397 #if defined(SOLIB_RESTART)
398       SOLIB_RESTART ();
399 #endif
400       init_wait_for_inferior ();
401     }
402
403   clear_breakpoint_hit_counts ();
404
405   /* Purge old solib objfiles. */
406   objfile_purge_solibs ();
407
408   do_run_cleanups (NULL);
409
410   /* The comment here used to read, "The exec file is re-read every
411      time we do a generic_mourn_inferior, so we just have to worry
412      about the symbol file."  The `generic_mourn_inferior' function
413      gets called whenever the program exits.  However, suppose the
414      program exits, and *then* the executable file changes?  We need
415      to check again here.  Since reopen_exec_file doesn't do anything
416      if the timestamp hasn't changed, I don't see the harm.  */
417   reopen_exec_file ();
418   reread_symbols ();
419
420   exec_file = (char *) get_exec_file (0);
421
422   /* We keep symbols from add-symbol-file, on the grounds that the
423      user might want to add some symbols before running the program
424      (right?).  But sometimes (dynamic loading where the user manually
425      introduces the new symbols with add-symbol-file), the code which
426      the symbols describe does not persist between runs.  Currently
427      the user has to manually nuke all symbols between runs if they
428      want them to go away (PR 2207).  This is probably reasonable.  */
429
430   if (!args)
431     {
432       if (event_loop_p && target_can_async_p ())
433         async_disable_stdin ();
434     }
435   else
436     {
437       int async_exec = strip_bg_char (&args);
438
439       /* If we get a request for running in the bg but the target
440          doesn't support it, error out. */
441       if (event_loop_p && async_exec && !target_can_async_p ())
442         error ("Asynchronous execution not supported on this target.");
443
444       /* If we don't get a request of running in the bg, then we need
445          to simulate synchronous (fg) execution. */
446       if (event_loop_p && !async_exec && target_can_async_p ())
447         {
448           /* Simulate synchronous execution */
449           async_disable_stdin ();
450         }
451
452       /* If there were other args, beside '&', process them. */
453       if (args)
454         {
455           char *old_args = set_inferior_args (xstrdup (args));
456           xfree (old_args);
457         }
458     }
459
460   if (from_tty)
461     {
462       ui_out_field_string (uiout, NULL, "Starting program");
463       ui_out_text (uiout, ": ");
464       if (exec_file)
465         ui_out_field_string (uiout, "execfile", exec_file);
466       ui_out_spaces (uiout, 1);
467       /* We call get_inferior_args() because we might need to compute
468          the value now.  */
469       ui_out_field_string (uiout, "infargs", get_inferior_args ());
470       ui_out_text (uiout, "\n");
471       ui_out_flush (uiout);
472     }
473
474   /* We call get_inferior_args() because we might need to compute
475      the value now.  */
476   target_create_inferior (exec_file, get_inferior_args (),
477                           environ_vector (inferior_environ));
478 }
479
480
481 static void
482 run_no_args_command (char *args, int from_tty)
483 {
484   char *old_args = set_inferior_args (xstrdup (""));
485   xfree (old_args);
486 }
487 \f
488
489 void
490 continue_command (char *proc_count_exp, int from_tty)
491 {
492   int async_exec = 0;
493   ERROR_NO_INFERIOR;
494
495   /* Find out whether we must run in the background. */
496   if (proc_count_exp != NULL)
497     async_exec = strip_bg_char (&proc_count_exp);
498
499   /* If we must run in the background, but the target can't do it,
500      error out. */
501   if (event_loop_p && async_exec && !target_can_async_p ())
502     error ("Asynchronous execution not supported on this target.");
503
504   /* If we are not asked to run in the bg, then prepare to run in the
505      foreground, synchronously. */
506   if (event_loop_p && !async_exec && target_can_async_p ())
507     {
508       /* Simulate synchronous execution */
509       async_disable_stdin ();
510     }
511
512   /* If have argument (besides '&'), set proceed count of breakpoint
513      we stopped at.  */
514   if (proc_count_exp != NULL)
515     {
516       bpstat bs = stop_bpstat;
517       int num = bpstat_num (&bs);
518       if (num == 0 && from_tty)
519         {
520           printf_filtered
521             ("Not stopped at any breakpoint; argument ignored.\n");
522         }
523       while (num != 0)
524         {
525           set_ignore_count (num,
526                             parse_and_eval_long (proc_count_exp) - 1,
527                             from_tty);
528           /* set_ignore_count prints a message ending with a period.
529              So print two spaces before "Continuing.".  */
530           if (from_tty)
531             printf_filtered ("  ");
532           num = bpstat_num (&bs);
533         }
534     }
535
536   if (from_tty)
537     printf_filtered ("Continuing.\n");
538
539   clear_proceed_status ();
540
541   proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
542 }
543 \f
544 /* Step until outside of current statement.  */
545
546 /* ARGSUSED */
547 static void
548 step_command (char *count_string, int from_tty)
549 {
550   step_1 (0, 0, count_string);
551 }
552
553 /* Likewise, but skip over subroutine calls as if single instructions.  */
554
555 /* ARGSUSED */
556 static void
557 next_command (char *count_string, int from_tty)
558 {
559   step_1 (1, 0, count_string);
560 }
561
562 /* Likewise, but step only one instruction.  */
563
564 /* ARGSUSED */
565 void
566 stepi_command (char *count_string, int from_tty)
567 {
568   step_1 (0, 1, count_string);
569 }
570
571 /* ARGSUSED */
572 void
573 nexti_command (char *count_string, int from_tty)
574 {
575   step_1 (1, 1, count_string);
576 }
577
578 static void
579 disable_longjmp_breakpoint_cleanup (void *ignore)
580 {
581   disable_longjmp_breakpoint ();
582 }
583
584 static void
585 step_1 (int skip_subroutines, int single_inst, char *count_string)
586 {
587   register int count = 1;
588   struct frame_info *frame;
589   struct cleanup *cleanups = 0;
590   int async_exec = 0;
591
592   ERROR_NO_INFERIOR;
593
594   if (count_string)
595     async_exec = strip_bg_char (&count_string);
596
597   /* If we get a request for running in the bg but the target
598      doesn't support it, error out. */
599   if (event_loop_p && async_exec && !target_can_async_p ())
600     error ("Asynchronous execution not supported on this target.");
601
602   /* If we don't get a request of running in the bg, then we need
603      to simulate synchronous (fg) execution. */
604   if (event_loop_p && !async_exec && target_can_async_p ())
605     {
606       /* Simulate synchronous execution */
607       async_disable_stdin ();
608     }
609
610   count = count_string ? parse_and_eval_long (count_string) : 1;
611
612   if (!single_inst || skip_subroutines)         /* leave si command alone */
613     {
614       enable_longjmp_breakpoint ();
615       if (!event_loop_p || !target_can_async_p ())
616         cleanups = make_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
617       else
618         make_exec_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
619     }
620
621   /* In synchronous case, all is well, just use the regular for loop. */
622   if (!event_loop_p || !target_can_async_p ())
623     {
624       for (; count > 0; count--)
625         {
626           clear_proceed_status ();
627
628           frame = get_current_frame ();
629           if (!frame)           /* Avoid coredump here.  Why tho? */
630             error ("No current frame");
631           step_frame_id = get_frame_id (frame);
632           step_sp = read_sp ();
633
634           if (!single_inst)
635             {
636               find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
637               if (step_range_end == 0)
638                 {
639                   char *name;
640                   if (find_pc_partial_function (stop_pc, &name, &step_range_start,
641                                                 &step_range_end) == 0)
642                     error ("Cannot find bounds of current function");
643
644                   target_terminal_ours ();
645                   printf_filtered ("\
646 Single stepping until exit from function %s, \n\
647 which has no line number information.\n", name);
648                 }
649             }
650           else
651             {
652               /* Say we are stepping, but stop after one insn whatever it does.  */
653               step_range_start = step_range_end = 1;
654               if (!skip_subroutines)
655                 /* It is stepi.
656                    Don't step over function calls, not even to functions lacking
657                    line numbers.  */
658                 step_over_calls = STEP_OVER_NONE;
659             }
660
661           if (skip_subroutines)
662             step_over_calls = STEP_OVER_ALL;
663
664           step_multi = (count > 1);
665           proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
666
667           if (!stop_step)
668             break;
669
670           /* FIXME: On nexti, this may have already been done (when we hit the
671              step resume break, I think).  Probably this should be moved to
672              wait_for_inferior (near the top).  */
673 #if defined (SHIFT_INST_REGS)
674           SHIFT_INST_REGS ();
675 #endif
676         }
677
678       if (!single_inst || skip_subroutines)
679         do_cleanups (cleanups);
680       return;
681     }
682   /* In case of asynchronous target things get complicated, do only
683      one step for now, before returning control to the event loop. Let
684      the continuation figure out how many other steps we need to do,
685      and handle them one at the time, through step_once(). */
686   else
687     {
688       if (event_loop_p && target_can_async_p ())
689         step_once (skip_subroutines, single_inst, count);
690     }
691 }
692
693 /* Called after we are done with one step operation, to check whether
694    we need to step again, before we print the prompt and return control
695    to the user. If count is > 1, we will need to do one more call to
696    proceed(), via step_once(). Basically it is like step_once and
697    step_1_continuation are co-recursive. */
698 static void
699 step_1_continuation (struct continuation_arg *arg)
700 {
701   int count;
702   int skip_subroutines;
703   int single_inst;
704
705   skip_subroutines = arg->data.integer;
706   single_inst      = arg->next->data.integer;
707   count            = arg->next->next->data.integer;
708
709   if (stop_step)
710     {
711       /* FIXME: On nexti, this may have already been done (when we hit the
712          step resume break, I think).  Probably this should be moved to
713          wait_for_inferior (near the top).  */
714 #if defined (SHIFT_INST_REGS)
715       SHIFT_INST_REGS ();
716 #endif
717       step_once (skip_subroutines, single_inst, count - 1);
718     }
719   else
720     if (!single_inst || skip_subroutines)
721       do_exec_cleanups (ALL_CLEANUPS);
722 }
723
724 /* Do just one step operation. If count >1 we will have to set up a
725    continuation to be done after the target stops (after this one
726    step). This is useful to implement the 'step n' kind of commands, in
727    case of asynchronous targets. We had to split step_1 into two parts,
728    one to be done before proceed() and one afterwards. This function is
729    called in case of step n with n>1, after the first step operation has
730    been completed.*/
731 static void 
732 step_once (int skip_subroutines, int single_inst, int count)
733
734   struct continuation_arg *arg1; 
735   struct continuation_arg *arg2;
736   struct continuation_arg *arg3; 
737   struct frame_info *frame;
738
739   if (count > 0)
740     {
741       clear_proceed_status ();
742
743       frame = get_current_frame ();
744       if (!frame)               /* Avoid coredump here.  Why tho? */
745         error ("No current frame");
746       step_frame_id = get_frame_id (frame);
747       step_sp = read_sp ();
748
749       if (!single_inst)
750         {
751           find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
752
753           /* If we have no line info, switch to stepi mode.  */
754           if (step_range_end == 0 && step_stop_if_no_debug)
755             {
756               step_range_start = step_range_end = 1;
757             }
758           else if (step_range_end == 0)
759             {
760               char *name;
761               if (find_pc_partial_function (stop_pc, &name, &step_range_start,
762                                             &step_range_end) == 0)
763                 error ("Cannot find bounds of current function");
764
765               target_terminal_ours ();
766               printf_filtered ("\
767 Single stepping until exit from function %s, \n\
768 which has no line number information.\n", name);
769             }
770         }
771       else
772         {
773           /* Say we are stepping, but stop after one insn whatever it does.  */
774           step_range_start = step_range_end = 1;
775           if (!skip_subroutines)
776             /* It is stepi.
777                Don't step over function calls, not even to functions lacking
778                line numbers.  */
779             step_over_calls = STEP_OVER_NONE;
780         }
781
782       if (skip_subroutines)
783         step_over_calls = STEP_OVER_ALL;
784
785       step_multi = (count > 1);
786       arg1 =
787         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
788       arg2 =
789         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
790       arg3 =
791         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
792       arg1->next = arg2;
793       arg1->data.integer = skip_subroutines;
794       arg2->next = arg3;
795       arg2->data.integer = single_inst;
796       arg3->next = NULL;
797       arg3->data.integer = count;
798       add_intermediate_continuation (step_1_continuation, arg1);
799       proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
800     }
801 }
802
803 \f
804 /* Continue program at specified address.  */
805
806 static void
807 jump_command (char *arg, int from_tty)
808 {
809   register CORE_ADDR addr;
810   struct symtabs_and_lines sals;
811   struct symtab_and_line sal;
812   struct symbol *fn;
813   struct symbol *sfn;
814   int async_exec = 0;
815
816   ERROR_NO_INFERIOR;
817
818   /* Find out whether we must run in the background. */
819   if (arg != NULL)
820     async_exec = strip_bg_char (&arg);
821
822   /* If we must run in the background, but the target can't do it,
823      error out. */
824   if (event_loop_p && async_exec && !target_can_async_p ())
825     error ("Asynchronous execution not supported on this target.");
826
827   /* If we are not asked to run in the bg, then prepare to run in the
828      foreground, synchronously. */
829   if (event_loop_p && !async_exec && target_can_async_p ())
830     {
831       /* Simulate synchronous execution */
832       async_disable_stdin ();
833     }
834
835   if (!arg)
836     error_no_arg ("starting address");
837
838   sals = decode_line_spec_1 (arg, 1);
839   if (sals.nelts != 1)
840     {
841       error ("Unreasonable jump request");
842     }
843
844   sal = sals.sals[0];
845   xfree (sals.sals);
846
847   if (sal.symtab == 0 && sal.pc == 0)
848     error ("No source file has been specified.");
849
850   resolve_sal_pc (&sal);        /* May error out */
851
852   /* See if we are trying to jump to another function. */
853   fn = get_frame_function (get_current_frame ());
854   sfn = find_pc_function (sal.pc);
855   if (fn != NULL && sfn != fn)
856     {
857       if (!query ("Line %d is not in `%s'.  Jump anyway? ", sal.line,
858                   SYMBOL_PRINT_NAME (fn)))
859         {
860           error ("Not confirmed.");
861           /* NOTREACHED */
862         }
863     }
864
865   if (sfn != NULL)
866     {
867       fixup_symbol_section (sfn, 0);
868       if (section_is_overlay (SYMBOL_BFD_SECTION (sfn)) &&
869           !section_is_mapped (SYMBOL_BFD_SECTION (sfn)))
870         {
871           if (!query ("WARNING!!!  Destination is in unmapped overlay!  Jump anyway? "))
872             {
873               error ("Not confirmed.");
874               /* NOTREACHED */
875             }
876         }
877     }
878
879   addr = sal.pc;
880
881   if (from_tty)
882     {
883       printf_filtered ("Continuing at ");
884       print_address_numeric (addr, 1, gdb_stdout);
885       printf_filtered (".\n");
886     }
887
888   clear_proceed_status ();
889   proceed (addr, TARGET_SIGNAL_0, 0);
890 }
891 \f
892
893 /* Go to line or address in current procedure */
894 static void
895 go_command (char *line_no, int from_tty)
896 {
897   if (line_no == (char *) NULL || !*line_no)
898     printf_filtered (GO_USAGE);
899   else
900     {
901       tbreak_command (line_no, from_tty);
902       jump_command (line_no, from_tty);
903     }
904 }
905 \f
906
907 /* Continue program giving it specified signal.  */
908
909 static void
910 signal_command (char *signum_exp, int from_tty)
911 {
912   enum target_signal oursig;
913
914   dont_repeat ();               /* Too dangerous.  */
915   ERROR_NO_INFERIOR;
916
917   if (!signum_exp)
918     error_no_arg ("signal number");
919
920   /* It would be even slicker to make signal names be valid expressions,
921      (the type could be "enum $signal" or some such), then the user could
922      assign them to convenience variables.  */
923   oursig = target_signal_from_name (signum_exp);
924
925   if (oursig == TARGET_SIGNAL_UNKNOWN)
926     {
927       /* No, try numeric.  */
928       int num = parse_and_eval_long (signum_exp);
929
930       if (num == 0)
931         oursig = TARGET_SIGNAL_0;
932       else
933         oursig = target_signal_from_command (num);
934     }
935
936   if (from_tty)
937     {
938       if (oursig == TARGET_SIGNAL_0)
939         printf_filtered ("Continuing with no signal.\n");
940       else
941         printf_filtered ("Continuing with signal %s.\n",
942                          target_signal_to_name (oursig));
943     }
944
945   clear_proceed_status ();
946   /* "signal 0" should not get stuck if we are stopped at a breakpoint.
947      FIXME: Neither should "signal foo" but when I tried passing
948      (CORE_ADDR)-1 unconditionally I got a testsuite failure which I haven't
949      tried to track down yet.  */
950   proceed (oursig == TARGET_SIGNAL_0 ? (CORE_ADDR) -1 : stop_pc, oursig, 0);
951 }
952
953 /* Call breakpoint_auto_delete on the current contents of the bpstat
954    pointed to by arg (which is really a bpstat *).  */
955
956 static void
957 breakpoint_auto_delete_contents (void *arg)
958 {
959   breakpoint_auto_delete (*(bpstat *) arg);
960 }
961
962
963 /* Execute a "stack dummy", a piece of code stored in the stack
964    by the debugger to be executed in the inferior.
965
966    To call: first, do PUSH_DUMMY_FRAME.
967    Then push the contents of the dummy.  It should end with a breakpoint insn.
968    Then call here, passing address at which to start the dummy.
969
970    The contents of all registers are saved before the dummy frame is popped
971    and copied into the buffer BUFFER.
972
973    The dummy's frame is automatically popped whenever that break is hit.
974    If that is the first time the program stops, run_stack_dummy
975    returns to its caller with that frame already gone and returns 0.
976    
977    Otherwise, run_stack-dummy returns a non-zero value.
978    If the called function receives a random signal, we do not allow the user
979    to continue executing it as this may not work.  The dummy frame is poped
980    and we return 1.
981    If we hit a breakpoint, we leave the frame in place and return 2 (the frame
982    will eventually be popped when we do hit the dummy end breakpoint).  */
983
984 int
985 run_stack_dummy (CORE_ADDR addr, struct regcache *buffer)
986 {
987   struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0);
988   int saved_async = 0;
989   struct breakpoint *bpt;
990   struct symtab_and_line sal;
991
992   /* Now proceed, having reached the desired place.  */
993   clear_proceed_status ();
994
995   init_sal (&sal);              /* initialize to zeroes */
996   if (CALL_DUMMY_LOCATION == AT_ENTRY_POINT)
997     {
998       sal.pc = CALL_DUMMY_ADDRESS ();
999     }
1000   else
1001     {
1002       /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to
1003          put a breakpoint instruction.  If not, the call dummy already
1004          has the breakpoint instruction in it.
1005
1006          ADDR IS THE ADDRESS of the call dummy plus the
1007          CALL_DUMMY_START_OFFSET, so we need to subtract the
1008          CALL_DUMMY_START_OFFSET.  */
1009       sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
1010     }
1011   sal.section = find_pc_overlay (sal.pc);
1012   
1013   {
1014     /* Set up a frame ID for the dummy frame so we can pass it to
1015        set_momentary_breakpoint.  We need to give the breakpoint a
1016        frame ID so that the breakpoint code can correctly re-identify
1017        the dummy breakpoint.  */
1018     struct frame_id frame = frame_id_build (read_fp (), sal.pc);
1019     /* Create a momentary breakpoint at the return address of the
1020        inferior.  That way it breaks when it returns.  */
1021     bpt = set_momentary_breakpoint (sal, frame, bp_call_dummy);
1022     bpt->disposition = disp_del;
1023   }
1024
1025   /* If all error()s out of proceed ended up calling normal_stop (and
1026      perhaps they should; it already does in the special case of error
1027      out of resume()), then we wouldn't need this.  */
1028   make_cleanup (breakpoint_auto_delete_contents, &stop_bpstat);
1029
1030   disable_watchpoints_before_interactive_call_start ();
1031   proceed_to_finish = 1;        /* We want stop_registers, please... */
1032
1033   if (target_can_async_p ())
1034     saved_async = target_async_mask (0);
1035
1036   proceed (addr, TARGET_SIGNAL_0, 0);
1037
1038   if (saved_async)
1039     target_async_mask (saved_async);
1040
1041   enable_watchpoints_after_interactive_call_stop ();
1042
1043   discard_cleanups (old_cleanups);
1044
1045   /* We can stop during an inferior call because a signal is received. */
1046   if (stopped_by_random_signal)
1047     return 1;
1048     
1049   /* We may also stop prematurely because we hit a breakpoint in the
1050      called routine. */
1051   if (!stop_stack_dummy)
1052     return 2;
1053
1054   /* On normal return, the stack dummy has been popped already.  */
1055   regcache_cpy_no_passthrough (buffer, stop_registers);
1056   return 0;
1057 }
1058 \f
1059 /* Proceed until we reach a different source line with pc greater than
1060    our current one or exit the function.  We skip calls in both cases.
1061
1062    Note that eventually this command should probably be changed so
1063    that only source lines are printed out when we hit the breakpoint
1064    we set.  This may involve changes to wait_for_inferior and the
1065    proceed status code.  */
1066
1067 /* ARGSUSED */
1068 static void
1069 until_next_command (int from_tty)
1070 {
1071   struct frame_info *frame;
1072   CORE_ADDR pc;
1073   struct symbol *func;
1074   struct symtab_and_line sal;
1075
1076   clear_proceed_status ();
1077
1078   frame = get_current_frame ();
1079
1080   /* Step until either exited from this function or greater
1081      than the current line (if in symbolic section) or pc (if
1082      not). */
1083
1084   pc = read_pc ();
1085   func = find_pc_function (pc);
1086
1087   if (!func)
1088     {
1089       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
1090
1091       if (msymbol == NULL)
1092         error ("Execution is not within a known function.");
1093
1094       step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
1095       step_range_end = pc;
1096     }
1097   else
1098     {
1099       sal = find_pc_line (pc, 0);
1100
1101       step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
1102       step_range_end = sal.end;
1103     }
1104
1105   step_over_calls = STEP_OVER_ALL;
1106   step_frame_id = get_frame_id (frame);
1107   step_sp = read_sp ();
1108
1109   step_multi = 0;               /* Only one call to proceed */
1110
1111   proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
1112 }
1113
1114 static void
1115 until_command (char *arg, int from_tty)
1116 {
1117   int async_exec = 0;
1118
1119   if (!target_has_execution)
1120     error ("The program is not running.");
1121
1122   /* Find out whether we must run in the background. */
1123   if (arg != NULL)
1124     async_exec = strip_bg_char (&arg);
1125
1126   /* If we must run in the background, but the target can't do it,
1127      error out. */
1128   if (event_loop_p && async_exec && !target_can_async_p ())
1129     error ("Asynchronous execution not supported on this target.");
1130
1131   /* If we are not asked to run in the bg, then prepare to run in the
1132      foreground, synchronously. */
1133   if (event_loop_p && !async_exec && target_can_async_p ())
1134     {
1135       /* Simulate synchronous execution */
1136       async_disable_stdin ();
1137     }
1138
1139   if (arg)
1140     until_break_command (arg, from_tty, 0);
1141   else
1142     until_next_command (from_tty);
1143 }
1144
1145 static void
1146 advance_command (char *arg, int from_tty)
1147 {
1148   int async_exec = 0;
1149
1150   if (!target_has_execution)
1151     error ("The program is not running.");
1152
1153   if (arg == NULL)
1154     error_no_arg ("a location");
1155
1156   /* Find out whether we must run in the background.  */
1157   if (arg != NULL)
1158     async_exec = strip_bg_char (&arg);
1159
1160   /* If we must run in the background, but the target can't do it,
1161      error out.  */
1162   if (event_loop_p && async_exec && !target_can_async_p ())
1163     error ("Asynchronous execution not supported on this target.");
1164
1165   /* If we are not asked to run in the bg, then prepare to run in the
1166      foreground, synchronously.  */
1167   if (event_loop_p && !async_exec && target_can_async_p ())
1168     {
1169       /* Simulate synchronous execution.  */
1170       async_disable_stdin ();
1171     }
1172
1173   until_break_command (arg, from_tty, 1);
1174 }
1175 \f
1176
1177 /* Print the result of a function at the end of a 'finish' command. */
1178 static void
1179 print_return_value (int structure_return, struct type *value_type)
1180 {
1181   struct value *value;
1182   static struct ui_stream *stb = NULL;
1183
1184   if (!structure_return)
1185     {
1186       value = value_being_returned (value_type, stop_registers, structure_return);
1187       stb = ui_out_stream_new (uiout);
1188       ui_out_text (uiout, "Value returned is ");
1189       ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
1190       ui_out_text (uiout, " = ");
1191       value_print (value, stb->stream, 0, Val_no_prettyprint);
1192       ui_out_field_stream (uiout, "return-value", stb);
1193       ui_out_text (uiout, "\n");
1194     }
1195   else
1196     {
1197       /* We cannot determine the contents of the structure because
1198          it is on the stack, and we don't know where, since we did not
1199          initiate the call, as opposed to the call_function_by_hand case */
1200 #ifdef VALUE_RETURNED_FROM_STACK
1201       value = 0;
1202       ui_out_text (uiout, "Value returned has type: ");
1203       ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
1204       ui_out_text (uiout, ".");
1205       ui_out_text (uiout, " Cannot determine contents\n");
1206 #else
1207       value = value_being_returned (value_type, stop_registers, structure_return);
1208       stb = ui_out_stream_new (uiout);
1209       ui_out_text (uiout, "Value returned is ");
1210       ui_out_field_fmt (uiout, "gdb-result-var", "$%d", record_latest_value (value));
1211       ui_out_text (uiout, " = ");
1212       value_print (value, stb->stream, 0, Val_no_prettyprint);
1213       ui_out_field_stream (uiout, "return-value", stb);
1214       ui_out_text (uiout, "\n");
1215 #endif
1216     }
1217 }
1218
1219 /* Stuff that needs to be done by the finish command after the target
1220    has stopped.  In asynchronous mode, we wait for the target to stop in
1221    the call to poll or select in the event loop, so it is impossible to
1222    do all the stuff as part of the finish_command function itself. The
1223    only chance we have to complete this command is in
1224    fetch_inferior_event, which is called by the event loop as soon as it
1225    detects that the target has stopped. This function is called via the
1226    cmd_continuation pointer. */
1227 void
1228 finish_command_continuation (struct continuation_arg *arg)
1229 {
1230   register struct symbol *function;
1231   struct breakpoint *breakpoint;
1232   struct cleanup *cleanups;
1233
1234   breakpoint = (struct breakpoint *) arg->data.pointer;
1235   function   = (struct symbol *)     arg->next->data.pointer;
1236   cleanups   = (struct cleanup *)    arg->next->next->data.pointer;
1237
1238   if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1239       && function != 0)
1240     {
1241       struct type *value_type;
1242       CORE_ADDR funcaddr;
1243       int struct_return;
1244
1245       value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1246       if (!value_type)
1247         internal_error (__FILE__, __LINE__,
1248                         "finish_command: function has no target type");
1249
1250       if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1251         {
1252           do_exec_cleanups (cleanups);
1253           return;
1254         }
1255
1256       funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
1257
1258       struct_return = using_struct_return (value_of_variable (function, NULL),
1259                                            funcaddr,
1260                                            check_typedef (value_type),
1261                                            BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function)));
1262
1263       print_return_value (struct_return, value_type); 
1264     }
1265   do_exec_cleanups (cleanups);
1266 }
1267
1268 /* "finish": Set a temporary breakpoint at the place
1269    the selected frame will return to, then continue.  */
1270
1271 static void
1272 finish_command (char *arg, int from_tty)
1273 {
1274   struct symtab_and_line sal;
1275   register struct frame_info *frame;
1276   register struct symbol *function;
1277   struct breakpoint *breakpoint;
1278   struct cleanup *old_chain;
1279   struct continuation_arg *arg1, *arg2, *arg3;
1280
1281   int async_exec = 0;
1282
1283   /* Find out whether we must run in the background. */
1284   if (arg != NULL)
1285     async_exec = strip_bg_char (&arg);
1286
1287   /* If we must run in the background, but the target can't do it,
1288      error out. */
1289   if (event_loop_p && async_exec && !target_can_async_p ())
1290     error ("Asynchronous execution not supported on this target.");
1291
1292   /* If we are not asked to run in the bg, then prepare to run in the
1293      foreground, synchronously. */
1294   if (event_loop_p && !async_exec && target_can_async_p ())
1295     {
1296       /* Simulate synchronous execution */
1297       async_disable_stdin ();
1298     }
1299
1300   if (arg)
1301     error ("The \"finish\" command does not take any arguments.");
1302   if (!target_has_execution)
1303     error ("The program is not running.");
1304   if (deprecated_selected_frame == NULL)
1305     error ("No selected frame.");
1306
1307   frame = get_prev_frame (deprecated_selected_frame);
1308   if (frame == 0)
1309     error ("\"finish\" not meaningful in the outermost frame.");
1310
1311   clear_proceed_status ();
1312
1313   sal = find_pc_line (get_frame_pc (frame), 0);
1314   sal.pc = get_frame_pc (frame);
1315
1316   breakpoint = set_momentary_breakpoint (sal, get_frame_id (frame), bp_finish);
1317
1318   if (!event_loop_p || !target_can_async_p ())
1319     old_chain = make_cleanup_delete_breakpoint (breakpoint);
1320   else
1321     old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
1322
1323   /* Find the function we will return from.  */
1324
1325   function = find_pc_function (get_frame_pc (deprecated_selected_frame));
1326
1327   /* Print info on the selected frame, including level number
1328      but not source.  */
1329   if (from_tty)
1330     {
1331       printf_filtered ("Run till exit from ");
1332       print_stack_frame (deprecated_selected_frame,
1333                          frame_relative_level (deprecated_selected_frame), 0);
1334     }
1335
1336   /* If running asynchronously and the target support asynchronous
1337      execution, set things up for the rest of the finish command to be
1338      completed later on, when gdb has detected that the target has
1339      stopped, in fetch_inferior_event. */
1340   if (event_loop_p && target_can_async_p ())
1341     {
1342       arg1 =
1343         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1344       arg2 =
1345         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1346       arg3 =
1347         (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1348       arg1->next = arg2;
1349       arg2->next = arg3;
1350       arg3->next = NULL;
1351       arg1->data.pointer = breakpoint;
1352       arg2->data.pointer = function;
1353       arg3->data.pointer = old_chain;
1354       add_continuation (finish_command_continuation, arg1);
1355     }
1356
1357   proceed_to_finish = 1;        /* We want stop_registers, please... */
1358   proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1359
1360   /* Do this only if not running asynchronously or if the target
1361      cannot do async execution. Otherwise, complete this command when
1362      the target actually stops, in fetch_inferior_event. */
1363   if (!event_loop_p || !target_can_async_p ())
1364     {
1365
1366       /* Did we stop at our breakpoint? */
1367       if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1368           && function != 0)
1369         {
1370           struct type *value_type;
1371           CORE_ADDR funcaddr;
1372           int struct_return;
1373
1374           value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1375           if (!value_type)
1376             internal_error (__FILE__, __LINE__,
1377                             "finish_command: function has no target type");
1378
1379           /* FIXME: Shouldn't we do the cleanups before returning? */
1380           if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1381             return;
1382
1383           funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
1384
1385           struct_return =
1386             using_struct_return (value_of_variable (function, NULL),
1387                                  funcaddr,
1388                                  check_typedef (value_type),
1389                         BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function)));
1390
1391           print_return_value (struct_return, value_type); 
1392         }
1393       do_cleanups (old_chain);
1394     }
1395 }
1396 \f
1397 /* ARGSUSED */
1398 static void
1399 program_info (char *args, int from_tty)
1400 {
1401   bpstat bs = stop_bpstat;
1402   int num = bpstat_num (&bs);
1403
1404   if (!target_has_execution)
1405     {
1406       printf_filtered ("The program being debugged is not being run.\n");
1407       return;
1408     }
1409
1410   target_files_info ();
1411   printf_filtered ("Program stopped at %s.\n",
1412                    local_hex_string ((unsigned long) stop_pc));
1413   if (stop_step)
1414     printf_filtered ("It stopped after being stepped.\n");
1415   else if (num != 0)
1416     {
1417       /* There may be several breakpoints in the same place, so this
1418          isn't as strange as it seems.  */
1419       while (num != 0)
1420         {
1421           if (num < 0)
1422             {
1423               printf_filtered ("It stopped at a breakpoint that has ");
1424               printf_filtered ("since been deleted.\n");
1425             }
1426           else
1427             printf_filtered ("It stopped at breakpoint %d.\n", num);
1428           num = bpstat_num (&bs);
1429         }
1430     }
1431   else if (stop_signal != TARGET_SIGNAL_0)
1432     {
1433       printf_filtered ("It stopped with signal %s, %s.\n",
1434                        target_signal_to_name (stop_signal),
1435                        target_signal_to_string (stop_signal));
1436     }
1437
1438   if (!from_tty)
1439     {
1440       printf_filtered ("Type \"info stack\" or \"info registers\" ");
1441       printf_filtered ("for more information.\n");
1442     }
1443 }
1444 \f
1445 static void
1446 environment_info (char *var, int from_tty)
1447 {
1448   if (var)
1449     {
1450       register char *val = get_in_environ (inferior_environ, var);
1451       if (val)
1452         {
1453           puts_filtered (var);
1454           puts_filtered (" = ");
1455           puts_filtered (val);
1456           puts_filtered ("\n");
1457         }
1458       else
1459         {
1460           puts_filtered ("Environment variable \"");
1461           puts_filtered (var);
1462           puts_filtered ("\" not defined.\n");
1463         }
1464     }
1465   else
1466     {
1467       register char **vector = environ_vector (inferior_environ);
1468       while (*vector)
1469         {
1470           puts_filtered (*vector++);
1471           puts_filtered ("\n");
1472         }
1473     }
1474 }
1475
1476 static void
1477 set_environment_command (char *arg, int from_tty)
1478 {
1479   register char *p, *val, *var;
1480   int nullset = 0;
1481
1482   if (arg == 0)
1483     error_no_arg ("environment variable and value");
1484
1485   /* Find seperation between variable name and value */
1486   p = (char *) strchr (arg, '=');
1487   val = (char *) strchr (arg, ' ');
1488
1489   if (p != 0 && val != 0)
1490     {
1491       /* We have both a space and an equals.  If the space is before the
1492          equals, walk forward over the spaces til we see a nonspace 
1493          (possibly the equals). */
1494       if (p > val)
1495         while (*val == ' ')
1496           val++;
1497
1498       /* Now if the = is after the char following the spaces,
1499          take the char following the spaces.  */
1500       if (p > val)
1501         p = val - 1;
1502     }
1503   else if (val != 0 && p == 0)
1504     p = val;
1505
1506   if (p == arg)
1507     error_no_arg ("environment variable to set");
1508
1509   if (p == 0 || p[1] == 0)
1510     {
1511       nullset = 1;
1512       if (p == 0)
1513         p = arg + strlen (arg); /* So that savestring below will work */
1514     }
1515   else
1516     {
1517       /* Not setting variable value to null */
1518       val = p + 1;
1519       while (*val == ' ' || *val == '\t')
1520         val++;
1521     }
1522
1523   while (p != arg && (p[-1] == ' ' || p[-1] == '\t'))
1524     p--;
1525
1526   var = savestring (arg, p - arg);
1527   if (nullset)
1528     {
1529       printf_filtered ("Setting environment variable ");
1530       printf_filtered ("\"%s\" to null value.\n", var);
1531       set_in_environ (inferior_environ, var, "");
1532     }
1533   else
1534     set_in_environ (inferior_environ, var, val);
1535   xfree (var);
1536 }
1537
1538 static void
1539 unset_environment_command (char *var, int from_tty)
1540 {
1541   if (var == 0)
1542     {
1543       /* If there is no argument, delete all environment variables.
1544          Ask for confirmation if reading from the terminal.  */
1545       if (!from_tty || query ("Delete all environment variables? "))
1546         {
1547           free_environ (inferior_environ);
1548           inferior_environ = make_environ ();
1549         }
1550     }
1551   else
1552     unset_in_environ (inferior_environ, var);
1553 }
1554
1555 /* Handle the execution path (PATH variable) */
1556
1557 static const char path_var_name[] = "PATH";
1558
1559 /* ARGSUSED */
1560 static void
1561 path_info (char *args, int from_tty)
1562 {
1563   puts_filtered ("Executable and object file path: ");
1564   puts_filtered (get_in_environ (inferior_environ, path_var_name));
1565   puts_filtered ("\n");
1566 }
1567
1568 /* Add zero or more directories to the front of the execution path.  */
1569
1570 static void
1571 path_command (char *dirname, int from_tty)
1572 {
1573   char *exec_path;
1574   char *env;
1575   dont_repeat ();
1576   env = get_in_environ (inferior_environ, path_var_name);
1577   /* Can be null if path is not set */
1578   if (!env)
1579     env = "";
1580   exec_path = xstrdup (env);
1581   mod_path (dirname, &exec_path);
1582   set_in_environ (inferior_environ, path_var_name, exec_path);
1583   xfree (exec_path);
1584   if (from_tty)
1585     path_info ((char *) NULL, from_tty);
1586 }
1587 \f
1588
1589 #ifdef REGISTER_NAMES
1590 char *gdb_register_names[] = REGISTER_NAMES;
1591 #endif
1592 /* Print out the machine register regnum. If regnum is -1, print all
1593    registers (print_all == 1) or all non-float and non-vector
1594    registers (print_all == 0).
1595
1596    For most machines, having all_registers_info() print the
1597    register(s) one per line is good enough.  If a different format is
1598    required, (eg, for MIPS or Pyramid 90x, which both have lots of
1599    regs), or there is an existing convention for showing all the
1600    registers, define the architecture method PRINT_REGISTERS_INFO to
1601    provide that format.  */
1602
1603 void
1604 default_print_registers_info (struct gdbarch *gdbarch,
1605                               struct ui_file *file,
1606                               struct frame_info *frame,
1607                               int regnum, int print_all)
1608 {
1609   int i;
1610   const int numregs = NUM_REGS + NUM_PSEUDO_REGS;
1611   char *raw_buffer = alloca (MAX_REGISTER_RAW_SIZE);
1612   char *virtual_buffer = alloca (MAX_REGISTER_VIRTUAL_SIZE);
1613
1614   if (DEPRECATED_DO_REGISTERS_INFO_P ())
1615     {
1616       DEPRECATED_DO_REGISTERS_INFO (regnum, print_all);
1617       return;
1618     }
1619
1620   for (i = 0; i < numregs; i++)
1621     {
1622       /* Decide between printing all regs, non-float / vector regs, or
1623          specific reg.  */
1624       if (regnum == -1)
1625         {
1626           if (print_all)
1627             {
1628               if (!gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
1629                 continue;
1630             }
1631           else
1632             {
1633               if (!gdbarch_register_reggroup_p (gdbarch, i, general_reggroup))
1634                 continue;
1635             }
1636         }
1637       else
1638         {
1639           if (i != regnum)
1640             continue;
1641         }
1642
1643       /* If the register name is empty, it is undefined for this
1644          processor, so don't display anything.  */
1645       if (REGISTER_NAME (i) == NULL || *(REGISTER_NAME (i)) == '\0')
1646         continue;
1647
1648       fputs_filtered (REGISTER_NAME (i), file);
1649       print_spaces_filtered (15 - strlen (REGISTER_NAME (i)), file);
1650
1651       /* Get the data in raw format.  */
1652       if (! frame_register_read (frame, i, raw_buffer))
1653         {
1654           fprintf_filtered (file, "*value not available*\n");
1655           continue;
1656         }
1657
1658       /* FIXME: cagney/2002-08-03: This code shouldn't be necessary.
1659          The function frame_register_read() should have returned the
1660          pre-cooked register so no conversion is necessary.  */
1661       /* Convert raw data to virtual format if necessary.  */
1662       if (REGISTER_CONVERTIBLE (i))
1663         {
1664           REGISTER_CONVERT_TO_VIRTUAL (i, register_type (current_gdbarch, i),
1665                                        raw_buffer, virtual_buffer);
1666         }
1667       else
1668         {
1669           memcpy (virtual_buffer, raw_buffer,
1670                   REGISTER_VIRTUAL_SIZE (i));
1671         }
1672
1673       /* If virtual format is floating, print it that way, and in raw
1674          hex.  */
1675       if (TYPE_CODE (register_type (current_gdbarch, i)) == TYPE_CODE_FLT)
1676         {
1677           int j;
1678
1679           val_print (register_type (current_gdbarch, i), virtual_buffer, 0, 0,
1680                      file, 0, 1, 0, Val_pretty_default);
1681
1682           fprintf_filtered (file, "\t(raw 0x");
1683           for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
1684             {
1685               int idx;
1686               if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
1687                 idx = j;
1688               else
1689                 idx = REGISTER_RAW_SIZE (i) - 1 - j;
1690               fprintf_filtered (file, "%02x", (unsigned char) raw_buffer[idx]);
1691             }
1692           fprintf_filtered (file, ")");
1693         }
1694       else
1695         {
1696           /* Print the register in hex.  */
1697           val_print (register_type (current_gdbarch, i), virtual_buffer, 0, 0,
1698                      file, 'x', 1, 0, Val_pretty_default);
1699           /* If not a vector register, print it also according to its
1700              natural format.  */
1701           if (TYPE_VECTOR (register_type (current_gdbarch, i)) == 0)
1702             {
1703               fprintf_filtered (file, "\t");
1704               val_print (register_type (current_gdbarch, i), virtual_buffer, 0, 0,
1705                          file, 0, 1, 0, Val_pretty_default);
1706             }
1707         }
1708
1709       fprintf_filtered (file, "\n");
1710     }
1711 }
1712
1713 void
1714 registers_info (char *addr_exp, int fpregs)
1715 {
1716   int regnum, numregs;
1717   register char *end;
1718
1719   if (!target_has_registers)
1720     error ("The program has no registers now.");
1721   if (deprecated_selected_frame == NULL)
1722     error ("No selected frame.");
1723
1724   if (!addr_exp)
1725     {
1726       gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1727                                     deprecated_selected_frame, -1, fpregs);
1728       return;
1729     }
1730
1731   while (*addr_exp != '\0')
1732     {
1733       char *start;
1734       const char *end;
1735
1736       /* Keep skipping leading white space.  */
1737       if (isspace ((*addr_exp)))
1738         {
1739           addr_exp++;
1740           continue;
1741         }
1742
1743       /* Discard any leading ``$''.  Check that there is something
1744          resembling a register following it.  */
1745       if (addr_exp[0] == '$')
1746         addr_exp++;
1747       if (isspace ((*addr_exp)) || (*addr_exp) == '\0')
1748         error ("Missing register name");
1749
1750       /* Find the start/end of this register name/num/group.  */
1751       start = addr_exp;
1752       while ((*addr_exp) != '\0' && !isspace ((*addr_exp)))
1753         addr_exp++;
1754       end = addr_exp;
1755       
1756       /* Figure out what we've found and display it.  */
1757
1758       /* A register name?  */
1759       {
1760         int regnum = frame_map_name_to_regnum (start, end - start);
1761         if (regnum >= 0)
1762           {
1763             gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1764                                           deprecated_selected_frame, regnum, fpregs);
1765             continue;
1766           }
1767       }
1768         
1769       /* A register number?  (how portable is this one?).  */
1770       {
1771         char *endptr;
1772         int regnum = strtol (start, &endptr, 0);
1773         if (endptr == end
1774             && regnum >= 0
1775             && regnum < NUM_REGS + NUM_PSEUDO_REGS)
1776           {
1777             gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1778                                           deprecated_selected_frame, regnum, fpregs);
1779             continue;
1780           }
1781       }
1782
1783       /* A register group?  */
1784       {
1785         struct reggroup *const *group;
1786         for (group = reggroups (current_gdbarch);
1787              (*group) != NULL;
1788              group++)
1789           {
1790             /* Don't bother with a length check.  Should the user
1791                enter a short register group name, go with the first
1792                group that matches.  */
1793             if (strncmp (start, reggroup_name ((*group)), end - start) == 0)
1794               break;
1795           }
1796         if ((*group) != NULL)
1797           {
1798             int regnum;
1799             for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
1800               {
1801                 if (gdbarch_register_reggroup_p (current_gdbarch, regnum,
1802                                                  (*group)))
1803                   gdbarch_print_registers_info (current_gdbarch,
1804                                                 gdb_stdout, deprecated_selected_frame,
1805                                                 regnum, fpregs);
1806               }
1807             continue;
1808           }
1809       }
1810
1811       /* Nothing matched.  */
1812       error ("Invalid register `%.*s'", (int) (end - start), start);
1813     }
1814 }
1815
1816 void
1817 all_registers_info (char *addr_exp, int from_tty)
1818 {
1819   registers_info (addr_exp, 1);
1820 }
1821
1822 static void
1823 nofp_registers_info (char *addr_exp, int from_tty)
1824 {
1825   registers_info (addr_exp, 0);
1826 }
1827
1828 static void
1829 print_vector_info (struct gdbarch *gdbarch, struct ui_file *file,
1830                    struct frame_info *frame, const char *args)
1831 {
1832   if (!target_has_registers)
1833     error ("The program has no registers now.");
1834   if (deprecated_selected_frame == NULL)
1835     error ("No selected frame.");
1836
1837   if (gdbarch_print_vector_info_p (gdbarch))
1838     gdbarch_print_vector_info (gdbarch, file, frame, args);
1839   else
1840     {
1841       int regnum;
1842       int printed_something = 0;
1843
1844       for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
1845         {
1846           if (gdbarch_register_reggroup_p (gdbarch, regnum, vector_reggroup))
1847             {
1848               printed_something = 1;
1849               gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
1850             }
1851         }
1852       if (!printed_something)
1853         fprintf_filtered (file, "No vector information\n");
1854     }
1855 }
1856
1857 static void
1858 vector_info (char *args, int from_tty)
1859 {
1860   print_vector_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
1861 }
1862 \f
1863
1864 /*
1865  * TODO:
1866  * Should save/restore the tty state since it might be that the
1867  * program to be debugged was started on this tty and it wants
1868  * the tty in some state other than what we want.  If it's running
1869  * on another terminal or without a terminal, then saving and
1870  * restoring the tty state is a harmless no-op.
1871  * This only needs to be done if we are attaching to a process.
1872  */
1873
1874 /*
1875    attach_command --
1876    takes a program started up outside of gdb and ``attaches'' to it.
1877    This stops it cold in its tracks and allows us to start debugging it.
1878    and wait for the trace-trap that results from attaching.  */
1879
1880 void
1881 attach_command (char *args, int from_tty)
1882 {
1883   char *exec_file;
1884   char *full_exec_path = NULL;
1885
1886   dont_repeat ();               /* Not for the faint of heart */
1887
1888   if (target_has_execution)
1889     {
1890       if (query ("A program is being debugged already.  Kill it? "))
1891         target_kill ();
1892       else
1893         error ("Not killed.");
1894     }
1895
1896   target_attach (args, from_tty);
1897
1898   /* Set up the "saved terminal modes" of the inferior
1899      based on what modes we are starting it with.  */
1900   target_terminal_init ();
1901
1902   /* Install inferior's terminal modes.  */
1903   target_terminal_inferior ();
1904
1905   /* Set up execution context to know that we should return from
1906      wait_for_inferior as soon as the target reports a stop.  */
1907   init_wait_for_inferior ();
1908   clear_proceed_status ();
1909
1910   /* No traps are generated when attaching to inferior under Mach 3
1911      or GNU hurd.  */
1912 #ifndef ATTACH_NO_WAIT
1913   /* Careful here. See comments in inferior.h.  Basically some OSes
1914      don't ignore SIGSTOPs on continue requests anymore.  We need a
1915      way for handle_inferior_event to reset the stop_signal variable
1916      after an attach, and this is what STOP_QUIETLY_NO_SIGSTOP is for.  */
1917   stop_soon = STOP_QUIETLY_NO_SIGSTOP;
1918   wait_for_inferior ();
1919   stop_soon = NO_STOP_QUIETLY;
1920 #endif
1921
1922   /*
1923    * If no exec file is yet known, try to determine it from the
1924    * process itself.
1925    */
1926   exec_file = (char *) get_exec_file (0);
1927   if (!exec_file)
1928     {
1929       exec_file = target_pid_to_exec_file (PIDGET (inferior_ptid));
1930       if (exec_file)
1931         {
1932           /* It's possible we don't have a full path, but rather just a
1933              filename.  Some targets, such as HP-UX, don't provide the
1934              full path, sigh.
1935
1936              Attempt to qualify the filename against the source path.
1937              (If that fails, we'll just fall back on the original
1938              filename.  Not much more we can do...)
1939            */
1940           if (!source_full_path_of (exec_file, &full_exec_path))
1941             full_exec_path = savestring (exec_file, strlen (exec_file));
1942
1943           exec_file_attach (full_exec_path, from_tty);
1944           symbol_file_add_main (full_exec_path, from_tty);
1945         }
1946     }
1947
1948 #ifdef SOLIB_ADD
1949   /* Add shared library symbols from the newly attached process, if any.  */
1950   SOLIB_ADD ((char *) 0, from_tty, &current_target, auto_solib_add);
1951   re_enable_breakpoints_in_shlibs ();
1952 #endif
1953
1954   /* Take any necessary post-attaching actions for this platform.
1955    */
1956   target_post_attach (PIDGET (inferior_ptid));
1957
1958   normal_stop ();
1959
1960   if (attach_hook)
1961     attach_hook ();
1962 }
1963
1964 /*
1965  * detach_command --
1966  * takes a program previously attached to and detaches it.
1967  * The program resumes execution and will no longer stop
1968  * on signals, etc.  We better not have left any breakpoints
1969  * in the program or it'll die when it hits one.  For this
1970  * to work, it may be necessary for the process to have been
1971  * previously attached.  It *might* work if the program was
1972  * started via the normal ptrace (PTRACE_TRACEME).
1973  */
1974
1975 static void
1976 detach_command (char *args, int from_tty)
1977 {
1978   dont_repeat ();               /* Not for the faint of heart */
1979   target_detach (args, from_tty);
1980 #if defined(SOLIB_RESTART)
1981   SOLIB_RESTART ();
1982 #endif
1983   if (detach_hook)
1984     detach_hook ();
1985 }
1986
1987 /* Stop the execution of the target while running in async mode, in
1988    the backgound. */
1989 void
1990 interrupt_target_command (char *args, int from_tty)
1991 {
1992   if (event_loop_p && target_can_async_p ())
1993     {
1994       dont_repeat ();           /* Not for the faint of heart */
1995       target_stop ();
1996     }
1997 }
1998
1999 /* ARGSUSED */
2000 static void
2001 print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
2002                   struct frame_info *frame, const char *args)
2003 {
2004   if (!target_has_registers)
2005     error ("The program has no registers now.");
2006   if (deprecated_selected_frame == NULL)
2007     error ("No selected frame.");
2008
2009   if (gdbarch_print_float_info_p (gdbarch))
2010     gdbarch_print_float_info (gdbarch, file, frame, args);
2011   else
2012     {
2013       int regnum;
2014       int printed_something = 0;
2015
2016       for (regnum = 0; regnum < NUM_REGS + NUM_PSEUDO_REGS; regnum++)
2017         {
2018           if (gdbarch_register_reggroup_p (gdbarch, regnum, float_reggroup))
2019             {
2020               printed_something = 1;
2021               gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
2022             }
2023         }
2024       if (!printed_something)
2025         fprintf_filtered (file, "\
2026 No floating-point info available for this processor.\n");
2027     }
2028 }
2029
2030 static void
2031 float_info (char *args, int from_tty)
2032 {
2033   print_float_info (current_gdbarch, gdb_stdout, deprecated_selected_frame, args);
2034 }
2035 \f
2036 /* ARGSUSED */
2037 static void
2038 unset_command (char *args, int from_tty)
2039 {
2040   printf_filtered ("\"unset\" must be followed by the name of ");
2041   printf_filtered ("an unset subcommand.\n");
2042   help_list (unsetlist, "unset ", -1, gdb_stdout);
2043 }
2044
2045 void
2046 _initialize_infcmd (void)
2047 {
2048   struct cmd_list_element *c;
2049
2050   c = add_com ("tty", class_run, tty_command,
2051                "Set terminal for future runs of program being debugged.");
2052   set_cmd_completer (c, filename_completer);
2053
2054   c = add_set_cmd ("args", class_run, var_string_noescape,
2055                    (char *) &inferior_args,
2056                    "Set argument list to give program being debugged when it is started.\n\
2057 Follow this command with any number of args, to be passed to the program.",
2058                    &setlist);
2059   set_cmd_completer (c, filename_completer);
2060   set_cmd_sfunc (c, notice_args_set);
2061   c = add_show_from_set (c, &showlist);
2062   set_cmd_sfunc (c, notice_args_read);
2063
2064   c = add_cmd
2065     ("environment", no_class, environment_info,
2066      "The environment to give the program, or one variable's value.\n\
2067 With an argument VAR, prints the value of environment variable VAR to\n\
2068 give the program being debugged.  With no arguments, prints the entire\n\
2069 environment to be given to the program.", &showlist);
2070   set_cmd_completer (c, noop_completer);
2071
2072   add_prefix_cmd ("unset", no_class, unset_command,
2073                   "Complement to certain \"set\" commands.",
2074                   &unsetlist, "unset ", 0, &cmdlist);
2075
2076   c = add_cmd ("environment", class_run, unset_environment_command,
2077                "Cancel environment variable VAR for the program.\n\
2078 This does not affect the program until the next \"run\" command.",
2079                &unsetlist);
2080   set_cmd_completer (c, noop_completer);
2081
2082   c = add_cmd ("environment", class_run, set_environment_command,
2083                "Set environment variable value to give the program.\n\
2084 Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
2085 VALUES of environment variables are uninterpreted strings.\n\
2086 This does not affect the program until the next \"run\" command.",
2087                &setlist);
2088   set_cmd_completer (c, noop_completer);
2089
2090   c = add_com ("path", class_files, path_command,
2091                "Add directory DIR(s) to beginning of search path for object files.\n\
2092 $cwd in the path means the current working directory.\n\
2093 This path is equivalent to the $PATH shell variable.  It is a list of\n\
2094 directories, separated by colons.  These directories are searched to find\n\
2095 fully linked executable files and separately compiled object files as needed.");
2096   set_cmd_completer (c, filename_completer);
2097
2098   c = add_cmd ("paths", no_class, path_info,
2099                "Current search path for finding object files.\n\
2100 $cwd in the path means the current working directory.\n\
2101 This path is equivalent to the $PATH shell variable.  It is a list of\n\
2102 directories, separated by colons.  These directories are searched to find\n\
2103 fully linked executable files and separately compiled object files as needed.",
2104                &showlist);
2105   set_cmd_completer (c, noop_completer);
2106
2107   add_com ("attach", class_run, attach_command,
2108            "Attach to a process or file outside of GDB.\n\
2109 This command attaches to another target, of the same type as your last\n\
2110 \"target\" command (\"info files\" will show your target stack).\n\
2111 The command may take as argument a process id or a device file.\n\
2112 For a process id, you must have permission to send the process a signal,\n\
2113 and it must have the same effective uid as the debugger.\n\
2114 When using \"attach\" with a process id, the debugger finds the\n\
2115 program running in the process, looking first in the current working\n\
2116 directory, or (if not found there) using the source file search path\n\
2117 (see the \"directory\" command).  You can also use the \"file\" command\n\
2118 to specify the program, and to load its symbol table.");
2119
2120   add_com ("detach", class_run, detach_command,
2121            "Detach a process or file previously attached.\n\
2122 If a process, it is no longer traced, and it continues its execution.  If\n\
2123 you were debugging a file, the file is closed and gdb no longer accesses it.");
2124
2125   add_com ("signal", class_run, signal_command,
2126            "Continue program giving it signal specified by the argument.\n\
2127 An argument of \"0\" means continue program without giving it a signal.");
2128
2129   add_com ("stepi", class_run, stepi_command,
2130            "Step one instruction exactly.\n\
2131 Argument N means do this N times (or till program stops for another reason).");
2132   add_com_alias ("si", "stepi", class_alias, 0);
2133
2134   add_com ("nexti", class_run, nexti_command,
2135            "Step one instruction, but proceed through subroutine calls.\n\
2136 Argument N means do this N times (or till program stops for another reason).");
2137   add_com_alias ("ni", "nexti", class_alias, 0);
2138
2139   add_com ("finish", class_run, finish_command,
2140            "Execute until selected stack frame returns.\n\
2141 Upon return, the value returned is printed and put in the value history.");
2142
2143   add_com ("next", class_run, next_command,
2144            "Step program, proceeding through subroutine calls.\n\
2145 Like the \"step\" command as long as subroutine calls do not happen;\n\
2146 when they do, the call is treated as one instruction.\n\
2147 Argument N means do this N times (or till program stops for another reason).");
2148   add_com_alias ("n", "next", class_run, 1);
2149   if (xdb_commands)
2150     add_com_alias ("S", "next", class_run, 1);
2151
2152   add_com ("step", class_run, step_command,
2153            "Step program until it reaches a different source line.\n\
2154 Argument N means do this N times (or till program stops for another reason).");
2155   add_com_alias ("s", "step", class_run, 1);
2156
2157   c = add_com ("until", class_run, until_command,
2158                "Execute until the program reaches a source line greater than the current\n\
2159 or a specified location (same args as break command) within the current frame.");
2160   set_cmd_completer (c, location_completer);
2161   add_com_alias ("u", "until", class_run, 1);
2162
2163   c = add_com ("advance", class_run, advance_command,
2164                "Continue the program up to the given location (same form as args for break command).\n\
2165 Execution will also stop upon exit from the current stack frame.");
2166   set_cmd_completer (c, location_completer);
2167
2168   c = add_com ("jump", class_run, jump_command,
2169                "Continue program being debugged at specified line or address.\n\
2170 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
2171 for an address to start at.");
2172   set_cmd_completer (c, location_completer);
2173
2174   if (xdb_commands)
2175     {
2176       c = add_com ("go", class_run, go_command,
2177                    "Usage: go <location>\n\
2178 Continue program being debugged, stopping at specified line or \n\
2179 address.\n\
2180 Give as argument either LINENUM or *ADDR, where ADDR is an \n\
2181 expression for an address to start at.\n\
2182 This command is a combination of tbreak and jump.");
2183       set_cmd_completer (c, location_completer);
2184     }
2185
2186   if (xdb_commands)
2187     add_com_alias ("g", "go", class_run, 1);
2188
2189   add_com ("continue", class_run, continue_command,
2190            "Continue program being debugged, after signal or breakpoint.\n\
2191 If proceeding from breakpoint, a number N may be used as an argument,\n\
2192 which means to set the ignore count of that breakpoint to N - 1 (so that\n\
2193 the breakpoint won't break until the Nth time it is reached).");
2194   add_com_alias ("c", "cont", class_run, 1);
2195   add_com_alias ("fg", "cont", class_run, 1);
2196
2197   c = add_com ("run", class_run, run_command,
2198            "Start debugged program.  You may specify arguments to give it.\n\
2199 Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
2200 Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
2201 With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
2202 To cancel previous arguments and run with no arguments,\n\
2203 use \"set args\" without arguments.");
2204   set_cmd_completer (c, filename_completer);
2205   add_com_alias ("r", "run", class_run, 1);
2206   if (xdb_commands)
2207     add_com ("R", class_run, run_no_args_command,
2208              "Start debugged program with no arguments.");
2209
2210   add_com ("interrupt", class_run, interrupt_target_command,
2211            "Interrupt the execution of the debugged program.");
2212
2213   add_info ("registers", nofp_registers_info,
2214             "List of integer registers and their contents, for selected stack frame.\n\
2215 Register name as argument means describe only that register.");
2216   add_info_alias ("r", "registers", 1);
2217
2218   if (xdb_commands)
2219     add_com ("lr", class_info, nofp_registers_info,
2220              "List of integer registers and their contents, for selected stack frame.\n\
2221   Register name as argument means describe only that register.");
2222   add_info ("all-registers", all_registers_info,
2223             "List of all registers and their contents, for selected stack frame.\n\
2224 Register name as argument means describe only that register.");
2225
2226   add_info ("program", program_info,
2227             "Execution status of the program.");
2228
2229   add_info ("float", float_info,
2230             "Print the status of the floating point unit\n");
2231
2232   add_info ("vector", vector_info,
2233             "Print the status of the vector unit\n");
2234
2235   inferior_environ = make_environ ();
2236   init_environ (inferior_environ);
2237 }