]> Git Repo - binutils.git/blob - gdb/infcmd.c
*** empty log message ***
[binutils.git] / gdb / infcmd.c
1 /* Memory-access and commands for inferior process, for GDB.
2    Copyright (C) 1986, 1987, 1988, 1989 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 GDB 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 1, or (at your option)
9 any later version.
10
11 GDB 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 GDB; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20 #include <stdio.h>
21 #include <signal.h>
22 #include <sys/param.h>
23 #include <string.h>
24 #include "defs.h"
25 #include "param.h"
26 #include "symtab.h"
27 #include "frame.h"
28 #include "inferior.h"
29 #include "environ.h"
30 #include "value.h"
31 #include "gdbcmd.h"
32 #include "gdbcore.h"
33 #include "target.h"
34
35 extern char *sys_siglist[];
36
37 extern void until_break_command ();     /* breakpoint.c */
38
39 #define ERROR_NO_INFERIOR \
40    if (!target_has_execution) error ("The program is not being run.");
41
42 /* String containing arguments to give to the program, separated by spaces.
43    Empty string (pointer to '\0') means no args.  */
44
45 static char *inferior_args;
46
47 /* File name for default use for standard in/out in the inferior.  */
48
49 char *inferior_io_terminal;
50
51 /* Pid of our debugged inferior, or 0 if no inferior now.
52    Since various parts of infrun.c test this to see whether there is a program
53    being debugged it should be nonzero (currently 3 is used) for remote
54    debugging.  */
55
56 int inferior_pid;
57
58 /* Last signal that the inferior received (why it stopped).  */
59
60 int stop_signal;
61
62 /* Address at which inferior stopped.  */
63
64 CORE_ADDR stop_pc;
65
66 /* Stack frame when program stopped.  */
67
68 FRAME_ADDR stop_frame_address;
69
70 /* Chain containing status of breakpoint(s) that we have stopped at.  */
71
72 bpstat stop_bpstat;
73
74 /* Flag indicating that a command has proceeded the inferior past the
75    current breakpoint.  */
76
77 int breakpoint_proceeded;
78
79 /* Nonzero if stopped due to a step command.  */
80
81 int stop_step;
82
83 /* Nonzero if stopped due to completion of a stack dummy routine.  */
84
85 int stop_stack_dummy;
86
87 /* Nonzero if stopped due to a random (unexpected) signal in inferior
88    process.  */
89
90 int stopped_by_random_signal;
91
92 /* Range to single step within.
93    If this is nonzero, respond to a single-step signal
94    by continuing to step if the pc is in this range.  */
95
96 CORE_ADDR step_range_start; /* Inclusive */
97 CORE_ADDR step_range_end; /* Exclusive */
98
99 /* Stack frame address as of when stepping command was issued.
100    This is how we know when we step into a subroutine call,
101    and how to set the frame for the breakpoint used to step out.  */
102
103 FRAME_ADDR step_frame_address;
104
105 /* 1 means step over all subroutine calls.
106    -1 means step over calls to undebuggable functions.  */
107
108 int step_over_calls;
109
110 /* If stepping, nonzero means step count is > 1
111    so don't print frame next time inferior stops
112    if it stops due to stepping.  */
113
114 int step_multi;
115
116 /* Environment to use for running inferior,
117    in format described in environ.h.  */
118
119 struct environ *inferior_environ;
120
121 CORE_ADDR read_pc ();
122 void breakpoint_clear_ignore_counts ();
123
124 \f
125 /* ARGSUSED */
126 void
127 tty_command (file, from_tty)
128      char *file;
129      int from_tty;
130 {
131   if (file == 0)
132     error_no_arg ("terminal name for running target process");
133
134   inferior_io_terminal = savestring (file, strlen (file));
135 }
136
137 static void
138 run_command (args, from_tty)
139      char *args;
140      int from_tty;
141 {
142   char *exec_file;
143
144   dont_repeat ();
145
146   if (inferior_pid)
147     {
148       if (
149           !query ("The program being debugged has been started already.\n\
150 Start it from the beginning? "))
151         error ("Program not restarted.");
152       target_kill ((char *)0, 0);
153     }
154
155   exec_file = (char *) get_exec_file (0);
156
157   /* The exec file is re-read every time we do an inferior_died, so
158      we just have to worry about the symbol file.  */
159   reread_symbols ();
160
161   if (args)
162     {
163       char *cmd;
164       cmd = concat ("set args ", args, "");
165       make_cleanup (free, cmd);
166       execute_command (cmd, from_tty);
167     }
168
169   if (from_tty)
170     {
171       printf ("Starting program: %s %s\n",
172               exec_file? exec_file: "", inferior_args);
173       fflush (stdout);
174     }
175
176   target_create_inferior (exec_file, inferior_args,
177                           environ_vector (inferior_environ));
178 }
179 \f
180 void
181 continue_command (proc_count_exp, from_tty)
182      char *proc_count_exp;
183      int from_tty;
184 {
185   ERROR_NO_INFERIOR;
186
187   /* If have argument, set proceed count of breakpoint we stopped at.  */
188
189   if (proc_count_exp != NULL)
190     {
191       bpstat bs = stop_bpstat;
192       int num = bpstat_num (&bs);
193       if (num == 0 && from_tty)
194         {
195           printf_filtered
196             ("Not stopped at any breakpoint; argument ignored.\n");
197         }
198       while (num != 0)
199         {
200           set_ignore_count (num,
201                             parse_and_eval_address (proc_count_exp) - 1,
202                             from_tty);
203           /* set_ignore_count prints a message ending with a period.
204              So print two spaces before "Continuing.".  */
205           if (from_tty)
206             printf ("  ");
207           num = bpstat_num (&bs);
208         }
209     }
210
211   if (from_tty)
212     printf ("Continuing.\n");
213
214   clear_proceed_status ();
215
216   proceed ((CORE_ADDR) -1, -1, 0);
217 }
218 \f
219 /* Step until outside of current statement.  */
220 static void step_1 ();
221
222 /* ARGSUSED */
223 static void
224 step_command (count_string, from_tty)
225      char * count_string;
226      int from_tty;
227 {
228   step_1 (0, 0, count_string);
229 }
230
231 /* Likewise, but skip over subroutine calls as if single instructions.  */
232
233 /* ARGSUSED */
234 static void
235 next_command (count_string, from_tty)
236      char * count_string;
237      int from_tty;
238 {
239   step_1 (1, 0, count_string);
240 }
241
242 /* Likewise, but step only one instruction.  */
243
244 /* ARGSUSED */
245 static void
246 stepi_command (count_string, from_tty)
247      char * count_string;
248      int from_tty;
249 {
250   step_1 (0, 1, count_string);
251 }
252
253 /* ARGSUSED */
254 static void
255 nexti_command (count_string, from_tty)
256      char * count_string;
257      int from_tty;
258 {
259   step_1 (1, 1, count_string);
260 }
261
262 static void
263 step_1 (skip_subroutines, single_inst, count_string)
264      int skip_subroutines;
265      int single_inst;
266      char *count_string;
267 {
268   register int count = 1;
269   FRAME fr;
270
271   ERROR_NO_INFERIOR;
272   count = count_string ? parse_and_eval_address (count_string) : 1;
273
274   for (; count > 0; count--)
275     {
276       clear_proceed_status ();
277
278
279       fr = get_current_frame ();
280       if (!fr)                          /* Avoid coredump here.  Why tho? */
281         error ("No current frame");
282       step_frame_address = FRAME_FP (fr);
283
284       if (! single_inst)
285         {
286           find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
287           if (step_range_end == 0)
288             {
289               int misc;
290
291               misc = find_pc_misc_function (stop_pc);
292               target_terminal_ours ();
293               printf ("Current function has no line number information.\n");
294               fflush (stdout);
295
296               /* No info or after _etext ("Can't happen") */
297               if (misc == -1 || misc == misc_function_count - 1)
298                 error ("No data available on pc function.");
299
300               printf ("Single stepping until function exit.\n");
301               fflush (stdout);
302
303               step_range_start = misc_function_vector[misc].address;
304               step_range_end = misc_function_vector[misc + 1].address;
305             }
306         }
307       else
308         {
309           /* Say we are stepping, but stop after one insn whatever it does.
310              Don't step through subroutine calls even to undebuggable
311              functions.  */
312           step_range_start = step_range_end = 1;
313           if (!skip_subroutines)
314             step_over_calls = 0;
315         }
316
317       if (skip_subroutines)
318         step_over_calls = 1;
319
320       step_multi = (count > 1);
321       proceed ((CORE_ADDR) -1, -1, 1);
322       if (! stop_step)
323         break;
324 #if defined (SHIFT_INST_REGS)
325       write_register (NNPC_REGNUM, read_register (NPC_REGNUM));
326       write_register (NPC_REGNUM, read_register (PC_REGNUM));
327 #endif
328     }
329 }
330 \f
331 /* Continue program at specified address.  */
332
333 static void
334 jump_command (arg, from_tty)
335      char *arg;
336      int from_tty;
337 {
338   register CORE_ADDR addr;
339   struct symtabs_and_lines sals;
340   struct symtab_and_line sal;
341
342   ERROR_NO_INFERIOR;
343
344   if (!arg)
345     error_no_arg ("starting address");
346
347   sals = decode_line_spec_1 (arg, 1);
348   if (sals.nelts != 1)
349     {
350       error ("Unreasonable jump request");
351     }
352
353   sal = sals.sals[0];
354   free (sals.sals);
355
356   if (sal.symtab == 0 && sal.pc == 0)
357     error ("No source file has been specified.");
358
359   if (sal.pc == 0)
360     sal.pc = find_line_pc (sal.symtab, sal.line);
361
362   {
363     struct symbol *fn = get_frame_function (get_current_frame ());
364     struct symbol *sfn = find_pc_function (sal.pc);
365     if (fn != 0 && sfn != fn
366         && ! query ("Line %d is not in `%s'.  Jump anyway? ",
367                     sal.line, SYMBOL_NAME (fn)))
368       error ("Not confirmed.");
369   }
370
371   if (sal.pc == 0)
372     error ("No line %d in file \"%s\".", sal.line, sal.symtab->filename);
373
374   addr = ADDR_BITS_SET (sal.pc);
375
376   if (from_tty)
377     printf ("Continuing at 0x%x.\n", addr);
378
379   clear_proceed_status ();
380   proceed (addr, 0, 0);
381 }
382
383 /* Continue program giving it specified signal.  */
384
385 static void
386 signal_command (signum_exp, from_tty)
387      char *signum_exp;
388      int from_tty;
389 {
390   register int signum;
391
392   dont_repeat ();               /* Too dangerous.  */
393   ERROR_NO_INFERIOR;
394
395   if (!signum_exp)
396     error_no_arg ("signal number");
397
398   signum = parse_and_eval_address (signum_exp);
399
400   if (from_tty)
401     printf ("Continuing with signal %d.\n", signum);
402
403   clear_proceed_status ();
404   proceed (stop_pc, signum, 0);
405 }
406
407 /* Execute a "stack dummy", a piece of code stored in the stack
408    by the debugger to be executed in the inferior.
409
410    To call: first, do PUSH_DUMMY_FRAME.
411    Then push the contents of the dummy.  It should end with a breakpoint insn.
412    Then call here, passing address at which to start the dummy.
413
414    The contents of all registers are saved before the dummy frame is popped
415    and copied into the buffer BUFFER.
416
417    The dummy's frame is automatically popped whenever that break is hit.
418    If that is the first time the program stops, run_stack_dummy
419    returns to its caller with that frame already gone.
420    Otherwise, the caller never gets returned to.  */
421
422 /* 4 => return instead of letting the stack dummy run.  */
423
424 static int stack_dummy_testing = 0;
425
426 void
427 run_stack_dummy (addr, buffer)
428      CORE_ADDR addr;
429      char buffer[REGISTER_BYTES];
430 {
431   /* Now proceed, having reached the desired place.  */
432   clear_proceed_status ();
433   if (stack_dummy_testing & 4)
434     {
435       POP_FRAME;
436       return;
437     }
438   proceed_to_finish = 1;        /* We want stop_registers, please... */
439   proceed (addr, 0, 0);
440
441   if (!stop_stack_dummy)
442     /* This used to say
443        "Cannot continue previously requested operation".  */
444     error ("\
445 The program being debugged stopped while in a function called from GDB.\n\
446 The expression which contained the function call has been discarded.");
447
448   /* On return, the stack dummy has been popped already.  */
449
450   bcopy (stop_registers, buffer, sizeof stop_registers);
451 }
452 \f
453 /* Proceed until we reach a different source line with pc greater than
454    our current one or exit the function.  We skip calls in both cases.
455
456    Note that eventually this command should probably be changed so
457    that only source lines are printed out when we hit the breakpoint
458    we set.  I'm going to postpone this until after a hopeful rewrite
459    of wait_for_inferior and the proceed status code. -- randy */
460
461 /* ARGSUSED */
462 void
463 until_next_command (from_tty)
464      int from_tty;
465 {
466   FRAME frame;
467   CORE_ADDR pc;
468   struct symbol *func;
469   struct symtab_and_line sal;
470  
471   clear_proceed_status ();
472
473   frame = get_current_frame ();
474
475   /* Step until either exited from this function or greater
476      than the current line (if in symbolic section) or pc (if
477      not). */
478
479   pc = read_pc ();
480   func = find_pc_function (pc);
481   
482   if (!func)
483     {
484       int misc_func = find_pc_misc_function (pc);
485       
486       if (misc_func != -1)
487         error ("Execution is not within a known function.");
488       
489       step_range_start = misc_function_vector[misc_func].address;
490       step_range_end = pc;
491     }
492   else
493     {
494       sal = find_pc_line (pc, 0);
495       
496       step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
497       step_range_end = sal.end;
498     }
499   
500   step_over_calls = 1;
501   step_frame_address = FRAME_FP (frame);
502   
503   step_multi = 0;               /* Only one call to proceed */
504   
505   proceed ((CORE_ADDR) -1, -1, 1);
506 }
507
508 void 
509 until_command (arg, from_tty)
510      char *arg;
511      int from_tty;
512 {
513   if (!target_has_execution)
514     error ("The program is not running.");
515   if (arg)
516     until_break_command (arg, from_tty);
517   else
518     until_next_command (from_tty);
519 }
520 \f
521 /* "finish": Set a temporary breakpoint at the place
522    the selected frame will return to, then continue.  */
523
524 static void
525 finish_command (arg, from_tty)
526      char *arg;
527      int from_tty;
528 {
529   struct symtab_and_line sal;
530   register FRAME frame;
531   struct frame_info *fi;
532   register struct symbol *function;
533
534   if (arg)
535     error ("The \"finish\" command does not take any arguments.");
536   if (!target_has_execution)
537     error ("The program is not running.");
538   if (selected_frame == NULL)
539     error ("No selected frame.");
540
541   frame = get_prev_frame (selected_frame);
542   if (frame == 0)
543     error ("\"finish\" not meaningful in the outermost frame.");
544
545   clear_proceed_status ();
546
547   fi = get_frame_info (frame);
548   sal = find_pc_line (fi->pc, 0);
549   sal.pc = fi->pc;
550   set_momentary_breakpoint (sal, frame);
551
552   /* Find the function we will return from.  */
553
554   fi = get_frame_info (selected_frame);
555   function = find_pc_function (fi->pc);
556
557   if (from_tty)
558     {
559       printf ("Run till exit from ");
560       print_selected_frame ();
561     }
562
563   proceed_to_finish = 1;                /* We want stop_registers, please... */
564   proceed ((CORE_ADDR) -1, -1, 0);
565
566   if (bpstat_momentary_breakpoint (stop_bpstat) && function != 0)
567     {
568       struct type *value_type;
569       register value val;
570       CORE_ADDR funcaddr;
571
572       value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
573       if (!value_type)
574         fatal ("internal: finish_command: function has no target type");
575       
576       if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
577         return;
578
579       funcaddr = BLOCK_START (SYMBOL_BLOCK_VALUE (function));
580
581       val = value_being_returned (value_type, stop_registers,
582               using_struct_return (value_of_variable (function),
583                                    funcaddr,
584                                    value_type,
585                 BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function))));
586
587       printf ("Value returned is $%d = ", record_latest_value (val));
588       value_print (val, stdout, 0, Val_no_prettyprint);
589       putchar ('\n');
590     }
591 }
592 \f
593 /* ARGSUSED */
594 static void
595 program_info (args, from_tty)
596     char *args;
597     int from_tty;
598 {
599   bpstat bs = stop_bpstat;
600   int num = bpstat_num (&bs);
601   
602   if (!target_has_execution)
603     {
604       printf ("The program being debugged is not being run.\n");
605       return;
606     }
607
608   target_files_info ();
609   printf ("Program stopped at 0x%x.\n", stop_pc);
610   if (stop_step)
611     printf ("It stopped after being stepped.\n");
612   else if (num != 0)
613     {
614       /* There may be several breakpoints in the same place, so this
615          isn't as strange as it seems.  */
616       while (num != 0)
617         {
618           if (num < 0)
619             printf ("It stopped at a breakpoint that has since been deleted.\n");
620           else
621             printf ("It stopped at breakpoint %d.\n", num);
622           num = bpstat_num (&bs);
623         }
624     }
625   else if (stop_signal) {
626 #ifdef PRINT_RANDOM_SIGNAL
627     PRINT_RANDOM_SIGNAL (stop_signal);
628 #else
629     printf ("It stopped with signal %d (%s).\n",
630             stop_signal, 
631             (stop_signal > NSIG)? "unknown": sys_siglist[stop_signal]);
632 #endif
633   }
634
635   if (!from_tty)
636     printf ("Type \"info stack\" or \"info registers\" for more information.\n");
637 }
638 \f
639 static void
640 environment_info (var)
641      char *var;
642 {
643   if (var)
644     {
645       register char *val = get_in_environ (inferior_environ, var);
646       if (val)
647         printf ("%s = %s\n", var, val);
648       else
649         printf ("Environment variable \"%s\" not defined.\n", var);
650     }
651   else
652     {
653       register char **vector = environ_vector (inferior_environ);
654       while (*vector)
655         printf ("%s\n", *vector++);
656     }
657 }
658
659 static void
660 set_environment_command (arg)
661      char *arg;
662 {
663   register char *p, *val, *var;
664   int nullset = 0;
665
666   if (arg == 0)
667     error_no_arg ("environment variable and value");
668
669   /* Find seperation between variable name and value */
670   p = (char *) strchr (arg, '=');
671   val = (char *) strchr (arg, ' ');
672
673   if (p != 0 && val != 0)
674     {
675       /* We have both a space and an equals.  If the space is before the
676          equals and the only thing between the two is more space, use
677          the equals */
678       if (p > val)
679         while (*val == ' ')
680           val++;
681
682       /* Take the smaller of the two.  If there was space before the
683          "=", they will be the same right now. */
684       p = arg + min (p - arg, val - arg);
685     }
686   else if (val != 0 && p == 0)
687     p = val;
688
689   if (p == arg)
690     error_no_arg ("environment variable to set");
691
692   if (p == 0 || p[1] == 0)
693     {
694       nullset = 1;
695       if (p == 0)
696         p = arg + strlen (arg); /* So that savestring below will work */
697     }
698   else
699     {
700       /* Not setting variable value to null */
701       val = p + 1;
702       while (*val == ' ' || *val == '\t')
703         val++;
704     }
705
706   while (p != arg && (p[-1] == ' ' || p[-1] == '\t')) p--;
707
708   var = savestring (arg, p - arg);
709   if (nullset)
710     {
711       printf ("Setting environment variable \"%s\" to null value.\n", var);
712       set_in_environ (inferior_environ, var, "");
713     }
714   else
715     set_in_environ (inferior_environ, var, val);
716   free (var);
717 }
718
719 static void
720 unset_environment_command (var, from_tty)
721      char *var;
722      int from_tty;
723 {
724   if (var == 0)
725     {
726       /* If there is no argument, delete all environment variables.
727          Ask for confirmation if reading from the terminal.  */
728       if (!from_tty || query ("Delete all environment variables? "))
729         {
730           free_environ (inferior_environ);
731           inferior_environ = make_environ ();
732         }
733     }
734   else
735     unset_in_environ (inferior_environ, var);
736 }
737
738 /* Handle the execution path (PATH variable) */
739
740 const static char path_var_name[] = "PATH";
741
742 /* ARGSUSED */
743 void
744 path_info (args, from_tty)
745      char *args;
746      int from_tty;
747 {
748   printf ("Executable and object file path: %s\n", 
749       get_in_environ (inferior_environ, path_var_name));
750 }
751
752 /* Add zero or more directories to the front of the execution path.  */
753
754 void
755 path_command (dirname, from_tty)
756      char *dirname;
757      int from_tty;
758 {
759   char *exec_path;
760
761   dont_repeat ();
762   exec_path = strsave (get_in_environ (inferior_environ, path_var_name));
763   mod_path (dirname, &exec_path);
764   set_in_environ (inferior_environ, path_var_name, exec_path);
765   free (exec_path);
766   if (from_tty)
767     path_info ((char *)NULL, from_tty);
768 }
769 \f
770 CORE_ADDR
771 read_pc ()
772 {
773   return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
774 }
775
776 void
777 write_pc (val)
778      CORE_ADDR val;
779 {
780   write_register (PC_REGNUM, (long) val);
781 #ifdef NPC_REGNUM
782   write_register (NPC_REGNUM, (long) val+4);
783 #endif
784   pc_changed = 0;
785 }
786
787 char *reg_names[] = REGISTER_NAMES;
788
789 /* Print out the machine register regnum. If regnum is -1,
790    print all registers.
791    For most machines, having all_registers_info() print the
792    register(s) one per line is good enough. If a different format
793    is required, (eg, for SPARC or Pyramid 90x, which both have
794    lots of regs), or there is an existing convention for showing
795    all the registers, define the macro DO_REGISTERS_INFO(regnum)
796    to provide that format.  */  
797 #if !defined (DO_REGISTERS_INFO)
798 #define DO_REGISTERS_INFO(regnum) do_registers_info(regnum)
799 static void do_registers_info (regnum)
800      int regnum;
801 {
802   register int i;
803
804   if (regnum == -1)
805     printf_filtered (
806       "Register       Contents (relative to selected stack frame)\n\n");
807
808   for (i = 0; i < NUM_REGS; i++)
809     {
810       char raw_buffer[MAX_REGISTER_RAW_SIZE];
811       char virtual_buffer[MAX_REGISTER_VIRTUAL_SIZE];
812
813       if (regnum != -1 && i != regnum)
814         continue;
815
816       fputs_filtered (reg_names[i], stdout);
817       print_spaces_filtered (15 - strlen (reg_names[i]), stdout);
818
819       /* Get the data in raw format, then convert also to virtual format.  */
820       if (read_relative_register_raw_bytes (i, raw_buffer))
821         {
822           printf_filtered ("Invalid register contents\n");
823           continue;
824         }
825       
826       target_convert_to_virtual (i, raw_buffer, virtual_buffer);
827
828       /* If virtual format is floating, print it that way, and in raw hex.  */
829       if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT
830           && ! INVALID_FLOAT (virtual_buffer, REGISTER_VIRTUAL_SIZE (i)))
831         {
832           register int j;
833
834           val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0,
835                      stdout, 0, 1, 0, Val_pretty_default);
836
837           printf_filtered ("\t(raw 0x");
838           for (j = 0; j < REGISTER_RAW_SIZE (i); j++)
839             printf_filtered ("%02x", (unsigned char)raw_buffer[j]);
840           printf_filtered (")");
841         }
842
843 /* FIXME!  val_print probably can handle all of these cases now...  */
844
845       /* Else if virtual format is too long for printf,
846          print in hex a byte at a time.  */
847       else if (REGISTER_VIRTUAL_SIZE (i) > sizeof (long))
848         {
849           register int j;
850           printf_filtered ("0x");
851           for (j = 0; j < REGISTER_VIRTUAL_SIZE (i); j++)
852             printf_filtered ("%02x", (unsigned char)virtual_buffer[j]);
853         }
854       /* Else print as integer in hex and in decimal.  */
855       else
856         {
857           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
858                      stdout, 'x', 1, 0, Val_pretty_default);
859           printf_filtered ("\t");
860           val_print (REGISTER_VIRTUAL_TYPE (i), raw_buffer, 0,
861                      stdout,   0, 1, 0, Val_pretty_default);
862         }
863
864       /* The SPARC wants to print even-numbered float regs as doubles
865          in addition to printing them as floats.  */
866 #ifdef PRINT_REGISTER_HOOK
867       PRINT_REGISTER_HOOK (i);
868 #endif
869
870       printf_filtered ("\n");
871     }
872 }
873 #endif /* no DO_REGISTERS_INFO.  */
874
875 static void
876 registers_info (addr_exp)
877      char *addr_exp;
878 {
879   int regnum;
880
881   if (!target_has_registers)
882     error ("The program has no registers now.");
883
884   if (addr_exp)
885     {
886       if (*addr_exp >= '0' && *addr_exp <= '9')
887         regnum = atoi (addr_exp);
888       else
889         {
890           register char *p = addr_exp;
891           if (p[0] == '$')
892             p++;
893           for (regnum = 0; regnum < NUM_REGS; regnum++)
894             if (!strcmp (p, reg_names[regnum]))
895               break;
896           if (regnum == NUM_REGS)
897             error ("%s: invalid register name.", addr_exp);
898         }
899     }
900   else
901     regnum = -1;
902
903   DO_REGISTERS_INFO(regnum);
904 }
905 \f
906 /*
907  * TODO:
908  * Should save/restore the tty state since it might be that the
909  * program to be debugged was started on this tty and it wants
910  * the tty in some state other than what we want.  If it's running
911  * on another terminal or without a terminal, then saving and
912  * restoring the tty state is a harmless no-op.
913  * This only needs to be done if we are attaching to a process.
914  */
915
916 /*
917  * attach_command --
918  * takes a program started up outside of gdb and ``attaches'' to it.
919  * This stops it cold in its tracks and allows us to start tracing it.
920  * For this to work, we must be able to send the process a
921  * signal and we must have the same effective uid as the program.
922  */
923 void
924 attach_command (args, from_tty)
925      char *args;
926      int from_tty;
927 {
928   dont_repeat ();                       /* Not for the faint of heart */
929   target_attach (args, from_tty);
930 }
931
932 /*
933  * detach_command --
934  * takes a program previously attached to and detaches it.
935  * The program resumes execution and will no longer stop
936  * on signals, etc.  We better not have left any breakpoints
937  * in the program or it'll die when it hits one.  For this
938  * to work, it may be necessary for the process to have been
939  * previously attached.  It *might* work if the program was
940  * started via the normal ptrace (PTRACE_TRACEME).
941  */
942
943 static void
944 detach_command (args, from_tty)
945      char *args;
946      int from_tty;
947 {
948   dont_repeat ();                       /* Not for the faint of heart */
949   target_detach (args, from_tty);
950 }
951
952 /* ARGSUSED */
953 static void
954 float_info (addr_exp)
955      char *addr_exp;
956 {
957 #ifdef FLOAT_INFO
958         FLOAT_INFO;
959 #else
960         printf ("No floating point info available for this processor.\n");
961 #endif
962 }
963 \f
964 struct cmd_list_element *unsetlist = NULL;
965
966 /* ARGSUSED */
967 static void
968 unset_command (args, from_tty)
969      char *args;
970      int from_tty;
971 {
972   printf ("\"unset\" must be followed by the name of an unset subcommand.\n");
973   help_list (unsetlist, "unset ", -1, stdout);
974 }
975
976 void
977 _initialize_infcmd ()
978 {
979   struct cmd_list_element *c;
980   
981   add_com ("tty", class_run, tty_command,
982            "Set terminal for future runs of program being debugged.");
983
984   add_show_from_set
985     (add_set_cmd ("args", class_run, var_string_noescape, (char *)&inferior_args,
986                   
987 "Set arguments to give program being debugged when it is started.\n\
988 Follow this command with any number of args, to be passed to the program.",
989                   &setlist),
990      &showlist);
991
992   c = add_cmd
993     ("environment", no_class, environment_info,
994      "The environment to give the program, or one variable's value.\n\
995 With an argument VAR, prints the value of environment variable VAR to\n\
996 give the program being debugged.  With no arguments, prints the entire\n\
997 environment to be given to the program.", &showlist);
998   c->completer = noop_completer;
999
1000   add_prefix_cmd ("unset", no_class, unset_command,
1001                   "Complement to certain \"set\" commands",
1002                   &unsetlist, "unset ", 0, &cmdlist);
1003   
1004   c = add_cmd ("environment", class_run, unset_environment_command,
1005               "Cancel environment variable VAR for the program.\n\
1006 This does not affect the program until the next \"run\" command.",
1007            &unsetlist);
1008   c->completer = noop_completer;
1009
1010   c = add_cmd ("environment", class_run, set_environment_command,
1011                "Set environment variable value to give the program.\n\
1012 Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
1013 VALUES of environment variables are uninterpreted strings.\n\
1014 This does not affect the program until the next \"run\" command.",
1015            &setlist);
1016   c->completer = noop_completer;
1017  
1018   add_com ("path", class_files, path_command,
1019        "Add directory DIR(s) to beginning of search path for object files.\n\
1020 $cwd in the path means the current working directory.\n\
1021 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1022 directories, separated by colons.  These directories are searched to find\n\
1023 fully linked executable files and separately compiled object files as needed.");
1024
1025   add_info ("path", path_info,
1026             "Current search path for finding object files.\n\
1027 $cwd in the path means the current working directory.\n\
1028 This path is equivalent to the $PATH shell variable.  It is a list of\n\
1029 directories, separated by colons.  These directories are searched to find\n\
1030 fully linked executable files and separately compiled object files as needed.");
1031
1032  add_com ("attach", class_run, attach_command,
1033            "Attach to a process or file outside of GDB.\n\
1034 This command attaches to another target, of the same type as your last\n\
1035 `target' command (`info files' will show your target stack).\n\
1036 The command may take as argument a process id or a device file.\n\
1037 For a process id, you must have permission to send the process a signal,\n\
1038 and it must have the same effective uid as the debugger.\n\
1039 When using \"attach\", you should use the \"file\" command to specify\n\
1040 the program running in the process, and to load its symbol table.");
1041
1042   add_com ("detach", class_run, detach_command,
1043            "Detach a process or file previously attached.\n\
1044 If a process, it is no longer traced, and it continues its execution.  If you\n\
1045 were debugging a file, the file is closed and gdb no longer accesses it.");
1046
1047   add_com ("signal", class_run, signal_command,
1048            "Continue program giving it signal number SIGNUMBER.");
1049
1050   add_com ("stepi", class_run, stepi_command,
1051            "Step one instruction exactly.\n\
1052 Argument N means do this N times (or till program stops for another reason).");
1053   add_com_alias ("si", "stepi", class_alias, 0);
1054
1055   add_com ("nexti", class_run, nexti_command,
1056            "Step one instruction, but proceed through subroutine calls.\n\
1057 Argument N means do this N times (or till program stops for another reason).");
1058   add_com_alias ("ni", "nexti", class_alias, 0);
1059
1060   add_com ("finish", class_run, finish_command,
1061            "Execute until selected stack frame returns.\n\
1062 Upon return, the value returned is printed and put in the value history.");
1063
1064   add_com ("next", class_run, next_command,
1065            "Step program, proceeding through subroutine calls.\n\
1066 Like the \"step\" command as long as subroutine calls do not happen;\n\
1067 when they do, the call is treated as one instruction.\n\
1068 Argument N means do this N times (or till program stops for another reason).");
1069   add_com_alias ("n", "next", class_run, 1);
1070
1071   add_com ("step", class_run, step_command,
1072            "Step program until it reaches a different source line.\n\
1073 Argument N means do this N times (or till program stops for another reason).");
1074   add_com_alias ("s", "step", class_run, 1);
1075
1076   add_com ("until", class_run, until_command,
1077            "Execute until the program reaches a source line greater than the current\n\
1078 or a specified line or address or function (same args as break command).\n\
1079 Execution will also stop upon exit from the current stack frame.");
1080   add_com_alias ("u", "until", class_run, 1);
1081   
1082   add_com ("jump", class_run, jump_command,
1083            "Continue program being debugged at specified line or address.\n\
1084 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1085 for an address to start at.");
1086
1087   add_com ("continue", class_run, continue_command,
1088            "Continue program being debugged, after signal or breakpoint.\n\
1089 If proceeding from breakpoint, a number N may be used as an argument:\n\
1090 then the same breakpoint won't break until the Nth time it is reached.");
1091   add_com_alias ("c", "cont", class_run, 1);
1092   add_com_alias ("fg", "cont", class_run, 1);
1093
1094   add_com ("run", class_run, run_command,
1095            "Start debugged program.  You may specify arguments to give it.\n\
1096 Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
1097 Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
1098 With no arguments, uses arguments last specified (with \"run\" or \"set args\".\n\
1099 To cancel previous arguments and run with no arguments,\n\
1100 use \"set args\" without arguments.");
1101   add_com_alias ("r", "run", class_run, 1);
1102
1103   add_info ("registers", registers_info,
1104             "List of registers and their contents, for selected stack frame.\n\
1105 Register name as argument means describe only that register.");
1106
1107   add_info ("program", program_info,
1108             "Execution status of the program.");
1109
1110   add_info ("float", float_info,
1111             "Print the status of the floating point unit\n");
1112
1113   inferior_args = savestring ("", 1);   /* Initially no args */
1114   inferior_environ = make_environ ();
1115   init_environ (inferior_environ);
1116 }
This page took 0.085458 seconds and 4 git commands to generate.