* Rename remote-es1800.c to remote-es.c
[deliverable/binutils-gdb.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.102728 seconds and 4 git commands to generate.