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