* corelow.c (core_xfer_partial): Pass writebuf to
[deliverable/binutils-gdb.git] / gdb / infcmd.c
1 /* Memory-access and commands for "inferior" process, for GDB.
2
3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
5 Free Software Foundation, Inc.
6
7 This file is part of GDB.
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
21
22 #include "defs.h"
23 #include <signal.h>
24 #include "gdb_string.h"
25 #include "symtab.h"
26 #include "gdbtypes.h"
27 #include "frame.h"
28 #include "inferior.h"
29 #include "environ.h"
30 #include "value.h"
31 #include "gdbcmd.h"
32 #include "symfile.h"
33 #include "gdbcore.h"
34 #include "target.h"
35 #include "language.h"
36 #include "symfile.h"
37 #include "objfiles.h"
38 #include "completer.h"
39 #include "ui-out.h"
40 #include "event-top.h"
41 #include "parser-defs.h"
42 #include "regcache.h"
43 #include "reggroups.h"
44 #include "block.h"
45 #include "solib.h"
46 #include <ctype.h>
47 #include "gdb_assert.h"
48 #include "observer.h"
49 #include "target-descriptions.h"
50
51 /* Functions exported for general use, in inferior.h: */
52
53 void all_registers_info (char *, int);
54
55 void registers_info (char *, int);
56
57 void nexti_command (char *, int);
58
59 void stepi_command (char *, int);
60
61 void continue_command (char *, int);
62
63 void interrupt_target_command (char *args, int from_tty);
64
65 /* Local functions: */
66
67 static void nofp_registers_info (char *, int);
68
69 static void print_return_value (int struct_return, struct type *value_type);
70
71 static void finish_command_continuation (struct continuation_arg *);
72
73 static void until_next_command (int);
74
75 static void until_command (char *, int);
76
77 static void path_info (char *, int);
78
79 static void path_command (char *, int);
80
81 static void unset_command (char *, int);
82
83 static void float_info (char *, int);
84
85 static void detach_command (char *, int);
86
87 static void disconnect_command (char *, int);
88
89 static void unset_environment_command (char *, int);
90
91 static void set_environment_command (char *, int);
92
93 static void environment_info (char *, int);
94
95 static void program_info (char *, int);
96
97 static void finish_command (char *, int);
98
99 static void signal_command (char *, int);
100
101 static void jump_command (char *, int);
102
103 static void step_1 (int, int, char *);
104 static void step_once (int skip_subroutines, int single_inst, int count);
105 static void step_1_continuation (struct continuation_arg *arg);
106
107 static void next_command (char *, int);
108
109 static void step_command (char *, int);
110
111 static void run_command (char *, int);
112
113 static void run_no_args_command (char *args, int from_tty);
114
115 static void go_command (char *line_no, int from_tty);
116
117 static int strip_bg_char (char **);
118
119 void _initialize_infcmd (void);
120
121 #define GO_USAGE "Usage: go <location>\n"
122
123 #define ERROR_NO_INFERIOR \
124 if (!target_has_execution) error (_("The program is not being run."));
125
126 /* String containing arguments to give to the program, separated by spaces.
127 Empty string (pointer to '\0') means no args. */
128
129 static char *inferior_args;
130
131 /* The inferior arguments as a vector. If INFERIOR_ARGC is nonzero,
132 then we must compute INFERIOR_ARGS from this (via the target). */
133
134 static int inferior_argc;
135 static char **inferior_argv;
136
137 /* File name for default use for standard in/out in the inferior. */
138
139 static char *inferior_io_terminal;
140
141 /* Pid of our debugged inferior, or 0 if no inferior now.
142 Since various parts of infrun.c test this to see whether there is a program
143 being debugged it should be nonzero (currently 3 is used) for remote
144 debugging. */
145
146 ptid_t inferior_ptid;
147
148 /* Last signal that the inferior received (why it stopped). */
149
150 enum target_signal stop_signal;
151
152 /* Address at which inferior stopped. */
153
154 CORE_ADDR stop_pc;
155
156 /* Chain containing status of breakpoint(s) that we have stopped at. */
157
158 bpstat stop_bpstat;
159
160 /* Flag indicating that a command has proceeded the inferior past the
161 current breakpoint. */
162
163 int breakpoint_proceeded;
164
165 /* Nonzero if stopped due to a step command. */
166
167 int stop_step;
168
169 /* Nonzero if stopped due to completion of a stack dummy routine. */
170
171 int stop_stack_dummy;
172
173 /* Nonzero if stopped due to a random (unexpected) signal in inferior
174 process. */
175
176 int stopped_by_random_signal;
177
178 /* Range to single step within.
179 If this is nonzero, respond to a single-step signal
180 by continuing to step if the pc is in this range. */
181
182 CORE_ADDR step_range_start; /* Inclusive */
183 CORE_ADDR step_range_end; /* Exclusive */
184
185 /* Stack frame address as of when stepping command was issued.
186 This is how we know when we step into a subroutine call,
187 and how to set the frame for the breakpoint used to step out. */
188
189 struct frame_id step_frame_id;
190
191 enum step_over_calls_kind step_over_calls;
192
193 /* If stepping, nonzero means step count is > 1
194 so don't print frame next time inferior stops
195 if it stops due to stepping. */
196
197 int step_multi;
198
199 /* Environment to use for running inferior,
200 in format described in environ.h. */
201
202 struct gdb_environ *inferior_environ;
203 \f
204 /* Accessor routines. */
205
206 void
207 set_inferior_io_terminal (const char *terminal_name)
208 {
209 if (inferior_io_terminal)
210 xfree (inferior_io_terminal);
211
212 if (!terminal_name)
213 inferior_io_terminal = NULL;
214 else
215 inferior_io_terminal = savestring (terminal_name, strlen (terminal_name));
216 }
217
218 const char *
219 get_inferior_io_terminal (void)
220 {
221 return inferior_io_terminal;
222 }
223
224 char *
225 get_inferior_args (void)
226 {
227 if (inferior_argc != 0)
228 {
229 char *n, *old;
230
231 n = gdbarch_construct_inferior_arguments (current_gdbarch,
232 inferior_argc, inferior_argv);
233 old = set_inferior_args (n);
234 xfree (old);
235 }
236
237 if (inferior_args == NULL)
238 inferior_args = xstrdup ("");
239
240 return inferior_args;
241 }
242
243 char *
244 set_inferior_args (char *newargs)
245 {
246 char *saved_args = inferior_args;
247
248 inferior_args = newargs;
249 inferior_argc = 0;
250 inferior_argv = 0;
251
252 return saved_args;
253 }
254
255 void
256 set_inferior_args_vector (int argc, char **argv)
257 {
258 inferior_argc = argc;
259 inferior_argv = argv;
260 }
261
262 /* Notice when `set args' is run. */
263 static void
264 notice_args_set (char *args, int from_tty, struct cmd_list_element *c)
265 {
266 inferior_argc = 0;
267 inferior_argv = 0;
268 }
269
270 /* Notice when `show args' is run. */
271 static void
272 notice_args_read (struct ui_file *file, int from_tty,
273 struct cmd_list_element *c, const char *value)
274 {
275 deprecated_show_value_hack (file, from_tty, c, value);
276 /* Might compute the value. */
277 get_inferior_args ();
278 }
279
280 \f
281 /* Compute command-line string given argument vector. This does the
282 same shell processing as fork_inferior. */
283 char *
284 construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
285 {
286 char *result;
287
288 if (STARTUP_WITH_SHELL)
289 {
290 /* This holds all the characters considered special to the
291 typical Unix shells. We include `^' because the SunOS
292 /bin/sh treats it as a synonym for `|'. */
293 char *special = "\"!#$&*()\\|[]{}<>?'\"`~^; \t\n";
294 int i;
295 int length = 0;
296 char *out, *cp;
297
298 /* We over-compute the size. It shouldn't matter. */
299 for (i = 0; i < argc; ++i)
300 length += 2 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
301
302 result = (char *) xmalloc (length);
303 out = result;
304
305 for (i = 0; i < argc; ++i)
306 {
307 if (i > 0)
308 *out++ = ' ';
309
310 /* Need to handle empty arguments specially. */
311 if (argv[i][0] == '\0')
312 {
313 *out++ = '\'';
314 *out++ = '\'';
315 }
316 else
317 {
318 for (cp = argv[i]; *cp; ++cp)
319 {
320 if (strchr (special, *cp) != NULL)
321 *out++ = '\\';
322 *out++ = *cp;
323 }
324 }
325 }
326 *out = '\0';
327 }
328 else
329 {
330 /* In this case we can't handle arguments that contain spaces,
331 tabs, or newlines -- see breakup_args(). */
332 int i;
333 int length = 0;
334
335 for (i = 0; i < argc; ++i)
336 {
337 char *cp = strchr (argv[i], ' ');
338 if (cp == NULL)
339 cp = strchr (argv[i], '\t');
340 if (cp == NULL)
341 cp = strchr (argv[i], '\n');
342 if (cp != NULL)
343 error (_("can't handle command-line argument containing whitespace"));
344 length += strlen (argv[i]) + 1;
345 }
346
347 result = (char *) xmalloc (length);
348 result[0] = '\0';
349 for (i = 0; i < argc; ++i)
350 {
351 if (i > 0)
352 strcat (result, " ");
353 strcat (result, argv[i]);
354 }
355 }
356
357 return result;
358 }
359 \f
360
361 /* This function detects whether or not a '&' character (indicating
362 background execution) has been added as *the last* of the arguments ARGS
363 of a command. If it has, it removes it and returns 1. Otherwise it
364 does nothing and returns 0. */
365 static int
366 strip_bg_char (char **args)
367 {
368 char *p = NULL;
369
370 p = strchr (*args, '&');
371
372 if (p)
373 {
374 if (p == (*args + strlen (*args) - 1))
375 {
376 if (strlen (*args) > 1)
377 {
378 do
379 p--;
380 while (*p == ' ' || *p == '\t');
381 *(p + 1) = '\0';
382 }
383 else
384 *args = 0;
385 return 1;
386 }
387 }
388 return 0;
389 }
390
391 void
392 tty_command (char *file, int from_tty)
393 {
394 if (file == 0)
395 error_no_arg (_("terminal name for running target process"));
396
397 set_inferior_io_terminal (file);
398 }
399
400 /* Common actions to take after creating any sort of inferior, by any
401 means (running, attaching, connecting, et cetera). The target
402 should be stopped. */
403
404 void
405 post_create_inferior (struct target_ops *target, int from_tty)
406 {
407 /* Be sure we own the terminal in case write operations are performed. */
408 target_terminal_ours ();
409
410 /* If the target hasn't taken care of this already, do it now.
411 Targets which need to access registers during to_open,
412 to_create_inferior, or to_attach should do it earlier; but many
413 don't need to. */
414 target_find_description ();
415
416 if (exec_bfd)
417 {
418 /* Sometimes the platform-specific hook loads initial shared
419 libraries, and sometimes it doesn't. Try to do so first, so
420 that we can add them with the correct value for FROM_TTY. */
421 #ifdef SOLIB_ADD
422 SOLIB_ADD (NULL, from_tty, target, auto_solib_add);
423 #else
424 solib_add (NULL, from_tty, target, auto_solib_add);
425 #endif
426
427 /* Create the hooks to handle shared library load and unload
428 events. */
429 #ifdef SOLIB_CREATE_INFERIOR_HOOK
430 SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
431 #else
432 solib_create_inferior_hook ();
433 #endif
434
435 /* Enable any breakpoints which were disabled when the
436 underlying shared library was deleted. */
437 re_enable_breakpoints_in_shlibs ();
438 }
439
440 observer_notify_inferior_created (target, from_tty);
441 }
442
443 /* Kill the inferior if already running. This function is designed
444 to be called when we are about to start the execution of the program
445 from the beginning. Ask the user to confirm that he wants to restart
446 the program being debugged when FROM_TTY is non-null. */
447
448 void
449 kill_if_already_running (int from_tty)
450 {
451 if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
452 {
453 if (from_tty
454 && !query ("The program being debugged has been started already.\n\
455 Start it from the beginning? "))
456 error (_("Program not restarted."));
457 target_kill ();
458 #if defined(SOLIB_RESTART)
459 SOLIB_RESTART ();
460 #endif
461 init_wait_for_inferior ();
462 }
463 }
464
465 /* Implement the "run" command. If TBREAK_AT_MAIN is set, then insert
466 a temporary breakpoint at the begining of the main program before
467 running the program. */
468
469 static void
470 run_command_1 (char *args, int from_tty, int tbreak_at_main)
471 {
472 char *exec_file;
473
474 dont_repeat ();
475
476 kill_if_already_running (from_tty);
477 clear_breakpoint_hit_counts ();
478
479 /* Clean up any leftovers from other runs. Some other things from
480 this function should probably be moved into target_pre_inferior. */
481 target_pre_inferior (from_tty);
482
483 /* Purge old solib objfiles. */
484 objfile_purge_solibs ();
485
486 do_run_cleanups (NULL);
487
488 /* The comment here used to read, "The exec file is re-read every
489 time we do a generic_mourn_inferior, so we just have to worry
490 about the symbol file." The `generic_mourn_inferior' function
491 gets called whenever the program exits. However, suppose the
492 program exits, and *then* the executable file changes? We need
493 to check again here. Since reopen_exec_file doesn't do anything
494 if the timestamp hasn't changed, I don't see the harm. */
495 reopen_exec_file ();
496 reread_symbols ();
497
498 /* Insert the temporary breakpoint if a location was specified. */
499 if (tbreak_at_main)
500 tbreak_command (main_name (), 0);
501
502 exec_file = (char *) get_exec_file (0);
503
504 /* We keep symbols from add-symbol-file, on the grounds that the
505 user might want to add some symbols before running the program
506 (right?). But sometimes (dynamic loading where the user manually
507 introduces the new symbols with add-symbol-file), the code which
508 the symbols describe does not persist between runs. Currently
509 the user has to manually nuke all symbols between runs if they
510 want them to go away (PR 2207). This is probably reasonable. */
511
512 if (!args)
513 {
514 if (target_can_async_p ())
515 async_disable_stdin ();
516 }
517 else
518 {
519 int async_exec = strip_bg_char (&args);
520
521 /* If we get a request for running in the bg but the target
522 doesn't support it, error out. */
523 if (async_exec && !target_can_async_p ())
524 error (_("Asynchronous execution not supported on this target."));
525
526 /* If we don't get a request of running in the bg, then we need
527 to simulate synchronous (fg) execution. */
528 if (!async_exec && target_can_async_p ())
529 {
530 /* Simulate synchronous execution */
531 async_disable_stdin ();
532 }
533
534 /* If there were other args, beside '&', process them. */
535 if (args)
536 {
537 char *old_args = set_inferior_args (xstrdup (args));
538 xfree (old_args);
539 }
540 }
541
542 if (from_tty)
543 {
544 ui_out_field_string (uiout, NULL, "Starting program");
545 ui_out_text (uiout, ": ");
546 if (exec_file)
547 ui_out_field_string (uiout, "execfile", exec_file);
548 ui_out_spaces (uiout, 1);
549 /* We call get_inferior_args() because we might need to compute
550 the value now. */
551 ui_out_field_string (uiout, "infargs", get_inferior_args ());
552 ui_out_text (uiout, "\n");
553 ui_out_flush (uiout);
554 }
555
556 /* We call get_inferior_args() because we might need to compute
557 the value now. */
558 target_create_inferior (exec_file, get_inferior_args (),
559 environ_vector (inferior_environ), from_tty);
560
561 post_create_inferior (&current_target, from_tty);
562
563 /* Start the target running. */
564 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);
565 }
566
567
568 static void
569 run_command (char *args, int from_tty)
570 {
571 run_command_1 (args, from_tty, 0);
572 }
573
574 static void
575 run_no_args_command (char *args, int from_tty)
576 {
577 char *old_args = set_inferior_args (xstrdup (""));
578 xfree (old_args);
579 }
580 \f
581
582 /* Start the execution of the program up until the beginning of the main
583 program. */
584
585 static void
586 start_command (char *args, int from_tty)
587 {
588 /* Some languages such as Ada need to search inside the program
589 minimal symbols for the location where to put the temporary
590 breakpoint before starting. */
591 if (!have_minimal_symbols ())
592 error (_("No symbol table loaded. Use the \"file\" command."));
593
594 /* Run the program until reaching the main procedure... */
595 run_command_1 (args, from_tty, 1);
596 }
597
598 void
599 continue_command (char *proc_count_exp, int from_tty)
600 {
601 int async_exec = 0;
602 ERROR_NO_INFERIOR;
603
604 /* Find out whether we must run in the background. */
605 if (proc_count_exp != NULL)
606 async_exec = strip_bg_char (&proc_count_exp);
607
608 /* If we must run in the background, but the target can't do it,
609 error out. */
610 if (async_exec && !target_can_async_p ())
611 error (_("Asynchronous execution not supported on this target."));
612
613 /* If we are not asked to run in the bg, then prepare to run in the
614 foreground, synchronously. */
615 if (!async_exec && target_can_async_p ())
616 {
617 /* Simulate synchronous execution */
618 async_disable_stdin ();
619 }
620
621 /* If have argument (besides '&'), set proceed count of breakpoint
622 we stopped at. */
623 if (proc_count_exp != NULL)
624 {
625 bpstat bs = stop_bpstat;
626 int num, stat;
627 int stopped = 0;
628
629 while ((stat = bpstat_num (&bs, &num)) != 0)
630 if (stat > 0)
631 {
632 set_ignore_count (num,
633 parse_and_eval_long (proc_count_exp) - 1,
634 from_tty);
635 /* set_ignore_count prints a message ending with a period.
636 So print two spaces before "Continuing.". */
637 if (from_tty)
638 printf_filtered (" ");
639 stopped = 1;
640 }
641
642 if (!stopped && from_tty)
643 {
644 printf_filtered
645 ("Not stopped at any breakpoint; argument ignored.\n");
646 }
647 }
648
649 if (from_tty)
650 printf_filtered (_("Continuing.\n"));
651
652 clear_proceed_status ();
653
654 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
655 }
656 \f
657 /* Step until outside of current statement. */
658
659 static void
660 step_command (char *count_string, int from_tty)
661 {
662 step_1 (0, 0, count_string);
663 }
664
665 /* Likewise, but skip over subroutine calls as if single instructions. */
666
667 static void
668 next_command (char *count_string, int from_tty)
669 {
670 step_1 (1, 0, count_string);
671 }
672
673 /* Likewise, but step only one instruction. */
674
675 void
676 stepi_command (char *count_string, int from_tty)
677 {
678 step_1 (0, 1, count_string);
679 }
680
681 void
682 nexti_command (char *count_string, int from_tty)
683 {
684 step_1 (1, 1, count_string);
685 }
686
687 static void
688 disable_longjmp_breakpoint_cleanup (void *ignore)
689 {
690 disable_longjmp_breakpoint ();
691 }
692
693 static void
694 step_1 (int skip_subroutines, int single_inst, char *count_string)
695 {
696 int count = 1;
697 struct frame_info *frame;
698 struct cleanup *cleanups = 0;
699 int async_exec = 0;
700
701 ERROR_NO_INFERIOR;
702
703 if (count_string)
704 async_exec = strip_bg_char (&count_string);
705
706 /* If we get a request for running in the bg but the target
707 doesn't support it, error out. */
708 if (async_exec && !target_can_async_p ())
709 error (_("Asynchronous execution not supported on this target."));
710
711 /* If we don't get a request of running in the bg, then we need
712 to simulate synchronous (fg) execution. */
713 if (!async_exec && target_can_async_p ())
714 {
715 /* Simulate synchronous execution */
716 async_disable_stdin ();
717 }
718
719 count = count_string ? parse_and_eval_long (count_string) : 1;
720
721 if (!single_inst || skip_subroutines) /* leave si command alone */
722 {
723 enable_longjmp_breakpoint ();
724 if (!target_can_async_p ())
725 cleanups = make_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
726 else
727 make_exec_cleanup (disable_longjmp_breakpoint_cleanup, 0 /*ignore*/);
728 }
729
730 /* In synchronous case, all is well, just use the regular for loop. */
731 if (!target_can_async_p ())
732 {
733 for (; count > 0; count--)
734 {
735 clear_proceed_status ();
736
737 frame = get_current_frame ();
738 if (!frame) /* Avoid coredump here. Why tho? */
739 error (_("No current frame"));
740 step_frame_id = get_frame_id (frame);
741
742 if (!single_inst)
743 {
744 find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
745 if (step_range_end == 0)
746 {
747 char *name;
748 if (find_pc_partial_function (stop_pc, &name, &step_range_start,
749 &step_range_end) == 0)
750 error (_("Cannot find bounds of current function"));
751
752 target_terminal_ours ();
753 printf_filtered (_("\
754 Single stepping until exit from function %s, \n\
755 which has no line number information.\n"), name);
756 }
757 }
758 else
759 {
760 /* Say we are stepping, but stop after one insn whatever it does. */
761 step_range_start = step_range_end = 1;
762 if (!skip_subroutines)
763 /* It is stepi.
764 Don't step over function calls, not even to functions lacking
765 line numbers. */
766 step_over_calls = STEP_OVER_NONE;
767 }
768
769 if (skip_subroutines)
770 step_over_calls = STEP_OVER_ALL;
771
772 step_multi = (count > 1);
773 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
774
775 if (!stop_step)
776 break;
777 }
778
779 if (!single_inst || skip_subroutines)
780 do_cleanups (cleanups);
781 return;
782 }
783 /* In case of asynchronous target things get complicated, do only
784 one step for now, before returning control to the event loop. Let
785 the continuation figure out how many other steps we need to do,
786 and handle them one at the time, through step_once(). */
787 else
788 {
789 if (target_can_async_p ())
790 step_once (skip_subroutines, single_inst, count);
791 }
792 }
793
794 /* Called after we are done with one step operation, to check whether
795 we need to step again, before we print the prompt and return control
796 to the user. If count is > 1, we will need to do one more call to
797 proceed(), via step_once(). Basically it is like step_once and
798 step_1_continuation are co-recursive. */
799 static void
800 step_1_continuation (struct continuation_arg *arg)
801 {
802 int count;
803 int skip_subroutines;
804 int single_inst;
805
806 skip_subroutines = arg->data.integer;
807 single_inst = arg->next->data.integer;
808 count = arg->next->next->data.integer;
809
810 if (stop_step)
811 step_once (skip_subroutines, single_inst, count - 1);
812 else
813 if (!single_inst || skip_subroutines)
814 do_exec_cleanups (ALL_CLEANUPS);
815 }
816
817 /* Do just one step operation. If count >1 we will have to set up a
818 continuation to be done after the target stops (after this one
819 step). This is useful to implement the 'step n' kind of commands, in
820 case of asynchronous targets. We had to split step_1 into two parts,
821 one to be done before proceed() and one afterwards. This function is
822 called in case of step n with n>1, after the first step operation has
823 been completed.*/
824 static void
825 step_once (int skip_subroutines, int single_inst, int count)
826 {
827 struct continuation_arg *arg1;
828 struct continuation_arg *arg2;
829 struct continuation_arg *arg3;
830 struct frame_info *frame;
831
832 if (count > 0)
833 {
834 clear_proceed_status ();
835
836 frame = get_current_frame ();
837 if (!frame) /* Avoid coredump here. Why tho? */
838 error (_("No current frame"));
839 step_frame_id = get_frame_id (frame);
840
841 if (!single_inst)
842 {
843 find_pc_line_pc_range (stop_pc, &step_range_start, &step_range_end);
844
845 /* If we have no line info, switch to stepi mode. */
846 if (step_range_end == 0 && step_stop_if_no_debug)
847 {
848 step_range_start = step_range_end = 1;
849 }
850 else if (step_range_end == 0)
851 {
852 char *name;
853 if (find_pc_partial_function (stop_pc, &name, &step_range_start,
854 &step_range_end) == 0)
855 error (_("Cannot find bounds of current function"));
856
857 target_terminal_ours ();
858 printf_filtered (_("\
859 Single stepping until exit from function %s, \n\
860 which has no line number information.\n"), name);
861 }
862 }
863 else
864 {
865 /* Say we are stepping, but stop after one insn whatever it does. */
866 step_range_start = step_range_end = 1;
867 if (!skip_subroutines)
868 /* It is stepi.
869 Don't step over function calls, not even to functions lacking
870 line numbers. */
871 step_over_calls = STEP_OVER_NONE;
872 }
873
874 if (skip_subroutines)
875 step_over_calls = STEP_OVER_ALL;
876
877 step_multi = (count > 1);
878 arg1 =
879 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
880 arg2 =
881 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
882 arg3 =
883 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
884 arg1->next = arg2;
885 arg1->data.integer = skip_subroutines;
886 arg2->next = arg3;
887 arg2->data.integer = single_inst;
888 arg3->next = NULL;
889 arg3->data.integer = count;
890 add_intermediate_continuation (step_1_continuation, arg1);
891 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
892 }
893 }
894
895 \f
896 /* Continue program at specified address. */
897
898 static void
899 jump_command (char *arg, int from_tty)
900 {
901 CORE_ADDR addr;
902 struct symtabs_and_lines sals;
903 struct symtab_and_line sal;
904 struct symbol *fn;
905 struct symbol *sfn;
906 int async_exec = 0;
907
908 ERROR_NO_INFERIOR;
909
910 /* Find out whether we must run in the background. */
911 if (arg != NULL)
912 async_exec = strip_bg_char (&arg);
913
914 /* If we must run in the background, but the target can't do it,
915 error out. */
916 if (async_exec && !target_can_async_p ())
917 error (_("Asynchronous execution not supported on this target."));
918
919 /* If we are not asked to run in the bg, then prepare to run in the
920 foreground, synchronously. */
921 if (!async_exec && target_can_async_p ())
922 {
923 /* Simulate synchronous execution */
924 async_disable_stdin ();
925 }
926
927 if (!arg)
928 error_no_arg (_("starting address"));
929
930 sals = decode_line_spec_1 (arg, 1);
931 if (sals.nelts != 1)
932 {
933 error (_("Unreasonable jump request"));
934 }
935
936 sal = sals.sals[0];
937 xfree (sals.sals);
938
939 if (sal.symtab == 0 && sal.pc == 0)
940 error (_("No source file has been specified."));
941
942 resolve_sal_pc (&sal); /* May error out */
943
944 /* See if we are trying to jump to another function. */
945 fn = get_frame_function (get_current_frame ());
946 sfn = find_pc_function (sal.pc);
947 if (fn != NULL && sfn != fn)
948 {
949 if (!query ("Line %d is not in `%s'. Jump anyway? ", sal.line,
950 SYMBOL_PRINT_NAME (fn)))
951 {
952 error (_("Not confirmed."));
953 /* NOTREACHED */
954 }
955 }
956
957 if (sfn != NULL)
958 {
959 fixup_symbol_section (sfn, 0);
960 if (section_is_overlay (SYMBOL_BFD_SECTION (sfn)) &&
961 !section_is_mapped (SYMBOL_BFD_SECTION (sfn)))
962 {
963 if (!query ("WARNING!!! Destination is in unmapped overlay! Jump anyway? "))
964 {
965 error (_("Not confirmed."));
966 /* NOTREACHED */
967 }
968 }
969 }
970
971 addr = sal.pc;
972
973 if (from_tty)
974 {
975 printf_filtered (_("Continuing at "));
976 deprecated_print_address_numeric (addr, 1, gdb_stdout);
977 printf_filtered (".\n");
978 }
979
980 clear_proceed_status ();
981 proceed (addr, TARGET_SIGNAL_0, 0);
982 }
983 \f
984
985 /* Go to line or address in current procedure */
986 static void
987 go_command (char *line_no, int from_tty)
988 {
989 if (line_no == (char *) NULL || !*line_no)
990 printf_filtered (GO_USAGE);
991 else
992 {
993 tbreak_command (line_no, from_tty);
994 jump_command (line_no, from_tty);
995 }
996 }
997 \f
998
999 /* Continue program giving it specified signal. */
1000
1001 static void
1002 signal_command (char *signum_exp, int from_tty)
1003 {
1004 enum target_signal oursig;
1005
1006 dont_repeat (); /* Too dangerous. */
1007 ERROR_NO_INFERIOR;
1008
1009 if (!signum_exp)
1010 error_no_arg (_("signal number"));
1011
1012 /* It would be even slicker to make signal names be valid expressions,
1013 (the type could be "enum $signal" or some such), then the user could
1014 assign them to convenience variables. */
1015 oursig = target_signal_from_name (signum_exp);
1016
1017 if (oursig == TARGET_SIGNAL_UNKNOWN)
1018 {
1019 /* No, try numeric. */
1020 int num = parse_and_eval_long (signum_exp);
1021
1022 if (num == 0)
1023 oursig = TARGET_SIGNAL_0;
1024 else
1025 oursig = target_signal_from_command (num);
1026 }
1027
1028 if (from_tty)
1029 {
1030 if (oursig == TARGET_SIGNAL_0)
1031 printf_filtered (_("Continuing with no signal.\n"));
1032 else
1033 printf_filtered (_("Continuing with signal %s.\n"),
1034 target_signal_to_name (oursig));
1035 }
1036
1037 clear_proceed_status ();
1038 /* "signal 0" should not get stuck if we are stopped at a breakpoint.
1039 FIXME: Neither should "signal foo" but when I tried passing
1040 (CORE_ADDR)-1 unconditionally I got a testsuite failure which I haven't
1041 tried to track down yet. */
1042 proceed (oursig == TARGET_SIGNAL_0 ? (CORE_ADDR) -1 : stop_pc, oursig, 0);
1043 }
1044
1045 /* Proceed until we reach a different source line with pc greater than
1046 our current one or exit the function. We skip calls in both cases.
1047
1048 Note that eventually this command should probably be changed so
1049 that only source lines are printed out when we hit the breakpoint
1050 we set. This may involve changes to wait_for_inferior and the
1051 proceed status code. */
1052
1053 static void
1054 until_next_command (int from_tty)
1055 {
1056 struct frame_info *frame;
1057 CORE_ADDR pc;
1058 struct symbol *func;
1059 struct symtab_and_line sal;
1060
1061 clear_proceed_status ();
1062
1063 frame = get_current_frame ();
1064
1065 /* Step until either exited from this function or greater
1066 than the current line (if in symbolic section) or pc (if
1067 not). */
1068
1069 pc = read_pc ();
1070 func = find_pc_function (pc);
1071
1072 if (!func)
1073 {
1074 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
1075
1076 if (msymbol == NULL)
1077 error (_("Execution is not within a known function."));
1078
1079 step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
1080 step_range_end = pc;
1081 }
1082 else
1083 {
1084 sal = find_pc_line (pc, 0);
1085
1086 step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
1087 step_range_end = sal.end;
1088 }
1089
1090 step_over_calls = STEP_OVER_ALL;
1091 step_frame_id = get_frame_id (frame);
1092
1093 step_multi = 0; /* Only one call to proceed */
1094
1095 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
1096 }
1097
1098 static void
1099 until_command (char *arg, int from_tty)
1100 {
1101 int async_exec = 0;
1102
1103 if (!target_has_execution)
1104 error (_("The program is not running."));
1105
1106 /* Find out whether we must run in the background. */
1107 if (arg != NULL)
1108 async_exec = strip_bg_char (&arg);
1109
1110 /* If we must run in the background, but the target can't do it,
1111 error out. */
1112 if (async_exec && !target_can_async_p ())
1113 error (_("Asynchronous execution not supported on this target."));
1114
1115 /* If we are not asked to run in the bg, then prepare to run in the
1116 foreground, synchronously. */
1117 if (!async_exec && target_can_async_p ())
1118 {
1119 /* Simulate synchronous execution */
1120 async_disable_stdin ();
1121 }
1122
1123 if (arg)
1124 until_break_command (arg, from_tty, 0);
1125 else
1126 until_next_command (from_tty);
1127 }
1128
1129 static void
1130 advance_command (char *arg, int from_tty)
1131 {
1132 int async_exec = 0;
1133
1134 if (!target_has_execution)
1135 error (_("The program is not running."));
1136
1137 if (arg == NULL)
1138 error_no_arg (_("a location"));
1139
1140 /* Find out whether we must run in the background. */
1141 if (arg != NULL)
1142 async_exec = strip_bg_char (&arg);
1143
1144 /* If we must run in the background, but the target can't do it,
1145 error out. */
1146 if (async_exec && !target_can_async_p ())
1147 error (_("Asynchronous execution not supported on this target."));
1148
1149 /* If we are not asked to run in the bg, then prepare to run in the
1150 foreground, synchronously. */
1151 if (!async_exec && target_can_async_p ())
1152 {
1153 /* Simulate synchronous execution. */
1154 async_disable_stdin ();
1155 }
1156
1157 until_break_command (arg, from_tty, 1);
1158 }
1159 \f
1160 /* Print the result of a function at the end of a 'finish' command. */
1161
1162 static void
1163 print_return_value (int struct_return, struct type *value_type)
1164 {
1165 struct gdbarch *gdbarch = current_gdbarch;
1166 struct cleanup *old_chain;
1167 struct ui_stream *stb;
1168 struct value *value;
1169
1170 CHECK_TYPEDEF (value_type);
1171 gdb_assert (TYPE_CODE (value_type) != TYPE_CODE_VOID);
1172
1173 /* FIXME: 2003-09-27: When returning from a nested inferior function
1174 call, it's possible (with no help from the architecture vector)
1175 to locate and return/print a "struct return" value. This is just
1176 a more complicated case of what is already being done in in the
1177 inferior function call code. In fact, when inferior function
1178 calls are made async, this will likely be made the norm. */
1179
1180 switch (gdbarch_return_value (gdbarch, value_type, NULL, NULL, NULL))
1181 {
1182 case RETURN_VALUE_REGISTER_CONVENTION:
1183 case RETURN_VALUE_ABI_RETURNS_ADDRESS:
1184 case RETURN_VALUE_ABI_PRESERVES_ADDRESS:
1185 value = allocate_value (value_type);
1186 gdbarch_return_value (current_gdbarch, value_type, stop_registers,
1187 value_contents_raw (value), NULL);
1188 break;
1189 case RETURN_VALUE_STRUCT_CONVENTION:
1190 value = NULL;
1191 break;
1192 default:
1193 internal_error (__FILE__, __LINE__, _("bad switch"));
1194 }
1195
1196 if (value)
1197 {
1198 /* Print it. */
1199 stb = ui_out_stream_new (uiout);
1200 old_chain = make_cleanup_ui_out_stream_delete (stb);
1201 ui_out_text (uiout, "Value returned is ");
1202 ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
1203 record_latest_value (value));
1204 ui_out_text (uiout, " = ");
1205 value_print (value, stb->stream, 0, Val_no_prettyprint);
1206 ui_out_field_stream (uiout, "return-value", stb);
1207 ui_out_text (uiout, "\n");
1208 do_cleanups (old_chain);
1209 }
1210 else
1211 {
1212 ui_out_text (uiout, "Value returned has type: ");
1213 ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
1214 ui_out_text (uiout, ".");
1215 ui_out_text (uiout, " Cannot determine contents\n");
1216 }
1217 }
1218
1219 /* Stuff that needs to be done by the finish command after the target
1220 has stopped. In asynchronous mode, we wait for the target to stop
1221 in the call to poll or select in the event loop, so it is
1222 impossible to do all the stuff as part of the finish_command
1223 function itself. The only chance we have to complete this command
1224 is in fetch_inferior_event, which is called by the event loop as
1225 soon as it detects that the target has stopped. This function is
1226 called via the cmd_continuation pointer. */
1227
1228 static void
1229 finish_command_continuation (struct continuation_arg *arg)
1230 {
1231 struct symbol *function;
1232 struct breakpoint *breakpoint;
1233 struct cleanup *cleanups;
1234
1235 breakpoint = (struct breakpoint *) arg->data.pointer;
1236 function = (struct symbol *) arg->next->data.pointer;
1237 cleanups = (struct cleanup *) arg->next->next->data.pointer;
1238
1239 if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1240 && function != NULL)
1241 {
1242 struct type *value_type;
1243 int struct_return;
1244 int gcc_compiled;
1245
1246 value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1247 if (!value_type)
1248 internal_error (__FILE__, __LINE__,
1249 _("finish_command: function has no target type"));
1250
1251 if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1252 {
1253 do_exec_cleanups (cleanups);
1254 return;
1255 }
1256
1257 CHECK_TYPEDEF (value_type);
1258 gcc_compiled = BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function));
1259 struct_return = using_struct_return (value_type, gcc_compiled);
1260
1261 print_return_value (struct_return, value_type);
1262 }
1263
1264 do_exec_cleanups (cleanups);
1265 }
1266
1267 /* "finish": Set a temporary breakpoint at the place the selected
1268 frame will return to, then continue. */
1269
1270 static void
1271 finish_command (char *arg, int from_tty)
1272 {
1273 struct symtab_and_line sal;
1274 struct frame_info *frame;
1275 struct symbol *function;
1276 struct breakpoint *breakpoint;
1277 struct cleanup *old_chain;
1278 struct continuation_arg *arg1, *arg2, *arg3;
1279
1280 int async_exec = 0;
1281
1282 /* Find out whether we must run in the background. */
1283 if (arg != NULL)
1284 async_exec = strip_bg_char (&arg);
1285
1286 /* If we must run in the background, but the target can't do it,
1287 error out. */
1288 if (async_exec && !target_can_async_p ())
1289 error (_("Asynchronous execution not supported on this target."));
1290
1291 /* If we are not asked to run in the bg, then prepare to run in the
1292 foreground, synchronously. */
1293 if (!async_exec && target_can_async_p ())
1294 {
1295 /* Simulate synchronous execution. */
1296 async_disable_stdin ();
1297 }
1298
1299 if (arg)
1300 error (_("The \"finish\" command does not take any arguments."));
1301 if (!target_has_execution)
1302 error (_("The program is not running."));
1303
1304 frame = get_prev_frame (get_selected_frame (_("No selected frame.")));
1305 if (frame == 0)
1306 error (_("\"finish\" not meaningful in the outermost frame."));
1307
1308 clear_proceed_status ();
1309
1310 sal = find_pc_line (get_frame_pc (frame), 0);
1311 sal.pc = get_frame_pc (frame);
1312
1313 breakpoint = set_momentary_breakpoint (sal, get_frame_id (frame), bp_finish);
1314
1315 if (!target_can_async_p ())
1316 old_chain = make_cleanup_delete_breakpoint (breakpoint);
1317 else
1318 old_chain = make_exec_cleanup_delete_breakpoint (breakpoint);
1319
1320 /* Find the function we will return from. */
1321
1322 function = find_pc_function (get_frame_pc (get_selected_frame (NULL)));
1323
1324 /* Print info on the selected frame, including level number but not
1325 source. */
1326 if (from_tty)
1327 {
1328 printf_filtered (_("Run till exit from "));
1329 print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
1330 }
1331
1332 /* If running asynchronously and the target support asynchronous
1333 execution, set things up for the rest of the finish command to be
1334 completed later on, when gdb has detected that the target has
1335 stopped, in fetch_inferior_event. */
1336 if (target_can_async_p ())
1337 {
1338 arg1 =
1339 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1340 arg2 =
1341 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1342 arg3 =
1343 (struct continuation_arg *) xmalloc (sizeof (struct continuation_arg));
1344 arg1->next = arg2;
1345 arg2->next = arg3;
1346 arg3->next = NULL;
1347 arg1->data.pointer = breakpoint;
1348 arg2->data.pointer = function;
1349 arg3->data.pointer = old_chain;
1350 add_continuation (finish_command_continuation, arg1);
1351 }
1352
1353 proceed_to_finish = 1; /* We want stop_registers, please... */
1354 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1355
1356 /* Do this only if not running asynchronously or if the target
1357 cannot do async execution. Otherwise, complete this command when
1358 the target actually stops, in fetch_inferior_event. */
1359 if (!target_can_async_p ())
1360 {
1361 /* Did we stop at our breakpoint? */
1362 if (bpstat_find_breakpoint (stop_bpstat, breakpoint) != NULL
1363 && function != NULL)
1364 {
1365 struct type *value_type;
1366 int struct_return;
1367 int gcc_compiled;
1368
1369 value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (function));
1370 if (!value_type)
1371 internal_error (__FILE__, __LINE__,
1372 _("finish_command: function has no target type"));
1373
1374 /* FIXME: Shouldn't we do the cleanups before returning? */
1375 if (TYPE_CODE (value_type) == TYPE_CODE_VOID)
1376 return;
1377
1378 CHECK_TYPEDEF (value_type);
1379 gcc_compiled = BLOCK_GCC_COMPILED (SYMBOL_BLOCK_VALUE (function));
1380 struct_return = using_struct_return (value_type, gcc_compiled);
1381
1382 print_return_value (struct_return, value_type);
1383 }
1384
1385 do_cleanups (old_chain);
1386 }
1387 }
1388 \f
1389
1390 static void
1391 program_info (char *args, int from_tty)
1392 {
1393 bpstat bs = stop_bpstat;
1394 int num;
1395 int stat = bpstat_num (&bs, &num);
1396
1397 if (!target_has_execution)
1398 {
1399 printf_filtered (_("The program being debugged is not being run.\n"));
1400 return;
1401 }
1402
1403 target_files_info ();
1404 printf_filtered (_("Program stopped at %s.\n"),
1405 hex_string ((unsigned long) stop_pc));
1406 if (stop_step)
1407 printf_filtered (_("It stopped after being stepped.\n"));
1408 else if (stat != 0)
1409 {
1410 /* There may be several breakpoints in the same place, so this
1411 isn't as strange as it seems. */
1412 while (stat != 0)
1413 {
1414 if (stat < 0)
1415 {
1416 printf_filtered (_("\
1417 It stopped at a breakpoint that has since been deleted.\n"));
1418 }
1419 else
1420 printf_filtered (_("It stopped at breakpoint %d.\n"), num);
1421 stat = bpstat_num (&bs, &num);
1422 }
1423 }
1424 else if (stop_signal != TARGET_SIGNAL_0)
1425 {
1426 printf_filtered (_("It stopped with signal %s, %s.\n"),
1427 target_signal_to_name (stop_signal),
1428 target_signal_to_string (stop_signal));
1429 }
1430
1431 if (!from_tty)
1432 {
1433 printf_filtered (_("\
1434 Type \"info stack\" or \"info registers\" for more information.\n"));
1435 }
1436 }
1437 \f
1438 static void
1439 environment_info (char *var, int from_tty)
1440 {
1441 if (var)
1442 {
1443 char *val = get_in_environ (inferior_environ, var);
1444 if (val)
1445 {
1446 puts_filtered (var);
1447 puts_filtered (" = ");
1448 puts_filtered (val);
1449 puts_filtered ("\n");
1450 }
1451 else
1452 {
1453 puts_filtered ("Environment variable \"");
1454 puts_filtered (var);
1455 puts_filtered ("\" not defined.\n");
1456 }
1457 }
1458 else
1459 {
1460 char **vector = environ_vector (inferior_environ);
1461 while (*vector)
1462 {
1463 puts_filtered (*vector++);
1464 puts_filtered ("\n");
1465 }
1466 }
1467 }
1468
1469 static void
1470 set_environment_command (char *arg, int from_tty)
1471 {
1472 char *p, *val, *var;
1473 int nullset = 0;
1474
1475 if (arg == 0)
1476 error_no_arg (_("environment variable and value"));
1477
1478 /* Find seperation between variable name and value */
1479 p = (char *) strchr (arg, '=');
1480 val = (char *) strchr (arg, ' ');
1481
1482 if (p != 0 && val != 0)
1483 {
1484 /* We have both a space and an equals. If the space is before the
1485 equals, walk forward over the spaces til we see a nonspace
1486 (possibly the equals). */
1487 if (p > val)
1488 while (*val == ' ')
1489 val++;
1490
1491 /* Now if the = is after the char following the spaces,
1492 take the char following the spaces. */
1493 if (p > val)
1494 p = val - 1;
1495 }
1496 else if (val != 0 && p == 0)
1497 p = val;
1498
1499 if (p == arg)
1500 error_no_arg (_("environment variable to set"));
1501
1502 if (p == 0 || p[1] == 0)
1503 {
1504 nullset = 1;
1505 if (p == 0)
1506 p = arg + strlen (arg); /* So that savestring below will work */
1507 }
1508 else
1509 {
1510 /* Not setting variable value to null */
1511 val = p + 1;
1512 while (*val == ' ' || *val == '\t')
1513 val++;
1514 }
1515
1516 while (p != arg && (p[-1] == ' ' || p[-1] == '\t'))
1517 p--;
1518
1519 var = savestring (arg, p - arg);
1520 if (nullset)
1521 {
1522 printf_filtered (_("\
1523 Setting environment variable \"%s\" to null value.\n"),
1524 var);
1525 set_in_environ (inferior_environ, var, "");
1526 }
1527 else
1528 set_in_environ (inferior_environ, var, val);
1529 xfree (var);
1530 }
1531
1532 static void
1533 unset_environment_command (char *var, int from_tty)
1534 {
1535 if (var == 0)
1536 {
1537 /* If there is no argument, delete all environment variables.
1538 Ask for confirmation if reading from the terminal. */
1539 if (!from_tty || query (_("Delete all environment variables? ")))
1540 {
1541 free_environ (inferior_environ);
1542 inferior_environ = make_environ ();
1543 }
1544 }
1545 else
1546 unset_in_environ (inferior_environ, var);
1547 }
1548
1549 /* Handle the execution path (PATH variable) */
1550
1551 static const char path_var_name[] = "PATH";
1552
1553 static void
1554 path_info (char *args, int from_tty)
1555 {
1556 puts_filtered ("Executable and object file path: ");
1557 puts_filtered (get_in_environ (inferior_environ, path_var_name));
1558 puts_filtered ("\n");
1559 }
1560
1561 /* Add zero or more directories to the front of the execution path. */
1562
1563 static void
1564 path_command (char *dirname, int from_tty)
1565 {
1566 char *exec_path;
1567 char *env;
1568 dont_repeat ();
1569 env = get_in_environ (inferior_environ, path_var_name);
1570 /* Can be null if path is not set */
1571 if (!env)
1572 env = "";
1573 exec_path = xstrdup (env);
1574 mod_path (dirname, &exec_path);
1575 set_in_environ (inferior_environ, path_var_name, exec_path);
1576 xfree (exec_path);
1577 if (from_tty)
1578 path_info ((char *) NULL, from_tty);
1579 }
1580 \f
1581
1582 /* Print out the machine register regnum. If regnum is -1, print all
1583 registers (print_all == 1) or all non-float and non-vector
1584 registers (print_all == 0).
1585
1586 For most machines, having all_registers_info() print the
1587 register(s) one per line is good enough. If a different format is
1588 required, (eg, for MIPS or Pyramid 90x, which both have lots of
1589 regs), or there is an existing convention for showing all the
1590 registers, define the architecture method PRINT_REGISTERS_INFO to
1591 provide that format. */
1592
1593 void
1594 default_print_registers_info (struct gdbarch *gdbarch,
1595 struct ui_file *file,
1596 struct frame_info *frame,
1597 int regnum, int print_all)
1598 {
1599 int i;
1600 const int numregs = gdbarch_num_regs (current_gdbarch)
1601 + gdbarch_num_pseudo_regs (current_gdbarch);
1602 gdb_byte buffer[MAX_REGISTER_SIZE];
1603
1604 for (i = 0; i < numregs; i++)
1605 {
1606 /* Decide between printing all regs, non-float / vector regs, or
1607 specific reg. */
1608 if (regnum == -1)
1609 {
1610 if (print_all)
1611 {
1612 if (!gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
1613 continue;
1614 }
1615 else
1616 {
1617 if (!gdbarch_register_reggroup_p (gdbarch, i, general_reggroup))
1618 continue;
1619 }
1620 }
1621 else
1622 {
1623 if (i != regnum)
1624 continue;
1625 }
1626
1627 /* If the register name is empty, it is undefined for this
1628 processor, so don't display anything. */
1629 if (gdbarch_register_name (current_gdbarch, i) == NULL
1630 || *(gdbarch_register_name (current_gdbarch, i)) == '\0')
1631 continue;
1632
1633 fputs_filtered (gdbarch_register_name (current_gdbarch, i), file);
1634 print_spaces_filtered (15 - strlen (gdbarch_register_name
1635 (current_gdbarch, i)), file);
1636
1637 /* Get the data in raw format. */
1638 if (! frame_register_read (frame, i, buffer))
1639 {
1640 fprintf_filtered (file, "*value not available*\n");
1641 continue;
1642 }
1643
1644 /* If virtual format is floating, print it that way, and in raw
1645 hex. */
1646 if (TYPE_CODE (register_type (current_gdbarch, i)) == TYPE_CODE_FLT)
1647 {
1648 int j;
1649
1650 val_print (register_type (current_gdbarch, i), buffer, 0, 0,
1651 file, 0, 1, 0, Val_pretty_default);
1652
1653 fprintf_filtered (file, "\t(raw 0x");
1654 for (j = 0; j < register_size (current_gdbarch, i); j++)
1655 {
1656 int idx;
1657 if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
1658 idx = j;
1659 else
1660 idx = register_size (current_gdbarch, i) - 1 - j;
1661 fprintf_filtered (file, "%02x", (unsigned char) buffer[idx]);
1662 }
1663 fprintf_filtered (file, ")");
1664 }
1665 else
1666 {
1667 /* Print the register in hex. */
1668 val_print (register_type (current_gdbarch, i), buffer, 0, 0,
1669 file, 'x', 1, 0, Val_pretty_default);
1670 /* If not a vector register, print it also according to its
1671 natural format. */
1672 if (TYPE_VECTOR (register_type (current_gdbarch, i)) == 0)
1673 {
1674 fprintf_filtered (file, "\t");
1675 val_print (register_type (current_gdbarch, i), buffer, 0, 0,
1676 file, 0, 1, 0, Val_pretty_default);
1677 }
1678 }
1679
1680 fprintf_filtered (file, "\n");
1681 }
1682 }
1683
1684 void
1685 registers_info (char *addr_exp, int fpregs)
1686 {
1687 struct frame_info *frame;
1688 int regnum, numregs;
1689 char *end;
1690
1691 if (!target_has_registers)
1692 error (_("The program has no registers now."));
1693 frame = get_selected_frame (NULL);
1694
1695 if (!addr_exp)
1696 {
1697 gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1698 frame, -1, fpregs);
1699 return;
1700 }
1701
1702 while (*addr_exp != '\0')
1703 {
1704 char *start;
1705 const char *end;
1706
1707 /* Keep skipping leading white space. */
1708 if (isspace ((*addr_exp)))
1709 {
1710 addr_exp++;
1711 continue;
1712 }
1713
1714 /* Discard any leading ``$''. Check that there is something
1715 resembling a register following it. */
1716 if (addr_exp[0] == '$')
1717 addr_exp++;
1718 if (isspace ((*addr_exp)) || (*addr_exp) == '\0')
1719 error (_("Missing register name"));
1720
1721 /* Find the start/end of this register name/num/group. */
1722 start = addr_exp;
1723 while ((*addr_exp) != '\0' && !isspace ((*addr_exp)))
1724 addr_exp++;
1725 end = addr_exp;
1726
1727 /* Figure out what we've found and display it. */
1728
1729 /* A register name? */
1730 {
1731 int regnum = frame_map_name_to_regnum (frame,
1732 start, end - start);
1733 if (regnum >= 0)
1734 {
1735 gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1736 frame, regnum, fpregs);
1737 continue;
1738 }
1739 }
1740
1741 /* A register number? (how portable is this one?). */
1742 {
1743 char *endptr;
1744 int regnum = strtol (start, &endptr, 0);
1745 if (endptr == end
1746 && regnum >= 0
1747 && regnum < gdbarch_num_regs (current_gdbarch)
1748 + gdbarch_num_pseudo_regs (current_gdbarch))
1749 {
1750 gdbarch_print_registers_info (current_gdbarch, gdb_stdout,
1751 frame, regnum, fpregs);
1752 continue;
1753 }
1754 }
1755
1756 /* A register group? */
1757 {
1758 struct reggroup *group;
1759 for (group = reggroup_next (current_gdbarch, NULL);
1760 group != NULL;
1761 group = reggroup_next (current_gdbarch, group))
1762 {
1763 /* Don't bother with a length check. Should the user
1764 enter a short register group name, go with the first
1765 group that matches. */
1766 if (strncmp (start, reggroup_name (group), end - start) == 0)
1767 break;
1768 }
1769 if (group != NULL)
1770 {
1771 int regnum;
1772 for (regnum = 0;
1773 regnum < gdbarch_num_regs (current_gdbarch)
1774 + gdbarch_num_pseudo_regs (current_gdbarch);
1775 regnum++)
1776 {
1777 if (gdbarch_register_reggroup_p (current_gdbarch, regnum,
1778 group))
1779 gdbarch_print_registers_info (current_gdbarch,
1780 gdb_stdout, frame,
1781 regnum, fpregs);
1782 }
1783 continue;
1784 }
1785 }
1786
1787 /* Nothing matched. */
1788 error (_("Invalid register `%.*s'"), (int) (end - start), start);
1789 }
1790 }
1791
1792 void
1793 all_registers_info (char *addr_exp, int from_tty)
1794 {
1795 registers_info (addr_exp, 1);
1796 }
1797
1798 static void
1799 nofp_registers_info (char *addr_exp, int from_tty)
1800 {
1801 registers_info (addr_exp, 0);
1802 }
1803
1804 static void
1805 print_vector_info (struct gdbarch *gdbarch, struct ui_file *file,
1806 struct frame_info *frame, const char *args)
1807 {
1808 if (gdbarch_print_vector_info_p (gdbarch))
1809 gdbarch_print_vector_info (gdbarch, file, frame, args);
1810 else
1811 {
1812 int regnum;
1813 int printed_something = 0;
1814
1815 for (regnum = 0;
1816 regnum < gdbarch_num_regs (current_gdbarch)
1817 + gdbarch_num_pseudo_regs (current_gdbarch);
1818 regnum++)
1819 {
1820 if (gdbarch_register_reggroup_p (gdbarch, regnum, vector_reggroup))
1821 {
1822 printed_something = 1;
1823 gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
1824 }
1825 }
1826 if (!printed_something)
1827 fprintf_filtered (file, "No vector information\n");
1828 }
1829 }
1830
1831 static void
1832 vector_info (char *args, int from_tty)
1833 {
1834 if (!target_has_registers)
1835 error (_("The program has no registers now."));
1836
1837 print_vector_info (current_gdbarch, gdb_stdout,
1838 get_selected_frame (NULL), args);
1839 }
1840 \f
1841
1842 /*
1843 * TODO:
1844 * Should save/restore the tty state since it might be that the
1845 * program to be debugged was started on this tty and it wants
1846 * the tty in some state other than what we want. If it's running
1847 * on another terminal or without a terminal, then saving and
1848 * restoring the tty state is a harmless no-op.
1849 * This only needs to be done if we are attaching to a process.
1850 */
1851
1852 /*
1853 attach_command --
1854 takes a program started up outside of gdb and ``attaches'' to it.
1855 This stops it cold in its tracks and allows us to start debugging it.
1856 and wait for the trace-trap that results from attaching. */
1857
1858 void
1859 attach_command (char *args, int from_tty)
1860 {
1861 char *exec_file;
1862 char *full_exec_path = NULL;
1863
1864 dont_repeat (); /* Not for the faint of heart */
1865
1866 if (target_has_execution)
1867 {
1868 if (query ("A program is being debugged already. Kill it? "))
1869 target_kill ();
1870 else
1871 error (_("Not killed."));
1872 }
1873
1874 /* Clean up any leftovers from other runs. Some other things from
1875 this function should probably be moved into target_pre_inferior. */
1876 target_pre_inferior (from_tty);
1877
1878 /* Clear out solib state. Otherwise the solib state of the previous
1879 inferior might have survived and is entirely wrong for the new
1880 target. This has been observed on GNU/Linux using glibc 2.3. How
1881 to reproduce:
1882
1883 bash$ ./foo&
1884 [1] 4711
1885 bash$ ./foo&
1886 [1] 4712
1887 bash$ gdb ./foo
1888 [...]
1889 (gdb) attach 4711
1890 (gdb) detach
1891 (gdb) attach 4712
1892 Cannot access memory at address 0xdeadbeef
1893 */
1894 #ifdef CLEAR_SOLIB
1895 CLEAR_SOLIB ();
1896 #else
1897 clear_solib ();
1898 #endif
1899
1900 target_attach (args, from_tty);
1901
1902 /* Set up the "saved terminal modes" of the inferior
1903 based on what modes we are starting it with. */
1904 target_terminal_init ();
1905
1906 /* Set up execution context to know that we should return from
1907 wait_for_inferior as soon as the target reports a stop. */
1908 init_wait_for_inferior ();
1909 clear_proceed_status ();
1910
1911 /* No traps are generated when attaching to inferior under Mach 3
1912 or GNU hurd. */
1913 #ifndef ATTACH_NO_WAIT
1914 /* Careful here. See comments in inferior.h. Basically some OSes
1915 don't ignore SIGSTOPs on continue requests anymore. We need a
1916 way for handle_inferior_event to reset the stop_signal variable
1917 after an attach, and this is what STOP_QUIETLY_NO_SIGSTOP is for. */
1918 stop_soon = STOP_QUIETLY_NO_SIGSTOP;
1919 wait_for_inferior ();
1920 stop_soon = NO_STOP_QUIETLY;
1921 #endif
1922
1923 /*
1924 * If no exec file is yet known, try to determine it from the
1925 * process itself.
1926 */
1927 exec_file = (char *) get_exec_file (0);
1928 if (!exec_file)
1929 {
1930 exec_file = target_pid_to_exec_file (PIDGET (inferior_ptid));
1931 if (exec_file)
1932 {
1933 /* It's possible we don't have a full path, but rather just a
1934 filename. Some targets, such as HP-UX, don't provide the
1935 full path, sigh.
1936
1937 Attempt to qualify the filename against the source path.
1938 (If that fails, we'll just fall back on the original
1939 filename. Not much more we can do...)
1940 */
1941 if (!source_full_path_of (exec_file, &full_exec_path))
1942 full_exec_path = savestring (exec_file, strlen (exec_file));
1943
1944 exec_file_attach (full_exec_path, from_tty);
1945 symbol_file_add_main (full_exec_path, from_tty);
1946 }
1947 }
1948 else
1949 {
1950 reopen_exec_file ();
1951 reread_symbols ();
1952 }
1953
1954 /* Take any necessary post-attaching actions for this platform.
1955 */
1956 target_post_attach (PIDGET (inferior_ptid));
1957
1958 post_create_inferior (&current_target, from_tty);
1959
1960 /* Install inferior's terminal modes. */
1961 target_terminal_inferior ();
1962
1963 normal_stop ();
1964
1965 if (deprecated_attach_hook)
1966 deprecated_attach_hook ();
1967 }
1968
1969 /*
1970 * detach_command --
1971 * takes a program previously attached to and detaches it.
1972 * The program resumes execution and will no longer stop
1973 * on signals, etc. We better not have left any breakpoints
1974 * in the program or it'll die when it hits one. For this
1975 * to work, it may be necessary for the process to have been
1976 * previously attached. It *might* work if the program was
1977 * started via the normal ptrace (PTRACE_TRACEME).
1978 */
1979
1980 static void
1981 detach_command (char *args, int from_tty)
1982 {
1983 dont_repeat (); /* Not for the faint of heart. */
1984 target_detach (args, from_tty);
1985 #if defined(SOLIB_RESTART)
1986 SOLIB_RESTART ();
1987 #endif
1988 if (deprecated_detach_hook)
1989 deprecated_detach_hook ();
1990 }
1991
1992 /* Disconnect from the current target without resuming it (leaving it
1993 waiting for a debugger).
1994
1995 We'd better not have left any breakpoints in the program or the
1996 next debugger will get confused. Currently only supported for some
1997 remote targets, since the normal attach mechanisms don't work on
1998 stopped processes on some native platforms (e.g. GNU/Linux). */
1999
2000 static void
2001 disconnect_command (char *args, int from_tty)
2002 {
2003 dont_repeat (); /* Not for the faint of heart */
2004 target_disconnect (args, from_tty);
2005 #if defined(SOLIB_RESTART)
2006 SOLIB_RESTART ();
2007 #endif
2008 if (deprecated_detach_hook)
2009 deprecated_detach_hook ();
2010 }
2011
2012 /* Stop the execution of the target while running in async mode, in
2013 the backgound. */
2014 void
2015 interrupt_target_command (char *args, int from_tty)
2016 {
2017 if (target_can_async_p ())
2018 {
2019 dont_repeat (); /* Not for the faint of heart */
2020 target_stop ();
2021 }
2022 }
2023
2024 static void
2025 print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
2026 struct frame_info *frame, const char *args)
2027 {
2028 if (gdbarch_print_float_info_p (gdbarch))
2029 gdbarch_print_float_info (gdbarch, file, frame, args);
2030 else
2031 {
2032 int regnum;
2033 int printed_something = 0;
2034
2035 for (regnum = 0;
2036 regnum < gdbarch_num_regs (current_gdbarch)
2037 + gdbarch_num_pseudo_regs (current_gdbarch);
2038 regnum++)
2039 {
2040 if (gdbarch_register_reggroup_p (gdbarch, regnum, float_reggroup))
2041 {
2042 printed_something = 1;
2043 gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
2044 }
2045 }
2046 if (!printed_something)
2047 fprintf_filtered (file, "\
2048 No floating-point info available for this processor.\n");
2049 }
2050 }
2051
2052 static void
2053 float_info (char *args, int from_tty)
2054 {
2055 if (!target_has_registers)
2056 error (_("The program has no registers now."));
2057
2058 print_float_info (current_gdbarch, gdb_stdout,
2059 get_selected_frame (NULL), args);
2060 }
2061 \f
2062 static void
2063 unset_command (char *args, int from_tty)
2064 {
2065 printf_filtered (_("\
2066 \"unset\" must be followed by the name of an unset subcommand.\n"));
2067 help_list (unsetlist, "unset ", -1, gdb_stdout);
2068 }
2069
2070 void
2071 _initialize_infcmd (void)
2072 {
2073 struct cmd_list_element *c = NULL;
2074
2075 /* add the filename of the terminal connected to inferior I/O */
2076 add_setshow_filename_cmd ("inferior-tty", class_run,
2077 &inferior_io_terminal, _("\
2078 Set terminal for future runs of program being debugged."), _("\
2079 Show terminal for future runs of program being debugged."), _("\
2080 Usage: set inferior-tty /dev/pts/1"), NULL, NULL, &setlist, &showlist);
2081 add_com_alias ("tty", "set inferior-tty", class_alias, 0);
2082
2083 add_setshow_optional_filename_cmd ("args", class_run,
2084 &inferior_args, _("\
2085 Set argument list to give program being debugged when it is started."), _("\
2086 Show argument list to give program being debugged when it is started."), _("\
2087 Follow this command with any number of args, to be passed to the program."),
2088 notice_args_set,
2089 notice_args_read,
2090 &setlist, &showlist);
2091
2092 c = add_cmd ("environment", no_class, environment_info, _("\
2093 The environment to give the program, or one variable's value.\n\
2094 With an argument VAR, prints the value of environment variable VAR to\n\
2095 give the program being debugged. With no arguments, prints the entire\n\
2096 environment to be given to the program."), &showlist);
2097 set_cmd_completer (c, noop_completer);
2098
2099 add_prefix_cmd ("unset", no_class, unset_command,
2100 _("Complement to certain \"set\" commands."),
2101 &unsetlist, "unset ", 0, &cmdlist);
2102
2103 c = add_cmd ("environment", class_run, unset_environment_command, _("\
2104 Cancel environment variable VAR for the program.\n\
2105 This does not affect the program until the next \"run\" command."),
2106 &unsetlist);
2107 set_cmd_completer (c, noop_completer);
2108
2109 c = add_cmd ("environment", class_run, set_environment_command, _("\
2110 Set environment variable value to give the program.\n\
2111 Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
2112 VALUES of environment variables are uninterpreted strings.\n\
2113 This does not affect the program until the next \"run\" command."),
2114 &setlist);
2115 set_cmd_completer (c, noop_completer);
2116
2117 c = add_com ("path", class_files, path_command, _("\
2118 Add directory DIR(s) to beginning of search path for object files.\n\
2119 $cwd in the path means the current working directory.\n\
2120 This path is equivalent to the $PATH shell variable. It is a list of\n\
2121 directories, separated by colons. These directories are searched to find\n\
2122 fully linked executable files and separately compiled object files as needed."));
2123 set_cmd_completer (c, filename_completer);
2124
2125 c = add_cmd ("paths", no_class, path_info, _("\
2126 Current search path for finding object files.\n\
2127 $cwd in the path means the current working directory.\n\
2128 This path is equivalent to the $PATH shell variable. It is a list of\n\
2129 directories, separated by colons. These directories are searched to find\n\
2130 fully linked executable files and separately compiled object files as needed."),
2131 &showlist);
2132 set_cmd_completer (c, noop_completer);
2133
2134 add_com ("attach", class_run, attach_command, _("\
2135 Attach to a process or file outside of GDB.\n\
2136 This command attaches to another target, of the same type as your last\n\
2137 \"target\" command (\"info files\" will show your target stack).\n\
2138 The command may take as argument a process id or a device file.\n\
2139 For a process id, you must have permission to send the process a signal,\n\
2140 and it must have the same effective uid as the debugger.\n\
2141 When using \"attach\" with a process id, the debugger finds the\n\
2142 program running in the process, looking first in the current working\n\
2143 directory, or (if not found there) using the source file search path\n\
2144 (see the \"directory\" command). You can also use the \"file\" command\n\
2145 to specify the program, and to load its symbol table."));
2146
2147 add_prefix_cmd ("detach", class_run, detach_command, _("\
2148 Detach a process or file previously attached.\n\
2149 If a process, it is no longer traced, and it continues its execution. If\n\
2150 you were debugging a file, the file is closed and gdb no longer accesses it."),
2151 &detachlist, "detach ", 0, &cmdlist);
2152
2153 add_com ("disconnect", class_run, disconnect_command, _("\
2154 Disconnect from a target.\n\
2155 The target will wait for another debugger to connect. Not available for\n\
2156 all targets."));
2157
2158 add_com ("signal", class_run, signal_command, _("\
2159 Continue program giving it signal specified by the argument.\n\
2160 An argument of \"0\" means continue program without giving it a signal."));
2161
2162 add_com ("stepi", class_run, stepi_command, _("\
2163 Step one instruction exactly.\n\
2164 Argument N means do this N times (or till program stops for another reason)."));
2165 add_com_alias ("si", "stepi", class_alias, 0);
2166
2167 add_com ("nexti", class_run, nexti_command, _("\
2168 Step one instruction, but proceed through subroutine calls.\n\
2169 Argument N means do this N times (or till program stops for another reason)."));
2170 add_com_alias ("ni", "nexti", class_alias, 0);
2171
2172 add_com ("finish", class_run, finish_command, _("\
2173 Execute until selected stack frame returns.\n\
2174 Upon return, the value returned is printed and put in the value history."));
2175
2176 add_com ("next", class_run, next_command, _("\
2177 Step program, proceeding through subroutine calls.\n\
2178 Like the \"step\" command as long as subroutine calls do not happen;\n\
2179 when they do, the call is treated as one instruction.\n\
2180 Argument N means do this N times (or till program stops for another reason)."));
2181 add_com_alias ("n", "next", class_run, 1);
2182 if (xdb_commands)
2183 add_com_alias ("S", "next", class_run, 1);
2184
2185 add_com ("step", class_run, step_command, _("\
2186 Step program until it reaches a different source line.\n\
2187 Argument N means do this N times (or till program stops for another reason)."));
2188 add_com_alias ("s", "step", class_run, 1);
2189
2190 c = add_com ("until", class_run, until_command, _("\
2191 Execute until the program reaches a source line greater than the current\n\
2192 or a specified location (same args as break command) within the current frame."));
2193 set_cmd_completer (c, location_completer);
2194 add_com_alias ("u", "until", class_run, 1);
2195
2196 c = add_com ("advance", class_run, advance_command, _("\
2197 Continue the program up to the given location (same form as args for break command).\n\
2198 Execution will also stop upon exit from the current stack frame."));
2199 set_cmd_completer (c, location_completer);
2200
2201 c = add_com ("jump", class_run, jump_command, _("\
2202 Continue program being debugged at specified line or address.\n\
2203 Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
2204 for an address to start at."));
2205 set_cmd_completer (c, location_completer);
2206
2207 if (xdb_commands)
2208 {
2209 c = add_com ("go", class_run, go_command, _("\
2210 Usage: go <location>\n\
2211 Continue program being debugged, stopping at specified line or \n\
2212 address.\n\
2213 Give as argument either LINENUM or *ADDR, where ADDR is an \n\
2214 expression for an address to start at.\n\
2215 This command is a combination of tbreak and jump."));
2216 set_cmd_completer (c, location_completer);
2217 }
2218
2219 if (xdb_commands)
2220 add_com_alias ("g", "go", class_run, 1);
2221
2222 add_com ("continue", class_run, continue_command, _("\
2223 Continue program being debugged, after signal or breakpoint.\n\
2224 If proceeding from breakpoint, a number N may be used as an argument,\n\
2225 which means to set the ignore count of that breakpoint to N - 1 (so that\n\
2226 the breakpoint won't break until the Nth time it is reached)."));
2227 add_com_alias ("c", "cont", class_run, 1);
2228 add_com_alias ("fg", "cont", class_run, 1);
2229
2230 c = add_com ("run", class_run, run_command, _("\
2231 Start debugged program. You may specify arguments to give it.\n\
2232 Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
2233 Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
2234 With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
2235 To cancel previous arguments and run with no arguments,\n\
2236 use \"set args\" without arguments."));
2237 set_cmd_completer (c, filename_completer);
2238 add_com_alias ("r", "run", class_run, 1);
2239 if (xdb_commands)
2240 add_com ("R", class_run, run_no_args_command,
2241 _("Start debugged program with no arguments."));
2242
2243 c = add_com ("start", class_run, start_command, _("\
2244 Run the debugged program until the beginning of the main procedure.\n\
2245 You may specify arguments to give to your program, just as with the\n\
2246 \"run\" command."));
2247 set_cmd_completer (c, filename_completer);
2248
2249 add_com ("interrupt", class_run, interrupt_target_command,
2250 _("Interrupt the execution of the debugged program."));
2251
2252 add_info ("registers", nofp_registers_info, _("\
2253 List of integer registers and their contents, for selected stack frame.\n\
2254 Register name as argument means describe only that register."));
2255 add_info_alias ("r", "registers", 1);
2256
2257 if (xdb_commands)
2258 add_com ("lr", class_info, nofp_registers_info, _("\
2259 List of integer registers and their contents, for selected stack frame.\n\
2260 Register name as argument means describe only that register."));
2261 add_info ("all-registers", all_registers_info, _("\
2262 List of all registers and their contents, for selected stack frame.\n\
2263 Register name as argument means describe only that register."));
2264
2265 add_info ("program", program_info,
2266 _("Execution status of the program."));
2267
2268 add_info ("float", float_info,
2269 _("Print the status of the floating point unit\n"));
2270
2271 add_info ("vector", vector_info,
2272 _("Print the status of the vector unit\n"));
2273
2274 inferior_environ = make_environ ();
2275 init_environ (inferior_environ);
2276 }
This page took 0.076208 seconds and 4 git commands to generate.