* gdb.t10/Makefile.in (clean): Remove $(EXECUTABLES) too.
[deliverable/binutils-gdb.git] / gdb / infcmd.c
CommitLineData
ee0613d1
JG
1/* Memory-access and commands for "inferior" (child) process, for GDB.
2 Copyright 1986, 1987, 1988, 1989, 1991, 1992 Free Software Foundation, Inc.
bd5635a1
RP
3
4This file is part of GDB.
5
ee0613d1 6This program is free software; you can redistribute it and/or modify
bd5635a1 7it under the terms of the GNU General Public License as published by
ee0613d1
JG
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
bd5635a1 10
ee0613d1 11This program is distributed in the hope that it will be useful,
bd5635a1
RP
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
ee0613d1
JG
17along with this program; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
bd5635a1 19
1304f099 20#include "defs.h"
bd5635a1
RP
21#include <signal.h>
22#include <sys/param.h>
23#include <string.h>
bd5635a1 24#include "symtab.h"
1304f099 25#include "gdbtypes.h"
bd5635a1
RP
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
1304f099
JG
34static void
35continue_command PARAMS ((char *, int));
36
37static void
38until_next_command PARAMS ((int));
39
40static void
41until_command PARAMS ((char *, int));
42
43static void
44path_info PARAMS ((char *, int));
45
46static void
47path_command PARAMS ((char *, int));
48
49static void
50unset_command PARAMS ((char *, int));
51
52static void
53float_info PARAMS ((char *, int));
54
55static void
56detach_command PARAMS ((char *, int));
57
58static void
59nofp_registers_info PARAMS ((char *, int));
60
61static void
62all_registers_info PARAMS ((char *, int));
63
64static void
65registers_info PARAMS ((char *, int));
66
67static void
68do_registers_info PARAMS ((int, int));
69
70static void
71unset_environment_command PARAMS ((char *, int));
72
73static void
74set_environment_command PARAMS ((char *, int));
75
76static void
77environment_info PARAMS ((char *, int));
78
79static void
80program_info PARAMS ((char *, int));
81
82static void
83finish_command PARAMS ((char *, int));
84
85static void
86signal_command PARAMS ((char *, int));
87
88static void
89jump_command PARAMS ((char *, int));
90
91static void
92step_1 PARAMS ((int, int, char *));
93
94static void
95nexti_command PARAMS ((char *, int));
bd5635a1 96
1304f099
JG
97static void
98stepi_command PARAMS ((char *, int));
99
100static void
101next_command PARAMS ((char *, int));
102
103static void
104step_command PARAMS ((char *, int));
105
106static void
107run_command PARAMS ((char *, int));
bd5635a1
RP
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
115static char *inferior_args;
116
117/* File name for default use for standard in/out in the inferior. */
118
119char *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
126int inferior_pid;
127
128/* Last signal that the inferior received (why it stopped). */
129
130int stop_signal;
131
132/* Address at which inferior stopped. */
133
134CORE_ADDR stop_pc;
135
136/* Stack frame when program stopped. */
137
138FRAME_ADDR stop_frame_address;
139
140/* Chain containing status of breakpoint(s) that we have stopped at. */
141
142bpstat stop_bpstat;
143
144/* Flag indicating that a command has proceeded the inferior past the
145 current breakpoint. */
146
147int breakpoint_proceeded;
148
149/* Nonzero if stopped due to a step command. */
150
151int stop_step;
152
153/* Nonzero if stopped due to completion of a stack dummy routine. */
154
155int stop_stack_dummy;
156
157/* Nonzero if stopped due to a random (unexpected) signal in inferior
158 process. */
159
160int 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
166CORE_ADDR step_range_start; /* Inclusive */
167CORE_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
173FRAME_ADDR step_frame_address;
174
175/* 1 means step over all subroutine calls.
b5a3d2aa 176 0 means don't step over calls (used by stepi).
bd5635a1
RP
177 -1 means step over calls to undebuggable functions. */
178
179int 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
185int step_multi;
186
187/* Environment to use for running inferior,
188 in format described in environ.h. */
189
190struct environ *inferior_environ;
191
bd5635a1 192\f
e1ce8aa5 193/* ARGSUSED */
bd5635a1
RP
194void
195tty_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
205static void
206run_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\
218Start it from the beginning? "))
219 error ("Program not restarted.");
ee0613d1 220 target_kill ();
bd5635a1
RP
221 }
222
223 exec_file = (char *) get_exec_file (0);
224
1304f099 225 /* The exec file is re-read every time we do a generic_mourn_inferior, so
bd5635a1
RP
226 we just have to worry about the symbol file. */
227 reread_symbols ();
228
229 if (args)
230 {
231 char *cmd;
ee0613d1 232 cmd = concat ("set args ", args, NULL);
bd5635a1
RP
233 make_cleanup (free, cmd);
234 execute_command (cmd, from_tty);
235 }
236
237 if (from_tty)
238 {
b5a3d2aa
SG
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");
bd5635a1
RP
245 fflush (stdout);
246 }
247
248 target_create_inferior (exec_file, inferior_args,
249 environ_vector (inferior_environ));
250}
251\f
1304f099 252static void
bd5635a1
RP
253continue_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)
1304f099 278 printf_filtered (" ");
bd5635a1
RP
279 num = bpstat_num (&bs);
280 }
281 }
282
283 if (from_tty)
1304f099 284 printf_filtered ("Continuing.\n");
bd5635a1
RP
285
286 clear_proceed_status ();
287
288 proceed ((CORE_ADDR) -1, -1, 0);
289}
290\f
291/* Step until outside of current statement. */
bd5635a1 292
e1ce8aa5 293/* ARGSUSED */
bd5635a1
RP
294static void
295step_command (count_string, from_tty)
1304f099 296 char *count_string;
bd5635a1
RP
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
e1ce8aa5 304/* ARGSUSED */
bd5635a1
RP
305static void
306next_command (count_string, from_tty)
1304f099 307 char *count_string;
bd5635a1
RP
308 int from_tty;
309{
310 step_1 (1, 0, count_string);
311}
312
313/* Likewise, but step only one instruction. */
314
e1ce8aa5 315/* ARGSUSED */
bd5635a1
RP
316static void
317stepi_command (count_string, from_tty)
1304f099 318 char *count_string;
bd5635a1
RP
319 int from_tty;
320{
321 step_1 (0, 1, count_string);
322}
323
e1ce8aa5 324/* ARGSUSED */
bd5635a1
RP
325static void
326nexti_command (count_string, from_tty)
1304f099 327 char *count_string;
bd5635a1
RP
328 int from_tty;
329{
330 step_1 (1, 1, count_string);
331}
332
333static void
334step_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;
1304f099 341 struct cleanup *cleanups = 0;
bd5635a1
RP
342
343 ERROR_NO_INFERIOR;
344 count = count_string ? parse_and_eval_address (count_string) : 1;
345
1304f099
JG
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
bd5635a1
RP
352 for (; count > 0; count--)
353 {
354 clear_proceed_status ();
355
bd5635a1
RP
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 {
1304f099 366 struct minimal_symbol *msymbol;
bd5635a1 367
993583e5
JK
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. */
b1b4a89e 371
1304f099 372 msymbol = lookup_minimal_symbol_by_pc (stop_pc);
bd5635a1 373 target_terminal_ours ();
1304f099 374 printf_filtered ("Current function has no line number information.\n");
bd5635a1
RP
375 fflush (stdout);
376
2e4964ad 377 if (msymbol == NULL || SYMBOL_NAME (msymbol + 1) == NULL)
993583e5
JK
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 }
bd5635a1 395
1304f099 396 printf_filtered ("Single stepping until function exit.\n");
bd5635a1 397 fflush (stdout);
bd5635a1
RP
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 }
1304f099
JG
422
423 if (!single_inst || skip_subroutines)
424 do_cleanups(cleanups);
bd5635a1
RP
425}
426\f
427/* Continue program at specified address. */
428
429static void
430jump_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;
b4fde6fa
FF
437 struct symbol *fn;
438 struct symbol *sfn;
bd5635a1
RP
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];
1304f099 452 free ((PTR)sals.sals);
bd5635a1
RP
453
454 if (sal.symtab == 0 && sal.pc == 0)
455 error ("No source file has been specified.");
456
ee0613d1 457 resolve_sal_pc (&sal); /* May error out */
bd5635a1 458
b4fde6fa
FF
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 {
2e4964ad
FF
464 if (!query ("Line %d is not in `%s'. Jump anyway? ", sal.line,
465 SYMBOL_SOURCE_NAME (fn)))
b4fde6fa
FF
466 {
467 error ("Not confirmed.");
468 /* NOTREACHED */
469 }
b4fde6fa 470 }
bd5635a1 471
bd5635a1
RP
472 addr = ADDR_BITS_SET (sal.pc);
473
474 if (from_tty)
1304f099 475 printf_filtered ("Continuing at %s.\n", local_hex_string(addr));
bd5635a1
RP
476
477 clear_proceed_status ();
478 proceed (addr, 0, 0);
479}
480
481/* Continue program giving it specified signal. */
482
483static void
484signal_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)
1304f099 499 printf_filtered ("Continuing with signal %d.\n", signum);
bd5635a1
RP
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
ee0613d1 520/* DEBUG HOOK: 4 => return instead of letting the stack dummy run. */
bd5635a1
RP
521
522static int stack_dummy_testing = 0;
523
524void
525run_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 ("\
543The program being debugged stopped while in a function called from GDB.\n\
544The expression which contained the function call has been discarded.");
545
546 /* On return, the stack dummy has been popped already. */
547
4ed3a9ea 548 memcpy (buffer, stop_registers, sizeof stop_registers);
bd5635a1
RP
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
e1ce8aa5 559/* ARGSUSED */
1304f099 560static void
bd5635a1
RP
561until_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 {
1304f099 582 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
bd5635a1 583
1304f099 584 if (msymbol == NULL)
bd5635a1
RP
585 error ("Execution is not within a known function.");
586
2e4964ad 587 step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
bd5635a1
RP
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
1304f099 606static void
bd5635a1
RP
607until_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
622static void
623finish_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;
1304f099
JG
631 struct breakpoint *breakpoint;
632 struct cleanup *old_chain;
bd5635a1
RP
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.");
777bef06
JK
638 if (selected_frame == NULL)
639 error ("No selected frame.");
bd5635a1
RP
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;
1304f099
JG
650
651 breakpoint = set_momentary_breakpoint (sal, frame, bp_finish);
652
653 old_chain = make_cleanup(delete_breakpoint, breakpoint);
bd5635a1
RP
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
ee0613d1
JG
660 /* Print info on the selected frame, including level number
661 but not source. */
bd5635a1
RP
662 if (from_tty)
663 {
ee0613d1
JG
664 printf_filtered ("Run till exit from ");
665 print_stack_frame (selected_frame, selected_frame_level, 0);
bd5635a1
RP
666 }
667
668 proceed_to_finish = 1; /* We want stop_registers, please... */
669 proceed ((CORE_ADDR) -1, -1, 0);
670
1304f099
JG
671 /* Did we stop at our breakpoint? */
672 if (bpstat_find_breakpoint(stop_bpstat, breakpoint) != NULL
673 && function != 0)
bd5635a1
RP
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
ee0613d1 694 printf_filtered ("Value returned is $%d = ", record_latest_value (val));
bd5635a1 695 value_print (val, stdout, 0, Val_no_prettyprint);
ee0613d1 696 printf_filtered ("\n");
bd5635a1 697 }
1304f099 698 do_cleanups(old_chain);
bd5635a1
RP
699}
700\f
e1ce8aa5 701/* ARGSUSED */
bd5635a1
RP
702static void
703program_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 {
1304f099 712 printf_filtered ("The program being debugged is not being run.\n");
bd5635a1
RP
713 return;
714 }
715
716 target_files_info ();
1304f099 717 printf_filtered ("Program stopped at %s.\n", local_hex_string(stop_pc));
bd5635a1 718 if (stop_step)
1304f099 719 printf_filtered ("It stopped after being stepped.\n");
bd5635a1
RP
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)
1304f099 727 printf_filtered ("It stopped at a breakpoint that has since been deleted.\n");
bd5635a1 728 else
1304f099 729 printf_filtered ("It stopped at breakpoint %d.\n", num);
bd5635a1
RP
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
1304f099
JG
737 printf_filtered ("It stopped with signal %d (%s).\n",
738 stop_signal, safe_strsignal (stop_signal));
bd5635a1
RP
739#endif
740 }
741
742 if (!from_tty)
1304f099 743 printf_filtered ("Type \"info stack\" or \"info registers\" for more information.\n");
bd5635a1
RP
744}
745\f
746static void
1304f099 747environment_info (var, from_tty)
bd5635a1 748 char *var;
1304f099 749 int from_tty;
bd5635a1
RP
750{
751 if (var)
752 {
753 register char *val = get_in_environ (inferior_environ, var);
754 if (val)
631f7a9f
JG
755 {
756 puts_filtered (var);
757 puts_filtered (" = ");
758 puts_filtered (val);
759 puts_filtered ("\n");
760 }
bd5635a1 761 else
631f7a9f
JG
762 {
763 puts_filtered ("Environment variable \"");
764 puts_filtered (var);
765 puts_filtered ("\" not defined.\n");
766 }
bd5635a1
RP
767 }
768 else
769 {
770 register char **vector = environ_vector (inferior_environ);
771 while (*vector)
631f7a9f
JG
772 {
773 puts_filtered (*vector++);
774 puts_filtered ("\n");
775 }
bd5635a1
RP
776 }
777}
778
779static void
1304f099 780set_environment_command (arg, from_tty)
bd5635a1 781 char *arg;
1304f099 782 int from_tty;
bd5635a1
RP
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
631f7a9f
JG
797 equals, walk forward over the spaces til we see a nonspace
798 (possibly the equals). */
bd5635a1
RP
799 if (p > val)
800 while (*val == ' ')
801 val++;
802
631f7a9f
JG
803 /* Now if the = is after the char following the spaces,
804 take the char following the spaces. */
805 if (p > val)
b5a3d2aa 806 p = val - 1;
bd5635a1
RP
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 {
1304f099 833 printf_filtered ("Setting environment variable \"%s\" to null value.\n", var);
bd5635a1
RP
834 set_in_environ (inferior_environ, var, "");
835 }
836 else
837 set_in_environ (inferior_environ, var, val);
838 free (var);
839}
840
841static void
842unset_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
a8a69e63 862static const char path_var_name[] = "PATH";
bd5635a1 863
e1ce8aa5 864/* ARGSUSED */
1304f099 865static void
bd5635a1
RP
866path_info (args, from_tty)
867 char *args;
868 int from_tty;
869{
b5a3d2aa
SG
870 puts_filtered ("Executable and object file path: ");
871 puts_filtered (get_in_environ (inferior_environ, path_var_name));
872 puts_filtered ("\n");
bd5635a1
RP
873}
874
875/* Add zero or more directories to the front of the execution path. */
876
1304f099 877static void
bd5635a1
RP
878path_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));
e1ce8aa5 886 mod_path (dirname, &exec_path);
bd5635a1
RP
887 set_in_environ (inferior_environ, path_var_name, exec_path);
888 free (exec_path);
889 if (from_tty)
e1ce8aa5 890 path_info ((char *)NULL, from_tty);
bd5635a1
RP
891}
892\f
b1b4a89e
JK
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
bd5635a1
RP
896CORE_ADDR
897read_pc ()
898{
b1b4a89e 899#ifdef GDB_TARGET_IS_HPPA
b5c10493
SG
900 int flags = read_register(FLAGS_REGNUM);
901
902 if (flags & 2)
b1b4a89e
JK
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
bd5635a1 909 return ADDR_BITS_REMOVE ((CORE_ADDR) read_register (PC_REGNUM));
b1b4a89e
JK
910#endif
911#endif
bd5635a1
RP
912}
913
914void
915write_pc (val)
916 CORE_ADDR val;
917{
918 write_register (PC_REGNUM, (long) val);
919#ifdef NPC_REGNUM
b1b4a89e
JK
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);
bd5635a1
RP
927#endif
928 pc_changed = 0;
929}
930
1304f099 931const char * const reg_names[] = REGISTER_NAMES;
bd5635a1
RP
932
933/* Print out the machine register regnum. If regnum is -1,
ee0613d1
JG
934 print all registers (fpregs == 1) or all non-float registers
935 (fpregs == 0).
936
bd5635a1
RP
937 For most machines, having all_registers_info() print the
938 register(s) one per line is good enough. If a different format
ee0613d1 939 is required, (eg, for MIPS or Pyramid 90x, which both have
bd5635a1 940 lots of regs), or there is an existing convention for showing
ee0613d1 941 all the registers, define the macro DO_REGISTERS_INFO(regnum, fp)
bd5635a1 942 to provide that format. */
ee0613d1 943
bd5635a1 944#if !defined (DO_REGISTERS_INFO)
ee0613d1
JG
945#define DO_REGISTERS_INFO(regnum, fp) do_registers_info(regnum, fp)
946static void
947do_registers_info (regnum, fpregs)
bd5635a1 948 int regnum;
ee0613d1 949 int fpregs;
bd5635a1
RP
950{
951 register int i;
952
bd5635a1
RP
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
ee0613d1
JG
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 }
bd5635a1
RP
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
b5a3d2aa 977 REGISTER_CONVERT_TO_VIRTUAL (i, raw_buffer, virtual_buffer);
bd5635a1
RP
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
1026static void
ee0613d1 1027registers_info (addr_exp, fpregs)
bd5635a1 1028 char *addr_exp;
ee0613d1 1029 int fpregs;
bd5635a1
RP
1030{
1031 int regnum;
b5a3d2aa 1032 register char *end;
bd5635a1
RP
1033
1034 if (!target_has_registers)
1035 error ("The program has no registers now.");
1036
b5a3d2aa 1037 if (!addr_exp)
bd5635a1 1038 {
b5a3d2aa
SG
1039 DO_REGISTERS_INFO(-1, fpregs);
1040 return;
bd5635a1 1041 }
bd5635a1 1042
b5a3d2aa
SG
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
1059found:
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');
ee0613d1
JG
1066}
1067
1068static void
1304f099 1069all_registers_info (addr_exp, from_tty)
ee0613d1 1070 char *addr_exp;
1304f099 1071 int from_tty;
ee0613d1
JG
1072{
1073 registers_info (addr_exp, 1);
1074}
1075
1076static void
1304f099 1077nofp_registers_info (addr_exp, from_tty)
ee0613d1 1078 char *addr_exp;
1304f099 1079 int from_tty;
ee0613d1
JG
1080{
1081 registers_info (addr_exp, 0);
bd5635a1
RP
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/*
b5a3d2aa
SG
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
bd5635a1
RP
1100void
1101attach_command (args, from_tty)
1102 char *args;
1103 int from_tty;
1104{
f266e564 1105 dont_repeat (); /* Not for the faint of heart */
b5a3d2aa
SG
1106
1107 if (target_has_execution)
1108 {
1109 if (query ("A program is being debugged already. Kill it? "))
1110 target_kill ();
1111 else
b1b4a89e 1112 error ("Not killed.");
b5a3d2aa
SG
1113 }
1114
bd5635a1 1115 target_attach (args, from_tty);
b5a3d2aa
SG
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 ();
bd5635a1
RP
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
1151static void
1152detach_command (args, from_tty)
1153 char *args;
1154 int from_tty;
1155{
f266e564 1156 dont_repeat (); /* Not for the faint of heart */
bd5635a1
RP
1157 target_detach (args, from_tty);
1158}
1159
1160/* ARGSUSED */
1161static void
1304f099 1162float_info (addr_exp, from_tty)
bd5635a1 1163 char *addr_exp;
1304f099 1164 int from_tty;
bd5635a1
RP
1165{
1166#ifdef FLOAT_INFO
1167 FLOAT_INFO;
1168#else
1304f099 1169 printf_filtered ("No floating point info available for this processor.\n");
bd5635a1
RP
1170#endif
1171}
1172\f
f266e564
JK
1173/* ARGSUSED */
1174static void
1175unset_command (args, from_tty)
1176 char *args;
1177 int from_tty;
1178{
1304f099 1179 printf_filtered ("\"unset\" must be followed by the name of an unset subcommand.\n");
f266e564
JK
1180 help_list (unsetlist, "unset ", -1, stdout);
1181}
1182
bd5635a1
RP
1183void
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\
1195Follow 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\
1202With an argument VAR, prints the value of environment variable VAR to\n\
1203give the program being debugged. With no arguments, prints the entire\n\
1204environment to be given to the program.", &showlist);
1205 c->completer = noop_completer;
1206
f266e564
JK
1207 add_prefix_cmd ("unset", no_class, unset_command,
1208 "Complement to certain \"set\" commands",
1209 &unsetlist, "unset ", 0, &cmdlist);
1210
bd5635a1
RP
1211 c = add_cmd ("environment", class_run, unset_environment_command,
1212 "Cancel environment variable VAR for the program.\n\
1213This does not affect the program until the next \"run\" command.",
f266e564 1214 &unsetlist);
bd5635a1
RP
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\
1219Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
1220VALUES of environment variables are uninterpreted strings.\n\
1221This 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\
1228This path is equivalent to the $PATH shell variable. It is a list of\n\
1229directories, separated by colons. These directories are searched to find\n\
1230fully linked executable files and separately compiled object files as needed.");
1231
ee0613d1 1232 c = add_cmd ("paths", no_class, path_info,
bd5635a1
RP
1233 "Current search path for finding object files.\n\
1234$cwd in the path means the current working directory.\n\
1235This path is equivalent to the $PATH shell variable. It is a list of\n\
1236directories, separated by colons. These directories are searched to find\n\
ee0613d1
JG
1237fully linked executable files and separately compiled object files as needed.", &showlist);
1238 c->completer = noop_completer;
bd5635a1
RP
1239
1240 add_com ("attach", class_run, attach_command,
1241 "Attach to a process or file outside of GDB.\n\
1242This command attaches to another target, of the same type as your last\n\
1243`target' command (`info files' will show your target stack).\n\
1244The command may take as argument a process id or a device file.\n\
1245For a process id, you must have permission to send the process a signal,\n\
1246and it must have the same effective uid as the debugger.\n\
1247When using \"attach\", you should use the \"file\" command to specify\n\
1248the 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\
1252If a process, it is no longer traced, and it continues its execution. If you\n\
1253were 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\
1260Argument 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\
1265Argument 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\
1270Upon 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\
1274Like the \"step\" command as long as subroutine calls do not happen;\n\
1275when they do, the call is treated as one instruction.\n\
1276Argument 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\
1281Argument 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\
1286or a specified line or address or function (same args as break command).\n\
1287Execution 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\
1292Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1293for an address to start at.");
1294
1295 add_com ("continue", class_run, continue_command,
1296 "Continue program being debugged, after signal or breakpoint.\n\
1297If proceeding from breakpoint, a number N may be used as an argument:\n\
1298then 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\
1304Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
1305Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
b4fde6fa 1306With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
bd5635a1
RP
1307To cancel previous arguments and run with no arguments,\n\
1308use \"set args\" without arguments.");
1309 add_com_alias ("r", "run", class_run, 1);
1310
ee0613d1
JG
1311 add_info ("registers", nofp_registers_info,
1312 "List of integer registers and their contents, for selected stack frame.\n\
1313Register 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\
bd5635a1
RP
1317Register 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.197381 seconds and 4 git commands to generate.