]> Git Repo - binutils.git/blob - gdb/infcmd.c
* stabsread.c (read_struct_fields): Don't call read_cpp_abbrev on $_.
[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   if (inferior_pid)
215     {
216       if (
217           !query ("The program being debugged has been started already.\n\
218 Start it from the beginning? "))
219         error ("Program not restarted.");
220       target_kill ();
221     }
222
223   exec_file = (char *) get_exec_file (0);
224
225   /* The exec file is re-read every time we do a generic_mourn_inferior, so
226      we just have to worry about the symbol file.  */
227   reread_symbols ();
228
229   if (args)
230     {
231       char *cmd;
232       cmd = concat ("set args ", args, NULL);
233       make_cleanup (free, cmd);
234       execute_command (cmd, from_tty);
235     }
236
237   if (from_tty)
238     {
239       puts_filtered("Starting program: ");
240       if (exec_file)
241         puts_filtered(exec_file);
242       puts_filtered(" ");
243       puts_filtered(inferior_args);
244       puts_filtered("\n");
245       fflush (stdout);
246     }
247
248   target_create_inferior (exec_file, inferior_args,
249                           environ_vector (inferior_environ));
250 }
251 \f
252 static void
253 continue_command (proc_count_exp, from_tty)
254      char *proc_count_exp;
255      int from_tty;
256 {
257   ERROR_NO_INFERIOR;
258
259   /* If have argument, set proceed count of breakpoint we stopped at.  */
260
261   if (proc_count_exp != NULL)
262     {
263       bpstat bs = stop_bpstat;
264       int num = bpstat_num (&bs);
265       if (num == 0 && from_tty)
266         {
267           printf_filtered
268             ("Not stopped at any breakpoint; argument ignored.\n");
269         }
270       while (num != 0)
271         {
272           set_ignore_count (num,
273                             parse_and_eval_address (proc_count_exp) - 1,
274                             from_tty);
275           /* set_ignore_count prints a message ending with a period.
276              So print two spaces before "Continuing.".  */
277           if (from_tty)
278             printf_filtered ("  ");
279           num = bpstat_num (&bs);
280         }
281     }
282
283   if (from_tty)
284     printf_filtered ("Continuing.\n");
285
286   clear_proceed_status ();
287
288   proceed ((CORE_ADDR) -1, -1, 0);
289 }
290 \f
291 /* Step until outside of current statement.  */
292
293 /* ARGSUSED */
294 static void
295 step_command (count_string, from_tty)
296      char *count_string;
297      int from_tty;
298 {
299   step_1 (0, 0, count_string);
300 }
301
302 /* Likewise, but skip over subroutine calls as if single instructions.  */
303
304 /* ARGSUSED */
305 static void
306 next_command (count_string, from_tty)
307      char *count_string;
308      int from_tty;
309 {
310   step_1 (1, 0, count_string);
311 }
312
313 /* Likewise, but step only one instruction.  */
314
315 /* ARGSUSED */
316 static void
317 stepi_command (count_string, from_tty)
318      char *count_string;
319      int from_tty;
320 {
321   step_1 (0, 1, count_string);
322 }
323
324 /* ARGSUSED */
325 static void
326 nexti_command (count_string, from_tty)
327      char *count_string;
328      int from_tty;
329 {
330   step_1 (1, 1, count_string);
331 }
332
333 static void
334 step_1 (skip_subroutines, single_inst, count_string)
335      int skip_subroutines;
336      int single_inst;
337      char *count_string;
338 {
339   register int count = 1;
340   FRAME fr;
341   struct cleanup *cleanups = 0;
342
343   ERROR_NO_INFERIOR;
344   count = count_string ? parse_and_eval_address (count_string) : 1;
345
346   if (!single_inst || skip_subroutines) /* leave si command alone */
347     {
348       enable_longjmp_breakpoint();
349       cleanups = make_cleanup(disable_longjmp_breakpoint, 0);
350     }
351
352   for (; count > 0; count--)
353     {
354       clear_proceed_status ();
355
356       fr = get_current_frame ();
357       if (!fr)                          /* Avoid coredump here.  Why tho? */
358         error ("No current frame");
359       step_frame_address = FRAME_FP (fr);
360
361       if (! single_inst)
362         {
363           find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
364           if (step_range_end == 0)
365             {
366               struct minimal_symbol *msymbol;
367
368               /* FIXME: This should be using containing_function_bounds or a
369                  cleaned-up version thereof, to deal with things like the
370                  end of the text segment.  */
371
372               msymbol = lookup_minimal_symbol_by_pc (stop_pc);
373               target_terminal_ours ();
374               printf_filtered ("Current function has no line number information.\n");
375               fflush (stdout);
376
377               if (msymbol == NULL || SYMBOL_NAME (msymbol + 1) == NULL)
378                 {
379                   /* If sigtramp is in the u area, check for it.  */
380 #if defined SIGTRAMP_START
381                   if (IN_SIGTRAMP (stop_pc, (char *)NULL))
382                     {
383                       step_range_start = SIGTRAMP_START;
384                       step_range_end = SIGTRAMP_END;
385                     }
386                   else
387 #endif
388                     error ("Cannot find bounds of current function.");
389                 }
390               else
391                 {
392                   step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
393                   step_range_end = SYMBOL_VALUE_ADDRESS (msymbol + 1);
394                 }
395
396               printf_filtered ("Single stepping until function exit.\n");
397               fflush (stdout);
398             }
399         }
400       else
401         {
402           /* Say we are stepping, but stop after one insn whatever it does.
403              Don't step through subroutine calls even to undebuggable
404              functions.  */
405           step_range_start = step_range_end = 1;
406           if (!skip_subroutines)
407             step_over_calls = 0;
408         }
409
410       if (skip_subroutines)
411         step_over_calls = 1;
412
413       step_multi = (count > 1);
414       proceed ((CORE_ADDR) -1, -1, 1);
415       if (! stop_step)
416         break;
417 #if defined (SHIFT_INST_REGS)
418       write_register (NNPC_REGNUM, read_register (NPC_REGNUM));
419       write_register (NPC_REGNUM, read_register (PC_REGNUM));
420 #endif
421     }
422
423   if (!single_inst || skip_subroutines)
424     do_cleanups(cleanups);
425 }
426 \f
427 /* Continue program at specified address.  */
428
429 static void
430 jump_command (arg, from_tty)
431      char *arg;
432      int from_tty;
433 {
434   register CORE_ADDR addr;
435   struct symtabs_and_lines sals;
436   struct symtab_and_line sal;
437   struct symbol *fn;
438   struct symbol *sfn;
439
440   ERROR_NO_INFERIOR;
441
442   if (!arg)
443     error_no_arg ("starting address");
444
445   sals = decode_line_spec_1 (arg, 1);
446   if (sals.nelts != 1)
447     {
448       error ("Unreasonable jump request");
449     }
450
451   sal = sals.sals[0];
452   free ((PTR)sals.sals);
453
454   if (sal.symtab == 0 && sal.pc == 0)
455     error ("No source file has been specified.");
456
457   resolve_sal_pc (&sal);                        /* May error out */
458
459   /* See if we are trying to jump to another function. */
460   fn = get_frame_function (get_current_frame ());
461   sfn = find_pc_function (sal.pc);
462   if (fn != NULL && sfn != fn)
463     {
464       if (!query ("Line %d is not in `%s'.  Jump anyway? ", sal.line,
465                   SYMBOL_SOURCE_NAME (fn)))
466         {
467           error ("Not confirmed.");
468           /* NOTREACHED */
469         }
470     }
471
472   addr = ADDR_BITS_SET (sal.pc);
473
474   if (from_tty)
475     printf_filtered ("Continuing at %s.\n", local_hex_string(addr));
476
477   clear_proceed_status ();
478   proceed (addr, 0, 0);
479 }
480
481 /* Continue program giving it specified signal.  */
482
483 static void
484 signal_command (signum_exp, from_tty)
485      char *signum_exp;
486      int from_tty;
487 {
488   register int signum;
489
490   dont_repeat ();               /* Too dangerous.  */
491   ERROR_NO_INFERIOR;
492
493   if (!signum_exp)
494     error_no_arg ("signal number");
495
496   signum = parse_and_eval_address (signum_exp);
497
498   if (from_tty)
499     printf_filtered ("Continuing with signal %d.\n", signum);
500
501   clear_proceed_status ();
502   proceed (stop_pc, signum, 0);
503 }
504
505 /* Execute a "stack dummy", a piece of code stored in the stack
506    by the debugger to be executed in the inferior.
507
508    To call: first, do PUSH_DUMMY_FRAME.
509    Then push the contents of the dummy.  It should end with a breakpoint insn.
510    Then call here, passing address at which to start the dummy.
511
512    The contents of all registers are saved before the dummy frame is popped
513    and copied into the buffer BUFFER.
514
515    The dummy's frame is automatically popped whenever that break is hit.
516    If that is the first time the program stops, run_stack_dummy
517    returns to its caller with that frame already gone.
518    Otherwise, the caller never gets returned to.  */
519
520 /* DEBUG HOOK:  4 => return instead of letting the stack dummy run.  */
521
522 static int stack_dummy_testing = 0;
523
524 void
525 run_stack_dummy (addr, buffer)
526      CORE_ADDR addr;
527      char buffer[REGISTER_BYTES];
528 {
529   /* Now proceed, having reached the desired place.  */
530   clear_proceed_status ();
531   if (stack_dummy_testing & 4)
532     {
533       POP_FRAME;
534       return;
535     }
536   proceed_to_finish = 1;        /* We want stop_registers, please... */
537   proceed (addr, 0, 0);
538
539   if (!stop_stack_dummy)
540     /* This used to say
541        "Cannot continue previously requested operation".  */
542     error ("\
543 The program being debugged stopped while in a function called from GDB.\n\
544 The expression which contained the function call has been discarded.");
545
546   /* On return, the stack dummy has been popped already.  */
547
548   memcpy (buffer, stop_registers, sizeof stop_registers);
549 }
550 \f
551 /* Proceed until we reach a different source line with pc greater than
552    our current one or exit the function.  We skip calls in both cases.
553
554    Note that eventually this command should probably be changed so
555    that only source lines are printed out when we hit the breakpoint
556    we set.  I'm going to postpone this until after a hopeful rewrite
557    of wait_for_inferior and the proceed status code. -- randy */
558
559 /* ARGSUSED */
560 static void
561 until_next_command (from_tty)
562      int from_tty;
563 {
564   FRAME frame;
565   CORE_ADDR pc;
566   struct symbol *func;
567   struct symtab_and_line sal;
568  
569   clear_proceed_status ();
570
571   frame = get_current_frame ();
572
573   /* Step until either exited from this function or greater
574      than the current line (if in symbolic section) or pc (if
575      not). */
576
577   pc = read_pc ();
578   func = find_pc_function (pc);
579   
580   if (!func)
581     {
582       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
583       
584       if (msymbol == NULL)
585         error ("Execution is not within a known function.");
586       
587       step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
588       step_range_end = pc;
589     }
590   else
591     {
592       sal = find_pc_line (pc, 0);
593       
594       step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
595       step_range_end = sal.end;
596     }
597   
598   step_over_calls = 1;
599   step_frame_address = FRAME_FP (frame);
600   
601   step_multi = 0;               /* Only one call to proceed */
602   
603   proceed ((CORE_ADDR) -1, -1, 1);
604 }
605
606 static void 
607 until_command (arg, from_tty)
608      char *arg;
609      int from_tty;
610 {
611   if (!target_has_execution)
612     error ("The program is not running.");
613   if (arg)
614     until_break_command (arg, from_tty);
615   else
616     until_next_command (from_tty);
617 }
618 \f
619 /* "finish": Set a temporary breakpoint at the place
620    the selected frame will return to, then continue.  */
621
622 static void
623 finish_command (arg, from_tty)
624      char *arg;
625      int from_tty;
626 {
627   struct symtab_and_line sal;
628   register FRAME frame;
629   struct frame_info *fi;
630   register struct symbol *function;
631   struct breakpoint *breakpoint;
632   struct cleanup *old_chain;
633
634   if (arg)
635     error ("The \"finish\" command does not take any arguments.");
636   if (!target_has_execution)
637     error ("The program is not running.");
638   if (selected_frame == NULL)
639     error ("No selected frame.");
640
641   frame = get_prev_frame (selected_frame);
642   if (frame == 0)
643     error ("\"finish\" not meaningful in the outermost frame.");
644
645   clear_proceed_status ();
646
647   fi = get_frame_info (frame);
648   sal = find_pc_line (fi->pc, 0);
649   sal.pc = fi->pc;
650
651   breakpoint = set_momentary_breakpoint (sal, frame, bp_finish);
652
653   old_chain = make_cleanup(delete_breakpoint, breakpoint);
654
655   /* Find the function we will return from.  */
656
657   fi = get_frame_info (selected_frame);
658   function = find_pc_function (fi->pc);
659
660   /* Print info on the selected frame, including level number
661      but not source.  */
662   if (from_tty)
663     {
664       printf_filtered ("Run till exit from ");
665       print_stack_frame (selected_frame, selected_frame_level, 0);
666     }
667
668   proceed_to_finish = 1;                /* We want stop_registers, please... */
669   proceed ((CORE_ADDR) -1, -1, 0);
670
671   /* Did we stop at our breakpoint? */
672   if (bpstat_find_breakpoint(stop_bpstat, breakpoint) != NULL
673       && function != 0)
674     {
675       struct type *value_type;
676       register value val;
677       CORE_ADDR funcaddr;
678
679       value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
680       if (!value_type)
681         fatal ("internal: finish_command: function has no target type");
682       
683       if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
684         return;
685
686       funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
687
688       val = value_being_returned (value_type, stop_registers,
689               using_struct_return (value_of_variable (function),
690                                    funcaddr,
691                                    value_type,
692                 BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
693
694       printf_filtered ("Value returned is $%d = ", record_latest_value (val));
695       value_print (val, stdout, 0, Val_no_prettyprint);
696       printf_filtered ("\n");
697     }
698   do_cleanups(old_chain);
699 }
700 \f
701 /* ARGSUSED */
702 static void
703 program_info (args, from_tty)
704     char *args;
705     int from_tty;
706 {
707   bpstat bs = stop_bpstat;
708   int num = bpstat_num (&bs);
709   
710   if (!target_has_execution)
711     {
712       printf_filtered ("The program being debugged is not being run.\n");
713       return;
714     }
715
716   target_files_info ();
717   printf_filtered ("Program stopped at %s.\n", local_hex_string(stop_pc));
718   if (stop_step)
719     printf_filtered ("It stopped after being stepped.\n");
720   else if (num != 0)
721     {
722       /* There may be several breakpoints in the same place, so this
723          isn't as strange as it seems.  */
724       while (num != 0)
725         {
726           if (num < 0)
727             printf_filtered ("It stopped at a breakpoint that has since been deleted.\n");
728           else
729             printf_filtered ("It stopped at breakpoint %d.\n", num);
730           num = bpstat_num (&bs);
731         }
732     }
733   else if (stop_signal) {
734 #ifdef PRINT_RANDOM_SIGNAL
735     PRINT_RANDOM_SIGNAL (stop_signal);
736 #else
737     printf_filtered ("It stopped with signal %d (%s).\n",
738                      stop_signal, safe_strsignal (stop_signal));
739 #endif
740   }
741
742   if (!from_tty)
743     printf_filtered ("Type \"info stack\" or \"info registers\" for more information.\n");
744 }
745 \f
746 static void
747 environment_info (var, from_tty)
748      char *var;
749      int from_tty;
750 {
751   if (var)
752     {
753       register char *val = get_in_environ (inferior_environ, var);
754       if (val)
755         {
756           puts_filtered (var);
757           puts_filtered (" = ");
758           puts_filtered (val);
759           puts_filtered ("\n");
760         }
761       else
762         {
763           puts_filtered ("Environment variable \"");
764           puts_filtered (var);
765           puts_filtered ("\" not defined.\n");
766         }
767     }
768   else
769     {
770       register char **vector = environ_vector (inferior_environ);
771       while (*vector)
772         {
773           puts_filtered (*vector++);
774           puts_filtered ("\n");
775         }
776     }
777 }
778
779 static void
780 set_environment_command (arg, from_tty)
781      char *arg;
782      int from_tty;
783 {
784   register char *p, *val, *var;
785   int nullset = 0;
786
787   if (arg == 0)
788     error_no_arg ("environment variable and value");
789
790   /* Find seperation between variable name and value */
791   p = (char *) strchr (arg, '=');
792   val = (char *) strchr (arg, ' ');
793
794   if (p != 0 && val != 0)
795     {
796       /* We have both a space and an equals.  If the space is before the
797          equals, walk forward over the spaces til we see a nonspace 
798          (possibly the equals). */
799       if (p > val)
800         while (*val == ' ')
801           val++;
802
803       /* Now if the = is after the char following the spaces,
804          take the char following the spaces.  */
805       if (p > val)
806         p = val - 1;
807     }
808   else if (val != 0 && p == 0)
809     p = val;
810
811   if (p == arg)
812     error_no_arg ("environment variable to set");
813
814   if (p == 0 || p[1] == 0)
815     {
816       nullset = 1;
817       if (p == 0)
818         p = arg + strlen (arg); /* So that savestring below will work */
819     }
820   else
821     {
822       /* Not setting variable value to null */
823       val = p + 1;
824       while (*val == ' ' || *val == '\t')
825         val++;
826     }
827
828   while (p != arg && (p[-1] == ' ' || p[-1] == '\t')) p--;
829
830   var = savestring (arg, p - arg);
831   if (nullset)
832     {
833       printf_filtered ("Setting environment variable \"%s\" to null value.\n", var);
834       set_in_environ (inferior_environ, var, "");
835     }
836   else
837     set_in_environ (inferior_environ, var, val);
838   free (var);
839 }
840
841 static void
842 unset_environment_command (var, from_tty)
843      char *var;
844      int from_tty;
845 {
846   if (var == 0)
847     {
848       /* If there is no argument, delete all environment variables.
849          Ask for confirmation if reading from the terminal.  */
850       if (!from_tty || query ("Delete all environment variables? "))
851         {
852           free_environ (inferior_environ);
853           inferior_environ = make_environ ();
854         }
855     }
856   else
857     unset_in_environ (inferior_environ, var);
858 }
859
860 /* Handle the execution path (PATH variable) */
861
862 static const char path_var_name[] = "PATH";
863
864 /* ARGSUSED */
865 static void
866 path_info (args, from_tty)
867      char *args;
868      int from_tty;
869 {
870   puts_filtered ("Executable and object file path: ");
871   puts_filtered (get_in_environ (inferior_environ, path_var_name));
872   puts_filtered ("\n");
873 }
874
875 /* Add zero or more directories to the front of the execution path.  */
876
877 static void
878 path_command (dirname, from_tty)
879      char *dirname;
880      int from_tty;
881 {
882   char *exec_path;
883
884   dont_repeat ();
885   exec_path = strsave (get_in_environ (inferior_environ, path_var_name));
886   mod_path (dirname, &exec_path);
887   set_in_environ (inferior_environ, path_var_name, exec_path);
888   free (exec_path);
889   if (from_tty)
890     path_info ((char *)NULL, from_tty);
891 }
892 \f
893 /* XXX - This routine is getting awfully cluttered with #if's.  It's probably
894    time to turn this into target_read_pc.  Ditto for write_pc.  */
895
896 CORE_ADDR
897 read_pc ()
898 {
899 #ifdef GDB_TARGET_IS_HPPA
900   int flags = read_register(FLAGS_REGNUM);
901
902   if (flags & 2)
903     return read_register(31) & ~0x3; /* User PC is here when in sys call */
904   return read_register (PC_REGNUM) & ~0x3;
905 #else
906 #ifdef GDB_TARGET_IS_H8500
907   return (read_register (SEG_C_REGNUM) << 16) | read_register (PC_REGNUM);
908 #else
909   return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
910 #endif
911 #endif
912 }
913
914 void
915 write_pc (val)
916      CORE_ADDR val;
917 {
918   write_register (PC_REGNUM, (long) val);
919 #ifdef NPC_REGNUM
920   write_register (NPC_REGNUM, (long) val + 4);
921 #ifdef NNPC_REGNUM
922   write_register (NNPC_REGNUM, (long) val + 8);
923 #endif
924 #endif
925 #ifdef GDB_TARGET_IS_H8500
926   write_register (SEG_C_REGNUM, val >> 16);
927 #endif
928   pc_changed = 0;
929 }
930
931 const char * const reg_names[] = REGISTER_NAMES;
932
933 /* Print out the machine register regnum. If regnum is -1,
934    print all registers (fpregs == 1) or all non-float registers
935    (fpregs == 0).
936
937    For most machines, having all_registers_info() print the
938    register(s) one per line is good enough. If a different format
939    is required, (eg, for MIPS or Pyramid 90x, which both have
940    lots of regs), or there is an existing convention for showing
941    all the registers, define the macro DO_REGISTERS_INFO(regnum, fp)
942    to provide that format.  */  
943
944 #if !defined (DO_REGISTERS_INFO)
945 #define DO_REGISTERS_INFO(regnum, fp) do_registers_info(regnum, fp)
946 static void
947 do_registers_info (regnum, fpregs)
948      int regnum;
949      int fpregs;
950 {
951   register int i;
952
953   for (i = 0; i < NUM_REGS; i++)
954     {
955       char raw_buffer[MAX_REGISTER_RAW_SIZE];
956       char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
957
958       /* Decide between printing all regs, nonfloat regs, or specific reg.  */
959       if (regnum == -1) {
960         if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
961           continue;
962       } else {
963         if (i != regnum)
964           continue;
965       }
966
967       fputs_filtered (reg_names[i], stdout);
968       print_spaces_filtered (15 - strlen (reg_names[i]), stdout);
969
970       /* Get the data in raw format, then convert also to virtual format.  */
971       if (read_relative_register_raw_bytes (i, raw_buffer))
972         {
973           printf_filtered ("Invalid register contents\n");
974           continue;
975         }
976       
977       REGISTER_CONVERT_TO_VIRTUAL (i, raw_buffer, virtual_buffer);
978
979       /* If virtual format is floating, print it that way, and in raw hex.  */
980       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT
981           && ! INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
982         {
983           register int j;
984
985           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0,
986                      stdout, 0, 1, 0, Val_pretty_default);
987
988           printf_filtered ("\t(raw 0x");
989           for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
990             printf_filtered ("%02x", (unsigned char)raw_buffer[j]);
991           printf_filtered (")");
992         }
993
994 /* FIXME!  val_print probably can handle all of these cases now...  */
995
996       /* Else if virtual format is too long for printf,
997          print in hex a byte at a time.  */
998       else if (REGISTER_VIRTUAL_SIZE (i) > sizeof (long))
999         {
1000           register int j;
1001           printf_filtered ("0x");
1002           for (j = 0; j < REGISTER_VIRTUAL_SIZE (i); j++)
1003             printf_filtered ("%02x", (unsigned char)virtual_buffer[j]);
1004         }
1005       /* Else print as integer in hex and in decimal.  */
1006       else
1007         {
1008           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
1009                      stdout, 'x', 1, 0, Val_pretty_default);
1010           printf_filtered ("\t");
1011           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
1012                      stdout,   0, 1, 0, Val_pretty_default);
1013         }
1014
1015       /* The SPARC wants to print even-numbered float regs as doubles
1016          in addition to printing them as floats.  */
1017 #ifdef PRINT_REGISTER_HOOK
1018       PRINT_REGISTER_HOOK (i);
1019 #endif
1020
1021       printf_filtered ("\n");
1022     }
1023 }
1024 #endif /* no DO_REGISTERS_INFO.  */
1025
1026 static void
1027 registers_info (addr_exp, fpregs)
1028      char *addr_exp;
1029      int fpregs;
1030 {
1031   int regnum;
1032   register char *end;
1033
1034   if (!target_has_registers)
1035     error ("The program has no registers now.");
1036
1037   if (!addr_exp)
1038     {
1039       DO_REGISTERS_INFO(-1, fpregs);
1040       return;
1041     }
1042
1043   do
1044     {      
1045       if (addr_exp[0] == '$')
1046         addr_exp++;
1047       end = addr_exp;
1048       while (*end != '\0' && *end != ' ' && *end != '\t')
1049         ++end;
1050       for (regnum = 0; regnum < NUM_REGS; regnum++)
1051         if (!strncmp (addr_exp, reg_names[regnum], end - addr_exp)
1052             && strlen (reg_names[regnum]) == end - addr_exp)
1053           goto found;
1054       if (*addr_exp >= '0' && *addr_exp <= '9')
1055         regnum = atoi (addr_exp);               /* Take a number */
1056       if (regnum >= NUM_REGS)           /* Bad name, or bad number */
1057         error ("%.*s: invalid register", end - addr_exp, addr_exp);
1058
1059 found:
1060       DO_REGISTERS_INFO(regnum, fpregs);
1061
1062       addr_exp = end;
1063       while (*addr_exp == ' ' || *addr_exp == '\t')
1064         ++addr_exp;
1065     } while (*addr_exp != '\0');
1066 }
1067
1068 static void
1069 all_registers_info (addr_exp, from_tty)
1070      char *addr_exp;
1071      int from_tty;
1072 {
1073   registers_info (addr_exp, 1);
1074 }
1075
1076 static void
1077 nofp_registers_info (addr_exp, from_tty)
1078      char *addr_exp;
1079      int from_tty;
1080 {
1081   registers_info (addr_exp, 0);
1082 }
1083 \f
1084 /*
1085  * TODO:
1086  * Should save/restore the tty state since it might be that the
1087  * program to be debugged was started on this tty and it wants
1088  * the tty in some state other than what we want.  If it's running
1089  * on another terminal or without a terminal, then saving and
1090  * restoring the tty state is a harmless no-op.
1091  * This only needs to be done if we are attaching to a process.
1092  */
1093
1094 /*
1095    attach_command --
1096    takes a program started up outside of gdb and ``attaches'' to it.
1097    This stops it cold in its tracks and allows us to start debugging it.
1098    and wait for the trace-trap that results from attaching.  */
1099
1100 void
1101 attach_command (args, from_tty)
1102      char *args;
1103      int from_tty;
1104 {
1105   dont_repeat ();                       /* Not for the faint of heart */
1106
1107   if (target_has_execution)
1108     {
1109       if (query ("A program is being debugged already.  Kill it? "))
1110         target_kill ();
1111       else
1112         error ("Not killed.");
1113     }
1114
1115   target_attach (args, from_tty);
1116
1117   /* Set up the "saved terminal modes" of the inferior
1118      based on what modes we are starting it with.  */
1119   target_terminal_init ();
1120
1121   /* Install inferior's terminal modes.  */
1122   target_terminal_inferior ();
1123
1124   /* Set up execution context to know that we should return from
1125      wait_for_inferior as soon as the target reports a stop.  */
1126   init_wait_for_inferior ();
1127   clear_proceed_status ();
1128   stop_soon_quietly = 1;
1129
1130   wait_for_inferior ();
1131
1132 #ifdef SOLIB_ADD
1133   /* Add shared library symbols from the newly attached process, if any.  */
1134   SOLIB_ADD ((char *)0, from_tty, (struct target_ops *)0);
1135 #endif
1136
1137   normal_stop ();
1138 }
1139
1140 /*
1141  * detach_command --
1142  * takes a program previously attached to and detaches it.
1143  * The program resumes execution and will no longer stop
1144  * on signals, etc.  We better not have left any breakpoints
1145  * in the program or it'll die when it hits one.  For this
1146  * to work, it may be necessary for the process to have been
1147  * previously attached.  It *might* work if the program was
1148  * started via the normal ptrace (PTRACE_TRACEME).
1149  */
1150
1151 static void
1152 detach_command (args, from_tty)
1153      char *args;
1154      int from_tty;
1155 {
1156   dont_repeat ();                       /* Not for the faint of heart */
1157   target_detach (args, from_tty);
1158 }
1159
1160 /* ARGSUSED */
1161 static void
1162 float_info (addr_exp, from_tty)
1163      char *addr_exp;
1164      int from_tty;
1165 {
1166 #ifdef FLOAT_INFO
1167         FLOAT_INFO;
1168 #else
1169         printf_filtered ("No floating point info available for this processor.\n");
1170 #endif
1171 }
1172 \f
1173 /* ARGSUSED */
1174 static void
1175 unset_command (args, from_tty)
1176      char *args;
1177      int from_tty;
1178 {
1179   printf_filtered ("\"unset\" must be followed by the name of an unset subcommand.\n");
1180   help_list (unsetlist, "unset ", -1, stdout);
1181 }
1182
1183 void
1184 _initialize_infcmd ()
1185 {
1186   struct cmd_list_element *c;
1187   
1188   add_com ("tty", class_run, tty_command,
1189            "Set terminal for future runs of program being debugged.");
1190
1191   add_show_from_set
1192     (add_set_cmd ("args", class_run, var_string_noescape, (char *)&inferior_args,
1193                   
1194 "Set arguments to give program being debugged when it is started.\n\
1195 Follow this command with any number of args, to be passed to the program.",
1196                   &setlist),
1197      &showlist);
1198
1199   c = add_cmd
1200     ("environment", no_class, environment_info,
1201      "The environment to give the program, or one variable's value.\n\
1202 With an argument VAR, prints the value of environment variable VAR to\n\
1203 give the program being debugged.  With no arguments, prints the entire\n\
1204 environment to be given to the program.", &showlist);
1205   c->completer = noop_completer;
1206
1207   add_prefix_cmd ("unset", no_class, unset_command,
1208                   "Complement to certain \"set\" commands",
1209                   &unsetlist, "unset ", 0, &cmdlist);
1210   
1211   c = add_cmd ("environment", class_run, unset_environment_command,
1212               "Cancel environment variable VAR for the program.\n\
1213 This does not affect the program until the next \"run\" command.",
1214            &unsetlist);
1215   c->completer = noop_completer;
1216
1217   c = add_cmd ("environment", class_run, set_environment_command,
1218                "Set environment variable value to give the program.\n\
1219 Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
1220 VALUES of environment variables are uninterpreted strings.\n\
1221 This does not affect the program until the next \"run\" command.",
1222            &setlist);
1223   c->completer = noop_completer;
1224  
1225   add_com ("path", class_files, path_command,
1226        "Add directory DIR(s) to beginning of search path for object files.\n\
1227 $cwd in the path means the current working directory.\n\
1228 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1229 directories, separated by colons.  These directories are searched to find\n\
1230 fully linked executable files and separately compiled object files as needed.");
1231
1232   c = add_cmd ("paths", no_class, path_info,
1233             "Current search path for finding object files.\n\
1234 $cwd in the path means the current working directory.\n\
1235 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1236 directories, separated by colons.  These directories are searched to find\n\
1237 fully linked executable files and separately compiled object files as needed.", &showlist);
1238   c->completer = noop_completer;
1239
1240  add_com ("attach", class_run, attach_command,
1241            "Attach to a process or file outside of GDB.\n\
1242 This command attaches to another target, of the same type as your last\n\
1243 `target' command (`info files' will show your target stack).\n\
1244 The command may take as argument a process id or a device file.\n\
1245 For a process id, you must have permission to send the process a signal,\n\
1246 and it must have the same effective uid as the debugger.\n\
1247 When using \"attach\", you should use the \"file\" command to specify\n\
1248 the program running in the process, and to load its symbol table.");
1249
1250   add_com ("detach", class_run, detach_command,
1251            "Detach a process or file previously attached.\n\
1252 If a process, it is no longer traced, and it continues its execution.  If you\n\
1253 were debugging a file, the file is closed and gdb no longer accesses it.");
1254
1255   add_com ("signal", class_run, signal_command,
1256            "Continue program giving it signal number SIGNUMBER.");
1257
1258   add_com ("stepi", class_run, stepi_command,
1259            "Step one instruction exactly.\n\
1260 Argument N means do this N times (or till program stops for another reason).");
1261   add_com_alias ("si", "stepi", class_alias, 0);
1262
1263   add_com ("nexti", class_run, nexti_command,
1264            "Step one instruction, but proceed through subroutine calls.\n\
1265 Argument N means do this N times (or till program stops for another reason).");
1266   add_com_alias ("ni", "nexti", class_alias, 0);
1267
1268   add_com ("finish", class_run, finish_command,
1269            "Execute until selected stack frame returns.\n\
1270 Upon return, the value returned is printed and put in the value history.");
1271
1272   add_com ("next", class_run, next_command,
1273            "Step program, proceeding through subroutine calls.\n\
1274 Like the \"step\" command as long as subroutine calls do not happen;\n\
1275 when they do, the call is treated as one instruction.\n\
1276 Argument N means do this N times (or till program stops for another reason).");
1277   add_com_alias ("n", "next", class_run, 1);
1278
1279   add_com ("step", class_run, step_command,
1280            "Step program until it reaches a different source line.\n\
1281 Argument N means do this N times (or till program stops for another reason).");
1282   add_com_alias ("s", "step", class_run, 1);
1283
1284   add_com ("until", class_run, until_command,
1285            "Execute until the program reaches a source line greater than the current\n\
1286 or a specified line or address or function (same args as break command).\n\
1287 Execution will also stop upon exit from the current stack frame.");
1288   add_com_alias ("u", "until", class_run, 1);
1289   
1290   add_com ("jump", class_run, jump_command,
1291            "Continue program being debugged at specified line or address.\n\
1292 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1293 for an address to start at.");
1294
1295   add_com ("continue", class_run, continue_command,
1296            "Continue program being debugged, after signal or breakpoint.\n\
1297 If proceeding from breakpoint, a number N may be used as an argument:\n\
1298 then the same breakpoint won't break until the Nth time it is reached.");
1299   add_com_alias ("c", "cont", class_run, 1);
1300   add_com_alias ("fg", "cont", class_run, 1);
1301
1302   add_com ("run", class_run, run_command,
1303            "Start debugged program.  You may specify arguments to give it.\n\
1304 Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
1305 Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
1306 With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
1307 To cancel previous arguments and run with no arguments,\n\
1308 use \"set args\" without arguments.");
1309   add_com_alias ("r", "run", class_run, 1);
1310
1311   add_info ("registers", nofp_registers_info,
1312     "List of integer registers and their contents, for selected stack frame.\n\
1313 Register name as argument means describe only that register.");
1314
1315   add_info ("all-registers", all_registers_info,
1316 "List of all registers and their contents, for selected stack frame.\n\
1317 Register name as argument means describe only that register.");
1318
1319   add_info ("program", program_info,
1320             "Execution status of the program.");
1321
1322   add_info ("float", float_info,
1323             "Print the status of the floating point unit\n");
1324
1325   inferior_args = savestring ("", 1);   /* Initially no args */
1326   inferior_environ = make_environ ();
1327   init_environ (inferior_environ);
1328 }
This page took 0.096136 seconds and 4 git commands to generate.