Tue Sep 28 09:45:38 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
[external/binutils.git] / gdb / infcmd.c
1 /* Memory-access and commands for "inferior" (child) process, for GDB.
2    Copyright 1986, 1987, 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include "defs.h"
21 #include <signal.h>
22 #include <sys/param.h>
23 #include <string.h>
24 #include "symtab.h"
25 #include "gdbtypes.h"
26 #include "frame.h"
27 #include "inferior.h"
28 #include "environ.h"
29 #include "value.h"
30 #include "gdbcmd.h"
31 #include "gdbcore.h"
32 #include "target.h"
33
34 static void
35 continue_command PARAMS ((char *, int));
36
37 static void
38 until_next_command PARAMS ((int));
39
40 static void 
41 until_command PARAMS ((char *, int));
42
43 static void
44 path_info PARAMS ((char *, int));
45
46 static void
47 path_command PARAMS ((char *, int));
48
49 static void
50 unset_command PARAMS ((char *, int));
51
52 static void
53 float_info PARAMS ((char *, int));
54
55 static void
56 detach_command PARAMS ((char *, int));
57
58 static void
59 nofp_registers_info PARAMS ((char *, int));
60
61 static void
62 all_registers_info PARAMS ((char *, int));
63
64 static void
65 registers_info PARAMS ((char *, int));
66
67 static void
68 do_registers_info PARAMS ((int, int));
69
70 static void
71 unset_environment_command PARAMS ((char *, int));
72
73 static void
74 set_environment_command PARAMS ((char *, int));
75
76 static void
77 environment_info PARAMS ((char *, int));
78
79 static void
80 program_info PARAMS ((char *, int));
81
82 static void
83 finish_command PARAMS ((char *, int));
84
85 static void
86 signal_command PARAMS ((char *, int));
87
88 static void
89 jump_command PARAMS ((char *, int));
90
91 static void
92 step_1 PARAMS ((int, int, char *));
93
94 static void
95 nexti_command PARAMS ((char *, int));
96
97 static void
98 stepi_command PARAMS ((char *, int));
99
100 static void
101 next_command PARAMS ((char *, int));
102
103 static void
104 step_command PARAMS ((char *, int));
105
106 static void
107 run_command PARAMS ((char *, int));
108
109 #define ERROR_NO_INFERIOR \
110    if (!target_has_execution) error ("The program is not being run.");
111
112 /* String containing arguments to give to the program, separated by spaces.
113    Empty string (pointer to '\0') means no args.  */
114
115 static char *inferior_args;
116
117 /* File name for default use for standard in/out in the inferior.  */
118
119 char *inferior_io_terminal;
120
121 /* Pid of our debugged inferior, or 0 if no inferior now.
122    Since various parts of infrun.c test this to see whether there is a program
123    being debugged it should be nonzero (currently 3 is used) for remote
124    debugging.  */
125
126 int inferior_pid;
127
128 /* Last signal that the inferior received (why it stopped).  */
129
130 int stop_signal;
131
132 /* Address at which inferior stopped.  */
133
134 CORE_ADDR stop_pc;
135
136 /* Stack frame when program stopped.  */
137
138 FRAME_ADDR stop_frame_address;
139
140 /* Chain containing status of breakpoint(s) that we have stopped at.  */
141
142 bpstat stop_bpstat;
143
144 /* Flag indicating that a command has proceeded the inferior past the
145    current breakpoint.  */
146
147 int breakpoint_proceeded;
148
149 /* Nonzero if stopped due to a step command.  */
150
151 int stop_step;
152
153 /* Nonzero if stopped due to completion of a stack dummy routine.  */
154
155 int stop_stack_dummy;
156
157 /* Nonzero if stopped due to a random (unexpected) signal in inferior
158    process.  */
159
160 int stopped_by_random_signal;
161
162 /* Range to single step within.
163    If this is nonzero, respond to a single-step signal
164    by continuing to step if the pc is in this range.  */
165
166 CORE_ADDR step_range_start; /* Inclusive */
167 CORE_ADDR step_range_end; /* Exclusive */
168
169 /* Stack frame address as of when stepping command was issued.
170    This is how we know when we step into a subroutine call,
171    and how to set the frame for the breakpoint used to step out.  */
172
173 FRAME_ADDR step_frame_address;
174
175 /* 1 means step over all subroutine calls.
176    0 means don't step over calls (used by stepi).
177    -1 means step over calls to undebuggable functions.  */
178
179 int step_over_calls;
180
181 /* If stepping, nonzero means step count is > 1
182    so don't print frame next time inferior stops
183    if it stops due to stepping.  */
184
185 int step_multi;
186
187 /* Environment to use for running inferior,
188    in format described in environ.h.  */
189
190 struct environ *inferior_environ;
191
192 \f
193 /* ARGSUSED */
194 void
195 tty_command (file, from_tty)
196      char *file;
197      int from_tty;
198 {
199   if (file == 0)
200     error_no_arg ("terminal name for running target process");
201
202   inferior_io_terminal = savestring (file, strlen (file));
203 }
204
205 static void
206 run_command (args, from_tty)
207      char *args;
208      int from_tty;
209 {
210   char *exec_file;
211
212   dont_repeat ();
213
214   /* Shouldn't this be target_has_execution?  FIXME.  */
215   if (inferior_pid)
216     {
217       if (
218           !query ("The program being debugged has been started already.\n\
219 Start it from the beginning? "))
220         error ("Program not restarted.");
221       target_kill ();
222     }
223
224   exec_file = (char *) get_exec_file (0);
225
226   /* The exec file is re-read every time we do a generic_mourn_inferior, so
227      we just have to worry about the symbol file.  */
228   reread_symbols ();
229
230   if (args)
231     {
232       char *cmd;
233       cmd = concat ("set args ", args, NULL);
234       make_cleanup (free, cmd);
235       execute_command (cmd, from_tty);
236     }
237
238   if (from_tty)
239     {
240       puts_filtered("Starting program: ");
241       if (exec_file)
242         puts_filtered(exec_file);
243       puts_filtered(" ");
244       puts_filtered(inferior_args);
245       puts_filtered("\n");
246       fflush (stdout);
247     }
248
249   target_create_inferior (exec_file, inferior_args,
250                           environ_vector (inferior_environ));
251 }
252 \f
253 static void
254 continue_command (proc_count_exp, from_tty)
255      char *proc_count_exp;
256      int from_tty;
257 {
258   ERROR_NO_INFERIOR;
259
260   /* If have argument, set proceed count of breakpoint we stopped at.  */
261
262   if (proc_count_exp != NULL)
263     {
264       bpstat bs = stop_bpstat;
265       int num = bpstat_num (&bs);
266       if (num == 0 && from_tty)
267         {
268           printf_filtered
269             ("Not stopped at any breakpoint; argument ignored.\n");
270         }
271       while (num != 0)
272         {
273           set_ignore_count (num,
274                             parse_and_eval_address (proc_count_exp) - 1,
275                             from_tty);
276           /* set_ignore_count prints a message ending with a period.
277              So print two spaces before "Continuing.".  */
278           if (from_tty)
279             printf_filtered ("  ");
280           num = bpstat_num (&bs);
281         }
282     }
283
284   if (from_tty)
285     printf_filtered ("Continuing.\n");
286
287   clear_proceed_status ();
288
289   proceed ((CORE_ADDR) -1, -1, 0);
290 }
291 \f
292 /* Step until outside of current statement.  */
293
294 /* ARGSUSED */
295 static void
296 step_command (count_string, from_tty)
297      char *count_string;
298      int from_tty;
299 {
300   step_1 (0, 0, count_string);
301 }
302
303 /* Likewise, but skip over subroutine calls as if single instructions.  */
304
305 /* ARGSUSED */
306 static void
307 next_command (count_string, from_tty)
308      char *count_string;
309      int from_tty;
310 {
311   step_1 (1, 0, count_string);
312 }
313
314 /* Likewise, but step only one instruction.  */
315
316 /* ARGSUSED */
317 static void
318 stepi_command (count_string, from_tty)
319      char *count_string;
320      int from_tty;
321 {
322   step_1 (0, 1, count_string);
323 }
324
325 /* ARGSUSED */
326 static void
327 nexti_command (count_string, from_tty)
328      char *count_string;
329      int from_tty;
330 {
331   step_1 (1, 1, count_string);
332 }
333
334 static void
335 step_1 (skip_subroutines, single_inst, count_string)
336      int skip_subroutines;
337      int single_inst;
338      char *count_string;
339 {
340   register int count = 1;
341   FRAME fr;
342   struct cleanup *cleanups = 0;
343
344   ERROR_NO_INFERIOR;
345   count = count_string ? parse_and_eval_address (count_string) : 1;
346
347   if (!single_inst || skip_subroutines) /* leave si command alone */
348     {
349       enable_longjmp_breakpoint();
350       cleanups = make_cleanup(disable_longjmp_breakpoint, 0);
351     }
352
353   for (; count > 0; count--)
354     {
355       clear_proceed_status ();
356
357       fr = get_current_frame ();
358       if (!fr)                          /* Avoid coredump here.  Why tho? */
359         error ("No current frame");
360       step_frame_address = FRAME_FP (fr);
361
362       if (! single_inst)
363         {
364           find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
365           if (step_range_end == 0)
366             {
367               char *name;
368               if (find_pc_partial_function (stop_pc, &name, &step_range_start,
369                                             &step_range_end) == 0)
370                 error ("Cannot find bounds of current function");
371
372               target_terminal_ours ();
373               printf_filtered ("\
374 Single stepping until exit from function %s, \n\
375 which has no line number information.\n", name);
376               fflush (stdout);
377             }
378         }
379       else
380         {
381           /* Say we are stepping, but stop after one insn whatever it does.  */
382           step_range_start = step_range_end = 1;
383           if (!skip_subroutines)
384             /* It is stepi.
385                Don't step over function calls, not even to functions lacking
386                line numbers.  */
387             step_over_calls = 0;
388         }
389
390       if (skip_subroutines)
391         step_over_calls = 1;
392
393       step_multi = (count > 1);
394       proceed ((CORE_ADDR) -1, -1, 1);
395       if (! stop_step)
396         break;
397
398       /* FIXME: On nexti, this may have already been done (when we hit the
399          step resume break, I think).  Probably this should be moved to
400          wait_for_inferior (near the top).  */
401 #if defined (SHIFT_INST_REGS)
402       SHIFT_INST_REGS();
403 #endif
404     }
405
406   if (!single_inst || skip_subroutines)
407     do_cleanups(cleanups);
408 }
409 \f
410 /* Continue program at specified address.  */
411
412 static void
413 jump_command (arg, from_tty)
414      char *arg;
415      int from_tty;
416 {
417   register CORE_ADDR addr;
418   struct symtabs_and_lines sals;
419   struct symtab_and_line sal;
420   struct symbol *fn;
421   struct symbol *sfn;
422
423   ERROR_NO_INFERIOR;
424
425   if (!arg)
426     error_no_arg ("starting address");
427
428   sals = decode_line_spec_1 (arg, 1);
429   if (sals.nelts != 1)
430     {
431       error ("Unreasonable jump request");
432     }
433
434   sal = sals.sals[0];
435   free ((PTR)sals.sals);
436
437   if (sal.symtab == 0 && sal.pc == 0)
438     error ("No source file has been specified.");
439
440   resolve_sal_pc (&sal);                        /* May error out */
441
442   /* See if we are trying to jump to another function. */
443   fn = get_frame_function (get_current_frame ());
444   sfn = find_pc_function (sal.pc);
445   if (fn != NULL && sfn != fn)
446     {
447       if (!query ("Line %d is not in `%s'.  Jump anyway? ", sal.line,
448                   SYMBOL_SOURCE_NAME (fn)))
449         {
450           error ("Not confirmed.");
451           /* NOTREACHED */
452         }
453     }
454
455   addr = sal.pc;
456
457   if (from_tty)
458     printf_filtered ("Continuing at %s.\n",
459                      local_hex_string((unsigned long) addr));
460
461   clear_proceed_status ();
462   proceed (addr, 0, 0);
463 }
464
465 /* Continue program giving it specified signal.  */
466
467 static void
468 signal_command (signum_exp, from_tty)
469      char *signum_exp;
470      int from_tty;
471 {
472   register int signum;
473
474   dont_repeat ();               /* Too dangerous.  */
475   ERROR_NO_INFERIOR;
476
477   if (!signum_exp)
478     error_no_arg ("signal number");
479
480   /* It would be even slicker to make signal names be valid expressions,
481      (the type could be "enum $signal" or some such), then the user could
482      assign them to convenience variables.  */
483   signum = strtosigno (signum_exp);
484
485   if (signum == 0)
486     /* Not found as a name, try it as an expression.  */
487     signum = parse_and_eval_address (signum_exp);
488
489   if (from_tty)
490     {
491       char *signame = strsigno (signum);
492       printf_filtered ("Continuing with signal ");
493       if (signame == NULL || signum == 0)
494         printf_filtered ("%d.\n", signum);
495       else
496         /* Do we need to print the number as well as the name?  */
497         printf_filtered ("%s (%d).\n", signame, signum);
498     }
499
500   clear_proceed_status ();
501   proceed (stop_pc, signum, 0);
502 }
503
504 /* Call breakpoint_auto_delete on the current contents of the bpstat
505    pointed to by arg (which is really a bpstat *).  */
506 void
507 breakpoint_auto_delete_contents (arg)
508      PTR arg;
509 {
510   breakpoint_auto_delete (*(bpstat *)arg);
511 }
512
513 /* Execute a "stack dummy", a piece of code stored in the stack
514    by the debugger to be executed in the inferior.
515
516    To call: first, do PUSH_DUMMY_FRAME.
517    Then push the contents of the dummy.  It should end with a breakpoint insn.
518    Then call here, passing address at which to start the dummy.
519
520    The contents of all registers are saved before the dummy frame is popped
521    and copied into the buffer BUFFER.
522
523    The dummy's frame is automatically popped whenever that break is hit.
524    If that is the first time the program stops, run_stack_dummy
525    returns to its caller with that frame already gone and returns 0.
526    Otherwise, run_stack-dummy returns 1 (the frame will eventually be popped
527    when we do hit that breakpoint).  */
528
529 /* DEBUG HOOK:  4 => return instead of letting the stack dummy run.  */
530
531 static int stack_dummy_testing = 0;
532
533 int
534 run_stack_dummy (addr, buffer)
535      CORE_ADDR addr;
536      char buffer[REGISTER_BYTES];
537 {
538   struct cleanup *old_cleanups = make_cleanup (null_cleanup, 0);
539
540   /* Now proceed, having reached the desired place.  */
541   clear_proceed_status ();
542   if (stack_dummy_testing & 4)
543     {
544       POP_FRAME;
545       return(0);
546     }
547 #ifdef CALL_DUMMY_BREAKPOINT_OFFSET
548   {
549     struct breakpoint *bpt;
550     struct symtab_and_line sal;
551
552     sal.pc = addr - CALL_DUMMY_START_OFFSET + CALL_DUMMY_BREAKPOINT_OFFSET;
553     sal.symtab = NULL;
554     sal.line = 0;
555
556     /* If defined, CALL_DUMMY_BREAKPOINT_OFFSET is where we need to put
557        a breakpoint instruction.  If not, the call dummy already has the
558        breakpoint instruction in it.
559
560        addr is the address of the call dummy plus the CALL_DUMMY_START_OFFSET,
561        so we need to subtract the CALL_DUMMY_START_OFFSET.  */
562     bpt = set_momentary_breakpoint (sal,
563                                     NULL,
564                                     bp_call_dummy);
565     bpt->disposition = delete;
566
567     /* If all error()s out of proceed ended up calling normal_stop (and
568        perhaps they should; it already does in the special case of error
569        out of resume()), then we wouldn't need this.  */
570     make_cleanup (breakpoint_auto_delete_contents, &stop_bpstat);
571   }
572 #endif /* CALL_DUMMY_BREAKPOINT_OFFSET.  */
573
574   proceed_to_finish = 1;        /* We want stop_registers, please... */
575   proceed (addr, 0, 0);
576
577   discard_cleanups (old_cleanups);
578
579   if (!stop_stack_dummy)
580     return 1;
581
582   /* On return, the stack dummy has been popped already.  */
583
584   memcpy (buffer, stop_registers, sizeof stop_registers);
585   return 0;
586 }
587 \f
588 /* Proceed until we reach a different source line with pc greater than
589    our current one or exit the function.  We skip calls in both cases.
590
591    Note that eventually this command should probably be changed so
592    that only source lines are printed out when we hit the breakpoint
593    we set.  I'm going to postpone this until after a hopeful rewrite
594    of wait_for_inferior and the proceed status code. -- randy */
595
596 /* ARGSUSED */
597 static void
598 until_next_command (from_tty)
599      int from_tty;
600 {
601   FRAME frame;
602   CORE_ADDR pc;
603   struct symbol *func;
604   struct symtab_and_line sal;
605  
606   clear_proceed_status ();
607
608   frame = get_current_frame ();
609
610   /* Step until either exited from this function or greater
611      than the current line (if in symbolic section) or pc (if
612      not). */
613
614   pc = read_pc ();
615   func = find_pc_function (pc);
616   
617   if (!func)
618     {
619       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
620       
621       if (msymbol == NULL)
622         error ("Execution is not within a known function.");
623       
624       step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
625       step_range_end = pc;
626     }
627   else
628     {
629       sal = find_pc_line (pc, 0);
630       
631       step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
632       step_range_end = sal.end;
633     }
634   
635   step_over_calls = 1;
636   step_frame_address = FRAME_FP (frame);
637   
638   step_multi = 0;               /* Only one call to proceed */
639   
640   proceed ((CORE_ADDR) -1, -1, 1);
641 }
642
643 static void 
644 until_command (arg, from_tty)
645      char *arg;
646      int from_tty;
647 {
648   if (!target_has_execution)
649     error ("The program is not running.");
650   if (arg)
651     until_break_command (arg, from_tty);
652   else
653     until_next_command (from_tty);
654 }
655 \f
656 /* "finish": Set a temporary breakpoint at the place
657    the selected frame will return to, then continue.  */
658
659 static void
660 finish_command (arg, from_tty)
661      char *arg;
662      int from_tty;
663 {
664   struct symtab_and_line sal;
665   register FRAME frame;
666   struct frame_info *fi;
667   register struct symbol *function;
668   struct breakpoint *breakpoint;
669   struct cleanup *old_chain;
670
671   if (arg)
672     error ("The \"finish\" command does not take any arguments.");
673   if (!target_has_execution)
674     error ("The program is not running.");
675   if (selected_frame == NULL)
676     error ("No selected frame.");
677
678   frame = get_prev_frame (selected_frame);
679   if (frame == 0)
680     error ("\"finish\" not meaningful in the outermost frame.");
681
682   clear_proceed_status ();
683
684   fi = get_frame_info (frame);
685   sal = find_pc_line (fi->pc, 0);
686   sal.pc = fi->pc;
687
688   breakpoint = set_momentary_breakpoint (sal, frame, bp_finish);
689
690   old_chain = make_cleanup(delete_breakpoint, breakpoint);
691
692   /* Find the function we will return from.  */
693
694   fi = get_frame_info (selected_frame);
695   function = find_pc_function (fi->pc);
696
697   /* Print info on the selected frame, including level number
698      but not source.  */
699   if (from_tty)
700     {
701       printf_filtered ("Run till exit from ");
702       print_stack_frame (selected_frame, selected_frame_level, 0);
703     }
704
705   proceed_to_finish = 1;                /* We want stop_registers, please... */
706   proceed ((CORE_ADDR) -1, -1, 0);
707
708   /* Did we stop at our breakpoint? */
709   if (bpstat_find_breakpoint(stop_bpstat, breakpoint) != NULL
710       && function != 0)
711     {
712       struct type *value_type;
713       register value val;
714       CORE_ADDR funcaddr;
715
716       value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
717       if (!value_type)
718         fatal ("internal: finish_command: function has no target type");
719       
720       if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
721         return;
722
723       funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
724
725       val = value_being_returned (value_type, stop_registers,
726               using_struct_return (value_of_variable (function, NULL),
727                                    funcaddr,
728                                    value_type,
729                 BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
730
731       printf_filtered ("Value returned is $%d = ", record_latest_value (val));
732       value_print (val, stdout, 0, Val_no_prettyprint);
733       printf_filtered ("\n");
734     }
735   do_cleanups(old_chain);
736 }
737 \f
738 /* ARGSUSED */
739 static void
740 program_info (args, from_tty)
741     char *args;
742     int from_tty;
743 {
744   bpstat bs = stop_bpstat;
745   int num = bpstat_num (&bs);
746   
747   if (!target_has_execution)
748     {
749       printf_filtered ("The program being debugged is not being run.\n");
750       return;
751     }
752
753   target_files_info ();
754   printf_filtered ("Program stopped at %s.\n",
755                    local_hex_string((unsigned long) stop_pc));
756   if (stop_step)
757     printf_filtered ("It stopped after being stepped.\n");
758   else if (num != 0)
759     {
760       /* There may be several breakpoints in the same place, so this
761          isn't as strange as it seems.  */
762       while (num != 0)
763         {
764           if (num < 0)
765             printf_filtered ("It stopped at a breakpoint that has since been deleted.\n");
766           else
767             printf_filtered ("It stopped at breakpoint %d.\n", num);
768           num = bpstat_num (&bs);
769         }
770     }
771   else if (stop_signal)
772     {
773 #ifdef PRINT_RANDOM_SIGNAL
774       PRINT_RANDOM_SIGNAL (stop_signal);
775 #else
776       char *signame = strsigno (stop_signal);
777       printf_filtered ("It stopped with signal ");
778       if (signame == NULL)
779         printf_filtered ("%d", stop_signal);
780       else
781         /* Do we need to print the number as well as the name?  */
782         printf_filtered ("%s (%d)", signame, stop_signal);
783       printf_filtered (", %s.\n", safe_strsignal (stop_signal));
784 #endif
785   }
786
787   if (!from_tty)
788     printf_filtered ("Type \"info stack\" or \"info registers\" for more information.\n");
789 }
790 \f
791 static void
792 environment_info (var, from_tty)
793      char *var;
794      int from_tty;
795 {
796   if (var)
797     {
798       register char *val = get_in_environ (inferior_environ, var);
799       if (val)
800         {
801           puts_filtered (var);
802           puts_filtered (" = ");
803           puts_filtered (val);
804           puts_filtered ("\n");
805         }
806       else
807         {
808           puts_filtered ("Environment variable \"");
809           puts_filtered (var);
810           puts_filtered ("\" not defined.\n");
811         }
812     }
813   else
814     {
815       register char **vector = environ_vector (inferior_environ);
816       while (*vector)
817         {
818           puts_filtered (*vector++);
819           puts_filtered ("\n");
820         }
821     }
822 }
823
824 static void
825 set_environment_command (arg, from_tty)
826      char *arg;
827      int from_tty;
828 {
829   register char *p, *val, *var;
830   int nullset = 0;
831
832   if (arg == 0)
833     error_no_arg ("environment variable and value");
834
835   /* Find seperation between variable name and value */
836   p = (char *) strchr (arg, '=');
837   val = (char *) strchr (arg, ' ');
838
839   if (p != 0 && val != 0)
840     {
841       /* We have both a space and an equals.  If the space is before the
842          equals, walk forward over the spaces til we see a nonspace 
843          (possibly the equals). */
844       if (p > val)
845         while (*val == ' ')
846           val++;
847
848       /* Now if the = is after the char following the spaces,
849          take the char following the spaces.  */
850       if (p > val)
851         p = val - 1;
852     }
853   else if (val != 0 && p == 0)
854     p = val;
855
856   if (p == arg)
857     error_no_arg ("environment variable to set");
858
859   if (p == 0 || p[1] == 0)
860     {
861       nullset = 1;
862       if (p == 0)
863         p = arg + strlen (arg); /* So that savestring below will work */
864     }
865   else
866     {
867       /* Not setting variable value to null */
868       val = p + 1;
869       while (*val == ' ' || *val == '\t')
870         val++;
871     }
872
873   while (p != arg && (p[-1] == ' ' || p[-1] == '\t')) p--;
874
875   var = savestring (arg, p - arg);
876   if (nullset)
877     {
878       printf_filtered ("Setting environment variable \"%s\" to null value.\n", var);
879       set_in_environ (inferior_environ, var, "");
880     }
881   else
882     set_in_environ (inferior_environ, var, val);
883   free (var);
884 }
885
886 static void
887 unset_environment_command (var, from_tty)
888      char *var;
889      int from_tty;
890 {
891   if (var == 0)
892     {
893       /* If there is no argument, delete all environment variables.
894          Ask for confirmation if reading from the terminal.  */
895       if (!from_tty || query ("Delete all environment variables? "))
896         {
897           free_environ (inferior_environ);
898           inferior_environ = make_environ ();
899         }
900     }
901   else
902     unset_in_environ (inferior_environ, var);
903 }
904
905 /* Handle the execution path (PATH variable) */
906
907 static const char path_var_name[] = "PATH";
908
909 /* ARGSUSED */
910 static void
911 path_info (args, from_tty)
912      char *args;
913      int from_tty;
914 {
915   puts_filtered ("Executable and object file path: ");
916   puts_filtered (get_in_environ (inferior_environ, path_var_name));
917   puts_filtered ("\n");
918 }
919
920 /* Add zero or more directories to the front of the execution path.  */
921
922 static void
923 path_command (dirname, from_tty)
924      char *dirname;
925      int from_tty;
926 {
927   char *exec_path;
928
929   dont_repeat ();
930   exec_path = strsave (get_in_environ (inferior_environ, path_var_name));
931   mod_path (dirname, &exec_path);
932   set_in_environ (inferior_environ, path_var_name, exec_path);
933   free (exec_path);
934   if (from_tty)
935     path_info ((char *)NULL, from_tty);
936 }
937 \f
938 /* This routine is getting awfully cluttered with #if's.  It's probably
939    time to turn this into READ_PC and define it in the tm.h file.
940    Ditto for write_pc.  */
941
942 CORE_ADDR
943 read_pc ()
944 {
945 #ifdef TARGET_READ_PC
946   return TARGET_READ_PC ();
947 #else
948   return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
949 #endif
950 }
951
952 void
953 write_pc (val)
954      CORE_ADDR val;
955 {
956 #ifdef TARGET_WRITE_PC
957   TARGET_WRITE_PC (val);
958 #else
959   write_register (PC_REGNUM, (long) val);
960 #ifdef NPC_REGNUM
961   write_register (NPC_REGNUM, (long) val + 4);
962 #ifdef NNPC_REGNUM
963   write_register (NNPC_REGNUM, (long) val + 8);
964 #endif
965 #endif
966 #endif
967 }
968
969 /* Cope with strage ways of getting to the stack and frame pointers */
970
971 CORE_ADDR
972 read_sp ()
973 {
974 #ifdef TARGET_READ_SP
975   return TARGET_READ_SP ();
976 #else
977   return read_register (SP_REGNUM);
978 #endif
979 }
980
981 void
982 write_sp (val)
983      CORE_ADDR val;
984 {
985 #ifdef TARGET_WRITE_SP
986   TARGET_WRITE_SP (val);
987 #else
988   write_register (SP_REGNUM, val);
989 #endif
990 }
991
992
993 CORE_ADDR
994 read_fp ()
995 {
996 #ifdef TARGET_READ_FP
997   return TARGET_READ_FP ();
998 #else
999   return read_register (FP_REGNUM);
1000 #endif
1001 }
1002
1003 void
1004 write_fp (val)
1005      CORE_ADDR val;
1006 {
1007 #ifdef TARGET_WRITE_FP
1008   TARGET_WRITE_FP (val);
1009 #else
1010   write_register (FP_REGNUM, val);
1011 #endif
1012 }
1013
1014 const char * const reg_names[] = REGISTER_NAMES;
1015
1016 /* Print out the machine register regnum. If regnum is -1,
1017    print all registers (fpregs == 1) or all non-float registers
1018    (fpregs == 0).
1019
1020    For most machines, having all_registers_info() print the
1021    register(s) one per line is good enough. If a different format
1022    is required, (eg, for MIPS or Pyramid 90x, which both have
1023    lots of regs), or there is an existing convention for showing
1024    all the registers, define the macro DO_REGISTERS_INFO(regnum, fp)
1025    to provide that format.  */  
1026
1027 #if !defined (DO_REGISTERS_INFO)
1028 #define DO_REGISTERS_INFO(regnum, fp) do_registers_info(regnum, fp)
1029 static void
1030 do_registers_info (regnum, fpregs)
1031      int regnum;
1032      int fpregs;
1033 {
1034   register int i;
1035
1036   for (i = 0; i < NUM_REGS; i++)
1037     {
1038       char raw_buffer[MAX_REGISTER_RAW_SIZE];
1039       char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
1040
1041       /* Decide between printing all regs, nonfloat regs, or specific reg.  */
1042       if (regnum == -1) {
1043         if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
1044           continue;
1045       } else {
1046         if (i != regnum)
1047           continue;
1048       }
1049
1050       fputs_filtered (reg_names[i], stdout);
1051       print_spaces_filtered (15 - strlen (reg_names[i]), stdout);
1052
1053       /* Get the data in raw format, then convert also to virtual format.  */
1054       if (read_relative_register_raw_bytes (i, raw_buffer))
1055         {
1056           printf_filtered ("Invalid register contents\n");
1057           continue;
1058         }
1059       
1060       REGISTER_CONVERT_TO_VIRTUAL (i, raw_buffer, virtual_buffer);
1061
1062       /* If virtual format is floating, print it that way, and in raw hex.  */
1063       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT
1064           && ! INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
1065         {
1066           register int j;
1067
1068           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0,
1069                      stdout, 0, 1, 0, Val_pretty_default);
1070
1071           printf_filtered ("\t(raw 0x");
1072           for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
1073             printf_filtered ("%02x", (unsigned char)raw_buffer[j]);
1074           printf_filtered (")");
1075         }
1076
1077 /* FIXME!  val_print probably can handle all of these cases now...  */
1078
1079       /* Else if virtual format is too long for printf,
1080          print in hex a byte at a time.  */
1081       else if (REGISTER_VIRTUAL_SIZE (i) > sizeof (long))
1082         {
1083           register int j;
1084           printf_filtered ("0x");
1085           for (j = 0; j < REGISTER_VIRTUAL_SIZE (i); j++)
1086             printf_filtered ("%02x", (unsigned char)virtual_buffer[j]);
1087         }
1088       /* Else print as integer in hex and in decimal.  */
1089       else
1090         {
1091           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
1092                      stdout, 'x', 1, 0, Val_pretty_default);
1093           printf_filtered ("\t");
1094           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
1095                      stdout,   0, 1, 0, Val_pretty_default);
1096         }
1097
1098       /* The SPARC wants to print even-numbered float regs as doubles
1099          in addition to printing them as floats.  */
1100 #ifdef PRINT_REGISTER_HOOK
1101       PRINT_REGISTER_HOOK (i);
1102 #endif
1103
1104       printf_filtered ("\n");
1105     }
1106 }
1107 #endif /* no DO_REGISTERS_INFO.  */
1108
1109 static void
1110 registers_info (addr_exp, fpregs)
1111      char *addr_exp;
1112      int fpregs;
1113 {
1114   int regnum;
1115   register char *end;
1116
1117   if (!target_has_registers)
1118     error ("The program has no registers now.");
1119
1120   if (!addr_exp)
1121     {
1122       DO_REGISTERS_INFO(-1, fpregs);
1123       return;
1124     }
1125
1126   do
1127     {      
1128       if (addr_exp[0] == '$')
1129         addr_exp++;
1130       end = addr_exp;
1131       while (*end != '\0' && *end != ' ' && *end != '\t')
1132         ++end;
1133       for (regnum = 0; regnum < NUM_REGS; regnum++)
1134         if (!strncmp (addr_exp, reg_names[regnum], end - addr_exp)
1135             && strlen (reg_names[regnum]) == end - addr_exp)
1136           goto found;
1137       if (*addr_exp >= '0' && *addr_exp <= '9')
1138         regnum = atoi (addr_exp);               /* Take a number */
1139       if (regnum >= NUM_REGS)           /* Bad name, or bad number */
1140         error ("%.*s: invalid register", end - addr_exp, addr_exp);
1141
1142 found:
1143       DO_REGISTERS_INFO(regnum, fpregs);
1144
1145       addr_exp = end;
1146       while (*addr_exp == ' ' || *addr_exp == '\t')
1147         ++addr_exp;
1148     } while (*addr_exp != '\0');
1149 }
1150
1151 static void
1152 all_registers_info (addr_exp, from_tty)
1153      char *addr_exp;
1154      int from_tty;
1155 {
1156   registers_info (addr_exp, 1);
1157 }
1158
1159 static void
1160 nofp_registers_info (addr_exp, from_tty)
1161      char *addr_exp;
1162      int from_tty;
1163 {
1164   registers_info (addr_exp, 0);
1165 }
1166 \f
1167 /*
1168  * TODO:
1169  * Should save/restore the tty state since it might be that the
1170  * program to be debugged was started on this tty and it wants
1171  * the tty in some state other than what we want.  If it's running
1172  * on another terminal or without a terminal, then saving and
1173  * restoring the tty state is a harmless no-op.
1174  * This only needs to be done if we are attaching to a process.
1175  */
1176
1177 /*
1178    attach_command --
1179    takes a program started up outside of gdb and ``attaches'' to it.
1180    This stops it cold in its tracks and allows us to start debugging it.
1181    and wait for the trace-trap that results from attaching.  */
1182
1183 void
1184 attach_command (args, from_tty)
1185      char *args;
1186      int from_tty;
1187 {
1188   dont_repeat ();                       /* Not for the faint of heart */
1189
1190   if (target_has_execution)
1191     {
1192       if (query ("A program is being debugged already.  Kill it? "))
1193         target_kill ();
1194       else
1195         error ("Not killed.");
1196     }
1197
1198   target_attach (args, from_tty);
1199
1200   /* Set up the "saved terminal modes" of the inferior
1201      based on what modes we are starting it with.  */
1202   target_terminal_init ();
1203
1204   /* Install inferior's terminal modes.  */
1205   target_terminal_inferior ();
1206
1207   /* Set up execution context to know that we should return from
1208      wait_for_inferior as soon as the target reports a stop.  */
1209   init_wait_for_inferior ();
1210   clear_proceed_status ();
1211   stop_soon_quietly = 1;
1212
1213   wait_for_inferior ();
1214
1215 #ifdef SOLIB_ADD
1216   /* Add shared library symbols from the newly attached process, if any.  */
1217   SOLIB_ADD ((char *)0, from_tty, (struct target_ops *)0);
1218 #endif
1219
1220   normal_stop ();
1221 }
1222
1223 /*
1224  * detach_command --
1225  * takes a program previously attached to and detaches it.
1226  * The program resumes execution and will no longer stop
1227  * on signals, etc.  We better not have left any breakpoints
1228  * in the program or it'll die when it hits one.  For this
1229  * to work, it may be necessary for the process to have been
1230  * previously attached.  It *might* work if the program was
1231  * started via the normal ptrace (PTRACE_TRACEME).
1232  */
1233
1234 static void
1235 detach_command (args, from_tty)
1236      char *args;
1237      int from_tty;
1238 {
1239   dont_repeat ();                       /* Not for the faint of heart */
1240   target_detach (args, from_tty);
1241 }
1242
1243 /* ARGSUSED */
1244 static void
1245 float_info (addr_exp, from_tty)
1246      char *addr_exp;
1247      int from_tty;
1248 {
1249 #ifdef FLOAT_INFO
1250         FLOAT_INFO;
1251 #else
1252         printf_filtered ("No floating point info available for this processor.\n");
1253 #endif
1254 }
1255 \f
1256 /* ARGSUSED */
1257 static void
1258 unset_command (args, from_tty)
1259      char *args;
1260      int from_tty;
1261 {
1262   printf_filtered ("\"unset\" must be followed by the name of an unset subcommand.\n");
1263   help_list (unsetlist, "unset ", -1, stdout);
1264 }
1265
1266 void
1267 _initialize_infcmd ()
1268 {
1269   struct cmd_list_element *c;
1270   
1271   add_com ("tty", class_run, tty_command,
1272            "Set terminal for future runs of program being debugged.");
1273
1274   add_show_from_set
1275     (add_set_cmd ("args", class_run, var_string_noescape, (char *)&inferior_args,
1276                   
1277 "Set arguments to give program being debugged when it is started.\n\
1278 Follow this command with any number of args, to be passed to the program.",
1279                   &setlist),
1280      &showlist);
1281
1282   c = add_cmd
1283     ("environment", no_class, environment_info,
1284      "The environment to give the program, or one variable's value.\n\
1285 With an argument VAR, prints the value of environment variable VAR to\n\
1286 give the program being debugged.  With no arguments, prints the entire\n\
1287 environment to be given to the program.", &showlist);
1288   c->completer = noop_completer;
1289
1290   add_prefix_cmd ("unset", no_class, unset_command,
1291                   "Complement to certain \"set\" commands",
1292                   &unsetlist, "unset ", 0, &cmdlist);
1293   
1294   c = add_cmd ("environment", class_run, unset_environment_command,
1295               "Cancel environment variable VAR for the program.\n\
1296 This does not affect the program until the next \"run\" command.",
1297            &unsetlist);
1298   c->completer = noop_completer;
1299
1300   c = add_cmd ("environment", class_run, set_environment_command,
1301                "Set environment variable value to give the program.\n\
1302 Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
1303 VALUES of environment variables are uninterpreted strings.\n\
1304 This does not affect the program until the next \"run\" command.",
1305            &setlist);
1306   c->completer = noop_completer;
1307  
1308   add_com ("path", class_files, path_command,
1309        "Add directory DIR(s) to beginning of search path for object files.\n\
1310 $cwd in the path means the current working directory.\n\
1311 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1312 directories, separated by colons.  These directories are searched to find\n\
1313 fully linked executable files and separately compiled object files as needed.");
1314
1315   c = add_cmd ("paths", no_class, path_info,
1316             "Current search path for finding object files.\n\
1317 $cwd in the path means the current working directory.\n\
1318 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1319 directories, separated by colons.  These directories are searched to find\n\
1320 fully linked executable files and separately compiled object files as needed.", &showlist);
1321   c->completer = noop_completer;
1322
1323  add_com ("attach", class_run, attach_command,
1324            "Attach to a process or file outside of GDB.\n\
1325 This command attaches to another target, of the same type as your last\n\
1326 `target' command (`info files' will show your target stack).\n\
1327 The command may take as argument a process id or a device file.\n\
1328 For a process id, you must have permission to send the process a signal,\n\
1329 and it must have the same effective uid as the debugger.\n\
1330 When using \"attach\", you should use the \"file\" command to specify\n\
1331 the program running in the process, and to load its symbol table.");
1332
1333   add_com ("detach", class_run, detach_command,
1334            "Detach a process or file previously attached.\n\
1335 If a process, it is no longer traced, and it continues its execution.  If you\n\
1336 were debugging a file, the file is closed and gdb no longer accesses it.");
1337
1338   add_com ("signal", class_run, signal_command,
1339            "Continue program giving it signal number SIGNUMBER.");
1340
1341   add_com ("stepi", class_run, stepi_command,
1342            "Step one instruction exactly.\n\
1343 Argument N means do this N times (or till program stops for another reason).");
1344   add_com_alias ("si", "stepi", class_alias, 0);
1345
1346   add_com ("nexti", class_run, nexti_command,
1347            "Step one instruction, but proceed through subroutine calls.\n\
1348 Argument N means do this N times (or till program stops for another reason).");
1349   add_com_alias ("ni", "nexti", class_alias, 0);
1350
1351   add_com ("finish", class_run, finish_command,
1352            "Execute until selected stack frame returns.\n\
1353 Upon return, the value returned is printed and put in the value history.");
1354
1355   add_com ("next", class_run, next_command,
1356            "Step program, proceeding through subroutine calls.\n\
1357 Like the \"step\" command as long as subroutine calls do not happen;\n\
1358 when they do, the call is treated as one instruction.\n\
1359 Argument N means do this N times (or till program stops for another reason).");
1360   add_com_alias ("n", "next", class_run, 1);
1361
1362   add_com ("step", class_run, step_command,
1363            "Step program until it reaches a different source line.\n\
1364 Argument N means do this N times (or till program stops for another reason).");
1365   add_com_alias ("s", "step", class_run, 1);
1366
1367   add_com ("until", class_run, until_command,
1368            "Execute until the program reaches a source line greater than the current\n\
1369 or a specified line or address or function (same args as break command).\n\
1370 Execution will also stop upon exit from the current stack frame.");
1371   add_com_alias ("u", "until", class_run, 1);
1372   
1373   add_com ("jump", class_run, jump_command,
1374            "Continue program being debugged at specified line or address.\n\
1375 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1376 for an address to start at.");
1377
1378   add_com ("continue", class_run, continue_command,
1379            "Continue program being debugged, after signal or breakpoint.\n\
1380 If proceeding from breakpoint, a number N may be used as an argument,\n\
1381 which means to set the ignore count of that breakpoint to N - 1 (so that\n\
1382 the breakpoint won't break until the Nth time it is reached).");
1383   add_com_alias ("c", "cont", class_run, 1);
1384   add_com_alias ("fg", "cont", class_run, 1);
1385
1386   add_com ("run", class_run, run_command,
1387            "Start debugged program.  You may specify arguments to give it.\n\
1388 Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
1389 Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
1390 With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
1391 To cancel previous arguments and run with no arguments,\n\
1392 use \"set args\" without arguments.");
1393   add_com_alias ("r", "run", class_run, 1);
1394
1395   add_info ("registers", nofp_registers_info,
1396     "List of integer registers and their contents, for selected stack frame.\n\
1397 Register name as argument means describe only that register.");
1398
1399   add_info ("all-registers", all_registers_info,
1400 "List of all registers and their contents, for selected stack frame.\n\
1401 Register name as argument means describe only that register.");
1402
1403   add_info ("program", program_info,
1404             "Execution status of the program.");
1405
1406   add_info ("float", float_info,
1407             "Print the status of the floating point unit\n");
1408
1409   inferior_args = savestring ("", 1);   /* Initially no args */
1410   inferior_environ = make_environ ();
1411   init_environ (inferior_environ);
1412 }