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