]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/infcmd.c
*** empty log message ***
[thirdparty/binutils-gdb.git] / gdb / infcmd.c
CommitLineData
c906108c 1/* Memory-access and commands for "inferior" process, for GDB.
990a07ab 2
6aba47ca 3 Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
9b254dd1
DJ
4 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
5 2008 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
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
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
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.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
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"
1adeb98a 32#include "symfile.h"
c906108c
SS
33#include "gdbcore.h"
34#include "target.h"
35#include "language.h"
36#include "symfile.h"
37#include "objfiles.h"
c94fdfd0 38#include "completer.h"
8b93c638 39#include "ui-out.h"
6426a772 40#include "event-top.h"
96baa820 41#include "parser-defs.h"
36160dc4 42#include "regcache.h"
f9418c0f 43#include "reggroups.h"
fe898f56 44#include "block.h"
a77053c2 45#include "solib.h"
f9418c0f 46#include <ctype.h>
92ad9cd9 47#include "gdb_assert.h"
281b533b 48#include "observer.h"
424163ea 49#include "target-descriptions.h"
ad842144 50#include "user-regs.h"
32c1e744 51#include "exceptions.h"
700b53b1 52#include "cli/cli-decode.h"
a0ef4274 53#include "gdbthread.h"
79a45b7d 54#include "valprint.h"
72cec141 55
a58dd373 56/* Functions exported for general use, in inferior.h: */
c906108c 57
a14ed312 58void all_registers_info (char *, int);
c906108c 59
a14ed312 60void registers_info (char *, int);
c906108c 61
a58dd373
EZ
62void nexti_command (char *, int);
63
64void stepi_command (char *, int);
c906108c 65
a14ed312 66void continue_command (char *, int);
c906108c 67
a58dd373
EZ
68void interrupt_target_command (char *args, int from_tty);
69
70/* Local functions: */
71
72static void nofp_registers_info (char *, int);
73
c055b101
CV
74static void print_return_value (struct type *func_type,
75 struct type *value_type);
11cf8741 76
a14ed312 77static void until_next_command (int);
c906108c 78
a14ed312 79static void until_command (char *, int);
c906108c 80
a14ed312 81static void path_info (char *, int);
c906108c 82
a14ed312 83static void path_command (char *, int);
c906108c 84
a14ed312 85static void unset_command (char *, int);
c906108c 86
a14ed312 87static void float_info (char *, int);
c906108c 88
a14ed312 89static void detach_command (char *, int);
c906108c 90
6ad8ae5c
DJ
91static void disconnect_command (char *, int);
92
a14ed312 93static void unset_environment_command (char *, int);
c906108c 94
a14ed312 95static void set_environment_command (char *, int);
c906108c 96
a14ed312 97static void environment_info (char *, int);
c906108c 98
a14ed312 99static void program_info (char *, int);
c906108c 100
a14ed312 101static void finish_command (char *, int);
c906108c 102
a14ed312 103static void signal_command (char *, int);
c906108c 104
a14ed312 105static void jump_command (char *, int);
c906108c 106
a14ed312 107static void step_1 (int, int, char *);
611c83ae 108static void step_once (int skip_subroutines, int single_inst, int count, int thread);
c906108c 109
a14ed312 110static void next_command (char *, int);
c906108c 111
a14ed312 112static void step_command (char *, int);
c906108c 113
a14ed312 114static void run_command (char *, int);
c906108c 115
a14ed312 116static void run_no_args_command (char *args, int from_tty);
392a587b 117
a14ed312 118static void go_command (char *line_no, int from_tty);
392a587b 119
a14ed312 120static int strip_bg_char (char **);
43ff13b4 121
a14ed312 122void _initialize_infcmd (void);
c906108c 123
c906108c 124#define ERROR_NO_INFERIOR \
8a3fe4f8 125 if (!target_has_execution) error (_("The program is not being run."));
c906108c
SS
126
127/* String containing arguments to give to the program, separated by spaces.
128 Empty string (pointer to '\0') means no args. */
129
130static char *inferior_args;
131
552c04a7
TT
132/* The inferior arguments as a vector. If INFERIOR_ARGC is nonzero,
133 then we must compute INFERIOR_ARGS from this (via the target). */
134
135static int inferior_argc;
136static char **inferior_argv;
137
c906108c
SS
138/* File name for default use for standard in/out in the inferior. */
139
3cb3b8df 140static char *inferior_io_terminal;
c906108c
SS
141
142/* Pid of our debugged inferior, or 0 if no inferior now.
143 Since various parts of infrun.c test this to see whether there is a program
144 being debugged it should be nonzero (currently 3 is used) for remote
145 debugging. */
146
39f77062 147ptid_t inferior_ptid;
c906108c 148
c906108c
SS
149/* Address at which inferior stopped. */
150
151CORE_ADDR stop_pc;
152
c906108c
SS
153/* Flag indicating that a command has proceeded the inferior past the
154 current breakpoint. */
155
156int breakpoint_proceeded;
157
c906108c
SS
158/* Nonzero if stopped due to completion of a stack dummy routine. */
159
160int stop_stack_dummy;
161
162/* Nonzero if stopped due to a random (unexpected) signal in inferior
163 process. */
164
165int stopped_by_random_signal;
166
c906108c
SS
167/* Environment to use for running inferior,
168 in format described in environ.h. */
169
1bf1958d 170struct gdb_environ *inferior_environ;
f5871ec0 171
8f6a8e84
VP
172/* When set, no calls to target_resumed observer will be made. */
173int suppress_resume_observer = 0;
174/* When set, normal_stop will not call the normal_stop observer. */
175int suppress_stop_observer = 0;
c906108c 176\f
07091751
FN
177/* Accessor routines. */
178
3cb3b8df
BR
179void
180set_inferior_io_terminal (const char *terminal_name)
181{
182 if (inferior_io_terminal)
183 xfree (inferior_io_terminal);
184
185 if (!terminal_name)
186 inferior_io_terminal = NULL;
187 else
188 inferior_io_terminal = savestring (terminal_name, strlen (terminal_name));
189}
190
191const char *
192get_inferior_io_terminal (void)
193{
194 return inferior_io_terminal;
195}
196
07091751
FN
197char *
198get_inferior_args (void)
199{
552c04a7
TT
200 if (inferior_argc != 0)
201 {
202 char *n, *old;
203
204 n = gdbarch_construct_inferior_arguments (current_gdbarch,
205 inferior_argc, inferior_argv);
206 old = set_inferior_args (n);
207 xfree (old);
208 }
209
210 if (inferior_args == NULL)
211 inferior_args = xstrdup ("");
212
07091751
FN
213 return inferior_args;
214}
215
216char *
217set_inferior_args (char *newargs)
218{
219 char *saved_args = inferior_args;
220
221 inferior_args = newargs;
552c04a7
TT
222 inferior_argc = 0;
223 inferior_argv = 0;
07091751
FN
224
225 return saved_args;
226}
c5aa993b 227
552c04a7
TT
228void
229set_inferior_args_vector (int argc, char **argv)
230{
231 inferior_argc = argc;
232 inferior_argv = argv;
233}
234
235/* Notice when `set args' is run. */
236static void
237notice_args_set (char *args, int from_tty, struct cmd_list_element *c)
238{
239 inferior_argc = 0;
240 inferior_argv = 0;
241}
242
243/* Notice when `show args' is run. */
244static void
b4b4ac0b
AC
245notice_args_read (struct ui_file *file, int from_tty,
246 struct cmd_list_element *c, const char *value)
552c04a7 247{
258c00cc
TT
248 /* Note that we ignore the passed-in value in favor of computing it
249 directly. */
250 deprecated_show_value_hack (file, from_tty, c, get_inferior_args ());
552c04a7
TT
251}
252
c2a727fa
TT
253\f
254/* Compute command-line string given argument vector. This does the
255 same shell processing as fork_inferior. */
c2a727fa
TT
256char *
257construct_inferior_arguments (struct gdbarch *gdbarch, int argc, char **argv)
258{
259 char *result;
260
261 if (STARTUP_WITH_SHELL)
262 {
263 /* This holds all the characters considered special to the
264 typical Unix shells. We include `^' because the SunOS
265 /bin/sh treats it as a synonym for `|'. */
266 char *special = "\"!#$&*()\\|[]{}<>?'\"`~^; \t\n";
267 int i;
268 int length = 0;
269 char *out, *cp;
270
271 /* We over-compute the size. It shouldn't matter. */
272 for (i = 0; i < argc; ++i)
c2226152 273 length += 3 * strlen (argv[i]) + 1 + 2 * (argv[i][0] == '\0');
c2a727fa
TT
274
275 result = (char *) xmalloc (length);
276 out = result;
277
278 for (i = 0; i < argc; ++i)
279 {
280 if (i > 0)
281 *out++ = ' ';
282
03c6228e
AS
283 /* Need to handle empty arguments specially. */
284 if (argv[i][0] == '\0')
c2a727fa 285 {
03c6228e
AS
286 *out++ = '\'';
287 *out++ = '\'';
288 }
289 else
290 {
291 for (cp = argv[i]; *cp; ++cp)
292 {
c2226152
AS
293 if (*cp == '\n')
294 {
295 /* A newline cannot be quoted with a backslash (it
296 just disappears), only by putting it inside
297 quotes. */
298 *out++ = '\'';
299 *out++ = '\n';
300 *out++ = '\'';
301 }
302 else
303 {
304 if (strchr (special, *cp) != NULL)
305 *out++ = '\\';
306 *out++ = *cp;
307 }
03c6228e 308 }
c2a727fa
TT
309 }
310 }
311 *out = '\0';
312 }
313 else
314 {
315 /* In this case we can't handle arguments that contain spaces,
316 tabs, or newlines -- see breakup_args(). */
317 int i;
318 int length = 0;
319
320 for (i = 0; i < argc; ++i)
321 {
322 char *cp = strchr (argv[i], ' ');
323 if (cp == NULL)
324 cp = strchr (argv[i], '\t');
325 if (cp == NULL)
326 cp = strchr (argv[i], '\n');
327 if (cp != NULL)
8a3fe4f8 328 error (_("can't handle command-line argument containing whitespace"));
c2a727fa
TT
329 length += strlen (argv[i]) + 1;
330 }
331
332 result = (char *) xmalloc (length);
333 result[0] = '\0';
334 for (i = 0; i < argc; ++i)
335 {
336 if (i > 0)
337 strcat (result, " ");
338 strcat (result, argv[i]);
339 }
340 }
341
342 return result;
343}
552c04a7
TT
344\f
345
43ff13b4
JM
346/* This function detects whether or not a '&' character (indicating
347 background execution) has been added as *the last* of the arguments ARGS
348 of a command. If it has, it removes it and returns 1. Otherwise it
349 does nothing and returns 0. */
c5aa993b 350static int
fba45db2 351strip_bg_char (char **args)
43ff13b4
JM
352{
353 char *p = NULL;
c5aa993b 354
9846de1b 355 p = strchr (*args, '&');
c5aa993b 356
9846de1b 357 if (p)
43ff13b4
JM
358 {
359 if (p == (*args + strlen (*args) - 1))
360 {
c5aa993b 361 if (strlen (*args) > 1)
43ff13b4
JM
362 {
363 do
364 p--;
365 while (*p == ' ' || *p == '\t');
366 *(p + 1) = '\0';
367 }
368 else
369 *args = 0;
370 return 1;
371 }
372 }
373 return 0;
374}
375
c906108c 376void
fba45db2 377tty_command (char *file, int from_tty)
c906108c
SS
378{
379 if (file == 0)
e2e0b3e5 380 error_no_arg (_("terminal name for running target process"));
c906108c 381
3cb3b8df 382 set_inferior_io_terminal (file);
c906108c
SS
383}
384
281b533b
DJ
385/* Common actions to take after creating any sort of inferior, by any
386 means (running, attaching, connecting, et cetera). The target
387 should be stopped. */
388
389void
390post_create_inferior (struct target_ops *target, int from_tty)
391{
b79599ff
DP
392 /* Be sure we own the terminal in case write operations are performed. */
393 target_terminal_ours ();
394
424163ea
DJ
395 /* If the target hasn't taken care of this already, do it now.
396 Targets which need to access registers during to_open,
397 to_create_inferior, or to_attach should do it earlier; but many
398 don't need to. */
399 target_find_description ();
400
9353355f
DJ
401 if (exec_bfd)
402 {
403 /* Sometimes the platform-specific hook loads initial shared
404 libraries, and sometimes it doesn't. Try to do so first, so
de1b3c3d
PA
405 that we can add them with the correct value for FROM_TTY.
406 If we made all the inferior hook methods consistent,
407 this call could be removed. */
9353355f
DJ
408#ifdef SOLIB_ADD
409 SOLIB_ADD (NULL, from_tty, target, auto_solib_add);
410#else
411 solib_add (NULL, from_tty, target, auto_solib_add);
412#endif
413
414 /* Create the hooks to handle shared library load and unload
415 events. */
416#ifdef SOLIB_CREATE_INFERIOR_HOOK
37706b70 417 SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
9353355f
DJ
418#else
419 solib_create_inferior_hook ();
420#endif
9353355f
DJ
421 }
422
281b533b
DJ
423 observer_notify_inferior_created (target, from_tty);
424}
425
a4d5f2e0
JB
426/* Kill the inferior if already running. This function is designed
427 to be called when we are about to start the execution of the program
428 from the beginning. Ask the user to confirm that he wants to restart
429 the program being debugged when FROM_TTY is non-null. */
c906108c 430
8edfe269 431static void
a4d5f2e0
JB
432kill_if_already_running (int from_tty)
433{
39f77062 434 if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
c906108c 435 {
8edfe269
DJ
436 /* Bail out before killing the program if we will not be able to
437 restart it. */
438 target_require_runnable ();
439
adf40b2e
JM
440 if (from_tty
441 && !query ("The program being debugged has been started already.\n\
c906108c 442Start it from the beginning? "))
8a3fe4f8 443 error (_("Program not restarted."));
c906108c 444 target_kill ();
c906108c 445 }
a4d5f2e0
JB
446}
447
f67a969f
JB
448/* Implement the "run" command. If TBREAK_AT_MAIN is set, then insert
449 a temporary breakpoint at the begining of the main program before
450 running the program. */
451
a4d5f2e0 452static void
f67a969f 453run_command_1 (char *args, int from_tty, int tbreak_at_main)
a4d5f2e0
JB
454{
455 char *exec_file;
c906108c 456
a4d5f2e0
JB
457 dont_repeat ();
458
459 kill_if_already_running (from_tty);
3c35e65b
UW
460
461 init_wait_for_inferior ();
c906108c
SS
462 clear_breakpoint_hit_counts ();
463
fd79ecee
DJ
464 /* Clean up any leftovers from other runs. Some other things from
465 this function should probably be moved into target_pre_inferior. */
466 target_pre_inferior (from_tty);
467
39ad761d
JB
468 /* The comment here used to read, "The exec file is re-read every
469 time we do a generic_mourn_inferior, so we just have to worry
470 about the symbol file." The `generic_mourn_inferior' function
471 gets called whenever the program exits. However, suppose the
472 program exits, and *then* the executable file changes? We need
473 to check again here. Since reopen_exec_file doesn't do anything
474 if the timestamp hasn't changed, I don't see the harm. */
475 reopen_exec_file ();
c906108c
SS
476 reread_symbols ();
477
f67a969f
JB
478 /* Insert the temporary breakpoint if a location was specified. */
479 if (tbreak_at_main)
480 tbreak_command (main_name (), 0);
481
39ad761d
JB
482 exec_file = (char *) get_exec_file (0);
483
9908b566
VP
484 if (non_stop && !target_supports_non_stop ())
485 error (_("The target does not support running in non-stop mode."));
486
c906108c
SS
487 /* We keep symbols from add-symbol-file, on the grounds that the
488 user might want to add some symbols before running the program
489 (right?). But sometimes (dynamic loading where the user manually
490 introduces the new symbols with add-symbol-file), the code which
491 the symbols describe does not persist between runs. Currently
492 the user has to manually nuke all symbols between runs if they
493 want them to go away (PR 2207). This is probably reasonable. */
494
43ff13b4 495 if (!args)
6426a772 496 {
362646f5 497 if (target_can_async_p ())
6426a772
JM
498 async_disable_stdin ();
499 }
43ff13b4 500 else
c906108c 501 {
43ff13b4
JM
502 int async_exec = strip_bg_char (&args);
503
504 /* If we get a request for running in the bg but the target
505 doesn't support it, error out. */
362646f5 506 if (async_exec && !target_can_async_p ())
8a3fe4f8 507 error (_("Asynchronous execution not supported on this target."));
43ff13b4
JM
508
509 /* If we don't get a request of running in the bg, then we need
c5aa993b 510 to simulate synchronous (fg) execution. */
362646f5 511 if (!async_exec && target_can_async_p ())
43ff13b4
JM
512 {
513 /* Simulate synchronous execution */
6426a772 514 async_disable_stdin ();
43ff13b4
JM
515 }
516
517 /* If there were other args, beside '&', process them. */
518 if (args)
519 {
07091751
FN
520 char *old_args = set_inferior_args (xstrdup (args));
521 xfree (old_args);
43ff13b4 522 }
c906108c
SS
523 }
524
525 if (from_tty)
526 {
8b93c638
JM
527 ui_out_field_string (uiout, NULL, "Starting program");
528 ui_out_text (uiout, ": ");
529 if (exec_file)
530 ui_out_field_string (uiout, "execfile", exec_file);
531 ui_out_spaces (uiout, 1);
552c04a7
TT
532 /* We call get_inferior_args() because we might need to compute
533 the value now. */
534 ui_out_field_string (uiout, "infargs", get_inferior_args ());
8b93c638
JM
535 ui_out_text (uiout, "\n");
536 ui_out_flush (uiout);
c906108c
SS
537 }
538
552c04a7
TT
539 /* We call get_inferior_args() because we might need to compute
540 the value now. */
541 target_create_inferior (exec_file, get_inferior_args (),
c27cda74 542 environ_vector (inferior_environ), from_tty);
281b533b 543
de1b3c3d
PA
544 /* Pass zero for FROM_TTY, because at this point the "run" command
545 has done its thing; now we are setting up the running program. */
546 post_create_inferior (&current_target, 0);
281b533b
DJ
547
548 /* Start the target running. */
549 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_0, 0);
c906108c
SS
550}
551
552
f67a969f
JB
553static void
554run_command (char *args, int from_tty)
555{
556 run_command_1 (args, from_tty, 0);
557}
558
c906108c 559static void
fba45db2 560run_no_args_command (char *args, int from_tty)
c906108c 561{
07091751
FN
562 char *old_args = set_inferior_args (xstrdup (""));
563 xfree (old_args);
c906108c 564}
c906108c 565\f
c5aa993b 566
a4d5f2e0
JB
567/* Start the execution of the program up until the beginning of the main
568 program. */
569
570static void
571start_command (char *args, int from_tty)
572{
573 /* Some languages such as Ada need to search inside the program
574 minimal symbols for the location where to put the temporary
575 breakpoint before starting. */
576 if (!have_minimal_symbols ())
8a3fe4f8 577 error (_("No symbol table loaded. Use the \"file\" command."));
a4d5f2e0 578
f67a969f
JB
579 /* Run the program until reaching the main procedure... */
580 run_command_1 (args, from_tty, 1);
a4d5f2e0
JB
581}
582
8cae4b3f
PA
583static int
584proceed_thread_callback (struct thread_info *thread, void *arg)
585{
74531fed
PA
586 /* We go through all threads individually instead of compressing
587 into a single target `resume_all' request, because some threads
588 may be stopped in internal breakpoints/events, or stopped waiting
589 for its turn in the displaced stepping queue (that is, they are
590 running && !executing). The target side has no idea about why
591 the thread is stopped, so a `resume_all' command would resume too
592 much. If/when GDB gains a way to tell the target `hold this
593 thread stopped until I say otherwise', then we can optimize
594 this. */
4f8d22e3 595 if (!is_stopped (thread->ptid))
8cae4b3f
PA
596 return 0;
597
dcf4fbde 598 switch_to_thread (thread->ptid);
8cae4b3f
PA
599 clear_proceed_status ();
600 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
601 return 0;
602}
603
77ebaa5a
VP
604void
605continue_1 (int all_threads)
606{
3d488bfc
PA
607 ERROR_NO_INFERIOR;
608
77ebaa5a
VP
609 if (non_stop && all_threads)
610 {
611 /* Don't error out if the current thread is running, because
612 there may be other stopped threads. */
613 struct cleanup *old_chain;
614
615 /* Backup current thread and selected frame. */
616 old_chain = make_cleanup_restore_current_thread ();
617
618 iterate_over_threads (proceed_thread_callback, NULL);
619
620 /* Restore selected ptid. */
621 do_cleanups (old_chain);
622 }
623 else
624 {
625 ensure_not_running ();
626 clear_proceed_status ();
627 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
628 }
629}
630
8cae4b3f 631/* continue [-a] [proceed-count] [&] */
c906108c 632void
8cae4b3f 633continue_command (char *args, int from_tty)
c906108c 634{
c5aa993b 635 int async_exec = 0;
8cae4b3f 636 int all_threads = 0;
c906108c
SS
637 ERROR_NO_INFERIOR;
638
43ff13b4 639 /* Find out whether we must run in the background. */
8cae4b3f
PA
640 if (args != NULL)
641 async_exec = strip_bg_char (&args);
43ff13b4
JM
642
643 /* If we must run in the background, but the target can't do it,
644 error out. */
362646f5 645 if (async_exec && !target_can_async_p ())
8a3fe4f8 646 error (_("Asynchronous execution not supported on this target."));
43ff13b4
JM
647
648 /* If we are not asked to run in the bg, then prepare to run in the
649 foreground, synchronously. */
362646f5 650 if (!async_exec && target_can_async_p ())
c5aa993b 651 {
43ff13b4 652 /* Simulate synchronous execution */
6426a772 653 async_disable_stdin ();
43ff13b4 654 }
c906108c 655
8cae4b3f
PA
656 if (args != NULL)
657 {
658 if (strncmp (args, "-a", sizeof ("-a") - 1) == 0)
659 {
660 all_threads = 1;
661 args += sizeof ("-a") - 1;
662 if (*args == '\0')
663 args = NULL;
664 }
665 }
666
667 if (!non_stop && all_threads)
668 error (_("`-a' is meaningless in all-stop mode."));
669
670 if (args != NULL && all_threads)
671 error (_("\
672Can't resume all threads and specify proceed count simultaneously."));
673
674 /* If we have an argument left, set proceed count of breakpoint we
675 stopped at. */
676 if (args != NULL)
c906108c 677 {
347bddb7 678 bpstat bs = NULL;
8671a17b
PA
679 int num, stat;
680 int stopped = 0;
347bddb7
PA
681 struct thread_info *tp;
682
683 if (non_stop)
684 tp = find_thread_pid (inferior_ptid);
685 else
686 {
687 ptid_t last_ptid;
688 struct target_waitstatus ws;
689
690 get_last_target_status (&last_ptid, &ws);
691 tp = find_thread_pid (last_ptid);
692 }
693 if (tp != NULL)
694 bs = tp->stop_bpstat;
8671a17b
PA
695
696 while ((stat = bpstat_num (&bs, &num)) != 0)
697 if (stat > 0)
698 {
699 set_ignore_count (num,
8cae4b3f 700 parse_and_eval_long (args) - 1,
8671a17b
PA
701 from_tty);
702 /* set_ignore_count prints a message ending with a period.
703 So print two spaces before "Continuing.". */
704 if (from_tty)
705 printf_filtered (" ");
706 stopped = 1;
707 }
708
709 if (!stopped && from_tty)
c906108c
SS
710 {
711 printf_filtered
712 ("Not stopped at any breakpoint; argument ignored.\n");
713 }
c906108c
SS
714 }
715
716 if (from_tty)
a3f17187 717 printf_filtered (_("Continuing.\n"));
c906108c 718
77ebaa5a 719 continue_1 (all_threads);
c906108c
SS
720}
721\f
722/* Step until outside of current statement. */
723
c906108c 724static void
fba45db2 725step_command (char *count_string, int from_tty)
c906108c
SS
726{
727 step_1 (0, 0, count_string);
728}
729
730/* Likewise, but skip over subroutine calls as if single instructions. */
731
c906108c 732static void
fba45db2 733next_command (char *count_string, int from_tty)
c906108c
SS
734{
735 step_1 (1, 0, count_string);
736}
737
738/* Likewise, but step only one instruction. */
739
c906108c 740void
fba45db2 741stepi_command (char *count_string, int from_tty)
c906108c
SS
742{
743 step_1 (0, 1, count_string);
744}
745
c906108c 746void
fba45db2 747nexti_command (char *count_string, int from_tty)
c906108c
SS
748{
749 step_1 (1, 1, count_string);
750}
751
74b7792f 752static void
611c83ae 753delete_longjmp_breakpoint_cleanup (void *arg)
74b7792f 754{
611c83ae
PA
755 int thread = * (int *) arg;
756 delete_longjmp_breakpoint (thread);
74b7792f
AC
757}
758
c906108c 759static void
fba45db2 760step_1 (int skip_subroutines, int single_inst, char *count_string)
c906108c 761{
52f0bd74 762 int count = 1;
c906108c 763 struct frame_info *frame;
f107f563 764 struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
43ff13b4 765 int async_exec = 0;
b3dc826b 766 int thread = -1;
c5aa993b 767
c906108c 768 ERROR_NO_INFERIOR;
94cc34af 769 ensure_not_running ();
43ff13b4
JM
770
771 if (count_string)
772 async_exec = strip_bg_char (&count_string);
c5aa993b 773
43ff13b4
JM
774 /* If we get a request for running in the bg but the target
775 doesn't support it, error out. */
362646f5 776 if (async_exec && !target_can_async_p ())
8a3fe4f8 777 error (_("Asynchronous execution not supported on this target."));
43ff13b4
JM
778
779 /* If we don't get a request of running in the bg, then we need
780 to simulate synchronous (fg) execution. */
362646f5 781 if (!async_exec && target_can_async_p ())
43ff13b4
JM
782 {
783 /* Simulate synchronous execution */
6426a772 784 async_disable_stdin ();
43ff13b4
JM
785 }
786
bb518678 787 count = count_string ? parse_and_eval_long (count_string) : 1;
c906108c 788
c5aa993b 789 if (!single_inst || skip_subroutines) /* leave si command alone */
c906108c 790 {
611c83ae 791 if (in_thread_list (inferior_ptid))
b3dc826b 792 thread = pid_to_thread_id (inferior_ptid);
611c83ae
PA
793
794 set_longjmp_breakpoint ();
795
b3dc826b 796 make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
c2d11a7d
JM
797 }
798
799 /* In synchronous case, all is well, just use the regular for loop. */
362646f5 800 if (!target_can_async_p ())
c2d11a7d
JM
801 {
802 for (; count > 0; count--)
803 {
4e1c45ea 804 struct thread_info *tp = inferior_thread ();
c2d11a7d
JM
805 clear_proceed_status ();
806
807 frame = get_current_frame ();
4e1c45ea 808 tp->step_frame_id = get_frame_id (frame);
c2d11a7d
JM
809
810 if (!single_inst)
811 {
4e1c45ea
PA
812 find_pc_line_pc_range (stop_pc,
813 &tp->step_range_start, &tp->step_range_end);
814 if (tp->step_range_end == 0)
c2d11a7d
JM
815 {
816 char *name;
4e1c45ea
PA
817 if (find_pc_partial_function (stop_pc, &name,
818 &tp->step_range_start,
819 &tp->step_range_end) == 0)
8a3fe4f8 820 error (_("Cannot find bounds of current function"));
c2d11a7d
JM
821
822 target_terminal_ours ();
a3f17187 823 printf_filtered (_("\
c2d11a7d 824Single stepping until exit from function %s, \n\
a3f17187 825which has no line number information.\n"), name);
c2d11a7d
JM
826 }
827 }
828 else
829 {
830 /* Say we are stepping, but stop after one insn whatever it does. */
4e1c45ea 831 tp->step_range_start = tp->step_range_end = 1;
c2d11a7d
JM
832 if (!skip_subroutines)
833 /* It is stepi.
834 Don't step over function calls, not even to functions lacking
835 line numbers. */
078130d0 836 tp->step_over_calls = STEP_OVER_NONE;
c2d11a7d
JM
837 }
838
839 if (skip_subroutines)
078130d0 840 tp->step_over_calls = STEP_OVER_ALL;
c2d11a7d 841
af679fd0 842 tp->step_multi = (count > 1);
c2d11a7d
JM
843 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
844
414c69f7
PA
845 if (!target_has_execution
846 || !inferior_thread ()->stop_step)
c2d11a7d 847 break;
c2d11a7d
JM
848 }
849
f107f563 850 do_cleanups (cleanups);
c2d11a7d
JM
851 return;
852 }
853 /* In case of asynchronous target things get complicated, do only
854 one step for now, before returning control to the event loop. Let
855 the continuation figure out how many other steps we need to do,
856 and handle them one at the time, through step_once(). */
857 else
858 {
b3dc826b 859 step_once (skip_subroutines, single_inst, count, thread);
611c83ae 860 /* We are running, and the continuation is installed. It will
f107f563
VP
861 disable the longjmp breakpoint as appropriate. */
862 discard_cleanups (cleanups);
c906108c 863 }
c2d11a7d 864}
c906108c 865
bfec99b2
PA
866struct step_1_continuation_args
867{
868 int count;
869 int skip_subroutines;
870 int single_inst;
871 int thread;
872};
873
c2d11a7d
JM
874/* Called after we are done with one step operation, to check whether
875 we need to step again, before we print the prompt and return control
876 to the user. If count is > 1, we will need to do one more call to
877 proceed(), via step_once(). Basically it is like step_once and
878 step_1_continuation are co-recursive. */
879static void
604ead4a 880step_1_continuation (void *args)
c2d11a7d 881{
bfec99b2 882 struct step_1_continuation_args *a = args;
f13468d9 883
af679fd0 884 if (target_has_execution)
f13468d9 885 {
af679fd0
PA
886 struct thread_info *tp;
887
888 tp = inferior_thread ();
414c69f7 889 if (tp->step_multi && tp->stop_step)
af679fd0
PA
890 {
891 /* There are more steps to make, and we did stop due to
892 ending a stepping range. Do another step. */
893 step_once (a->skip_subroutines, a->single_inst, a->count - 1, a->thread);
894 return;
895 }
896 tp->step_multi = 0;
f107f563 897 }
af679fd0
PA
898
899 /* We either stopped for some reason that is not stepping, or there
900 are no further steps to make. Cleanup. */
901 if (!a->single_inst || a->skip_subroutines)
902 delete_longjmp_breakpoint (a->thread);
c2d11a7d
JM
903}
904
905/* Do just one step operation. If count >1 we will have to set up a
906 continuation to be done after the target stops (after this one
907 step). This is useful to implement the 'step n' kind of commands, in
908 case of asynchronous targets. We had to split step_1 into two parts,
909 one to be done before proceed() and one afterwards. This function is
910 called in case of step n with n>1, after the first step operation has
911 been completed.*/
912static void
611c83ae 913step_once (int skip_subroutines, int single_inst, int count, int thread)
bfec99b2 914{
0d06e24b 915 struct frame_info *frame;
bfec99b2 916 struct step_1_continuation_args *args;
c2d11a7d
JM
917
918 if (count > 0)
c906108c 919 {
4e1c45ea
PA
920 /* Don't assume THREAD is a valid thread id. It is set to -1 if
921 the longjmp breakpoint was not required. Use the
922 INFERIOR_PTID thread instead, which is the same thread when
923 THREAD is set. */
924 struct thread_info *tp = inferior_thread ();
c906108c
SS
925 clear_proceed_status ();
926
927 frame = get_current_frame ();
c5aa993b 928 if (!frame) /* Avoid coredump here. Why tho? */
8a3fe4f8 929 error (_("No current frame"));
4e1c45ea 930 tp->step_frame_id = get_frame_id (frame);
c906108c 931
c5aa993b 932 if (!single_inst)
c906108c 933 {
4e1c45ea
PA
934 find_pc_line_pc_range (stop_pc,
935 &tp->step_range_start, &tp->step_range_end);
5fbbeb29
CF
936
937 /* If we have no line info, switch to stepi mode. */
4e1c45ea 938 if (tp->step_range_end == 0 && step_stop_if_no_debug)
5fbbeb29 939 {
4e1c45ea 940 tp->step_range_start = tp->step_range_end = 1;
5fbbeb29 941 }
4e1c45ea 942 else if (tp->step_range_end == 0)
c906108c
SS
943 {
944 char *name;
4e1c45ea
PA
945 if (find_pc_partial_function (stop_pc, &name,
946 &tp->step_range_start,
947 &tp->step_range_end) == 0)
8a3fe4f8 948 error (_("Cannot find bounds of current function"));
c906108c
SS
949
950 target_terminal_ours ();
a3f17187 951 printf_filtered (_("\
c906108c 952Single stepping until exit from function %s, \n\
a3f17187 953which has no line number information.\n"), name);
c906108c
SS
954 }
955 }
956 else
957 {
958 /* Say we are stepping, but stop after one insn whatever it does. */
4e1c45ea 959 tp->step_range_start = tp->step_range_end = 1;
c906108c
SS
960 if (!skip_subroutines)
961 /* It is stepi.
962 Don't step over function calls, not even to functions lacking
963 line numbers. */
078130d0 964 tp->step_over_calls = STEP_OVER_NONE;
c906108c
SS
965 }
966
967 if (skip_subroutines)
078130d0 968 tp->step_over_calls = STEP_OVER_ALL;
c906108c 969
95e54da7 970 tp->step_multi = (count > 1);
f107f563 971 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
bfec99b2
PA
972
973 args = xmalloc (sizeof (*args));
974 args->skip_subroutines = skip_subroutines;
975 args->single_inst = single_inst;
976 args->count = count;
977 args->thread = thread;
95e54da7 978 add_intermediate_continuation (tp, step_1_continuation, args, xfree);
c906108c 979 }
c906108c 980}
c2d11a7d 981
c906108c
SS
982\f
983/* Continue program at specified address. */
984
985static void
fba45db2 986jump_command (char *arg, int from_tty)
c906108c 987{
52f0bd74 988 CORE_ADDR addr;
c906108c
SS
989 struct symtabs_and_lines sals;
990 struct symtab_and_line sal;
991 struct symbol *fn;
992 struct symbol *sfn;
43ff13b4 993 int async_exec = 0;
c5aa993b 994
c906108c 995 ERROR_NO_INFERIOR;
94cc34af 996 ensure_not_running ();
c906108c 997
43ff13b4
JM
998 /* Find out whether we must run in the background. */
999 if (arg != NULL)
1000 async_exec = strip_bg_char (&arg);
1001
1002 /* If we must run in the background, but the target can't do it,
1003 error out. */
362646f5 1004 if (async_exec && !target_can_async_p ())
8a3fe4f8 1005 error (_("Asynchronous execution not supported on this target."));
43ff13b4 1006
c906108c 1007 if (!arg)
e2e0b3e5 1008 error_no_arg (_("starting address"));
c906108c
SS
1009
1010 sals = decode_line_spec_1 (arg, 1);
1011 if (sals.nelts != 1)
1012 {
8a3fe4f8 1013 error (_("Unreasonable jump request"));
c906108c
SS
1014 }
1015
1016 sal = sals.sals[0];
b8c9b27d 1017 xfree (sals.sals);
c906108c
SS
1018
1019 if (sal.symtab == 0 && sal.pc == 0)
8a3fe4f8 1020 error (_("No source file has been specified."));
c906108c 1021
c5aa993b 1022 resolve_sal_pc (&sal); /* May error out */
c906108c
SS
1023
1024 /* See if we are trying to jump to another function. */
1025 fn = get_frame_function (get_current_frame ());
1026 sfn = find_pc_function (sal.pc);
1027 if (fn != NULL && sfn != fn)
1028 {
1029 if (!query ("Line %d is not in `%s'. Jump anyway? ", sal.line,
de5ad195 1030 SYMBOL_PRINT_NAME (fn)))
c906108c 1031 {
8a3fe4f8 1032 error (_("Not confirmed."));
c906108c
SS
1033 /* NOTREACHED */
1034 }
1035 }
1036
c5aa993b 1037 if (sfn != NULL)
c906108c
SS
1038 {
1039 fixup_symbol_section (sfn, 0);
714835d5
UW
1040 if (section_is_overlay (SYMBOL_OBJ_SECTION (sfn)) &&
1041 !section_is_mapped (SYMBOL_OBJ_SECTION (sfn)))
c906108c
SS
1042 {
1043 if (!query ("WARNING!!! Destination is in unmapped overlay! Jump anyway? "))
1044 {
8a3fe4f8 1045 error (_("Not confirmed."));
c906108c
SS
1046 /* NOTREACHED */
1047 }
1048 }
1049 }
1050
c906108c
SS
1051 addr = sal.pc;
1052
1053 if (from_tty)
1054 {
a3f17187 1055 printf_filtered (_("Continuing at "));
ed49a04f 1056 fputs_filtered (paddress (addr), gdb_stdout);
c906108c
SS
1057 printf_filtered (".\n");
1058 }
1059
89113898
PA
1060 /* If we are not asked to run in the bg, then prepare to run in the
1061 foreground, synchronously. */
1062 if (!async_exec && target_can_async_p ())
1063 {
1064 /* Simulate synchronous execution */
1065 async_disable_stdin ();
1066 }
1067
c906108c
SS
1068 clear_proceed_status ();
1069 proceed (addr, TARGET_SIGNAL_0, 0);
1070}
c906108c 1071\f
c5aa993b 1072
c906108c
SS
1073/* Go to line or address in current procedure */
1074static void
fba45db2 1075go_command (char *line_no, int from_tty)
c906108c 1076{
c5aa993b 1077 if (line_no == (char *) NULL || !*line_no)
f42429a6 1078 printf_filtered (_("Usage: go <location>\n"));
c906108c
SS
1079 else
1080 {
b83266a0
SS
1081 tbreak_command (line_no, from_tty);
1082 jump_command (line_no, from_tty);
c906108c
SS
1083 }
1084}
c906108c 1085\f
c5aa993b 1086
c906108c
SS
1087/* Continue program giving it specified signal. */
1088
1089static void
fba45db2 1090signal_command (char *signum_exp, int from_tty)
c906108c
SS
1091{
1092 enum target_signal oursig;
32c1e744 1093 int async_exec = 0;
c906108c
SS
1094
1095 dont_repeat (); /* Too dangerous. */
1096 ERROR_NO_INFERIOR;
94cc34af 1097 ensure_not_running ();
c906108c 1098
32c1e744
VP
1099 /* Find out whether we must run in the background. */
1100 if (signum_exp != NULL)
1101 async_exec = strip_bg_char (&signum_exp);
1102
1103 /* If we must run in the background, but the target can't do it,
1104 error out. */
1105 if (async_exec && !target_can_async_p ())
1106 error (_("Asynchronous execution not supported on this target."));
1107
1108 /* If we are not asked to run in the bg, then prepare to run in the
1109 foreground, synchronously. */
1110 if (!async_exec && target_can_async_p ())
1111 {
1112 /* Simulate synchronous execution. */
1113 async_disable_stdin ();
1114 }
1115
c906108c 1116 if (!signum_exp)
e2e0b3e5 1117 error_no_arg (_("signal number"));
c906108c
SS
1118
1119 /* It would be even slicker to make signal names be valid expressions,
1120 (the type could be "enum $signal" or some such), then the user could
1121 assign them to convenience variables. */
1122 oursig = target_signal_from_name (signum_exp);
1123
1124 if (oursig == TARGET_SIGNAL_UNKNOWN)
1125 {
1126 /* No, try numeric. */
bb518678 1127 int num = parse_and_eval_long (signum_exp);
c906108c
SS
1128
1129 if (num == 0)
1130 oursig = TARGET_SIGNAL_0;
1131 else
1132 oursig = target_signal_from_command (num);
1133 }
1134
1135 if (from_tty)
1136 {
1137 if (oursig == TARGET_SIGNAL_0)
a3f17187 1138 printf_filtered (_("Continuing with no signal.\n"));
c906108c 1139 else
a3f17187 1140 printf_filtered (_("Continuing with signal %s.\n"),
c906108c
SS
1141 target_signal_to_name (oursig));
1142 }
1143
1144 clear_proceed_status ();
1145 /* "signal 0" should not get stuck if we are stopped at a breakpoint.
1146 FIXME: Neither should "signal foo" but when I tried passing
1147 (CORE_ADDR)-1 unconditionally I got a testsuite failure which I haven't
1148 tried to track down yet. */
2acceee2 1149 proceed (oursig == TARGET_SIGNAL_0 ? (CORE_ADDR) -1 : stop_pc, oursig, 0);
c906108c
SS
1150}
1151
c906108c
SS
1152/* Proceed until we reach a different source line with pc greater than
1153 our current one or exit the function. We skip calls in both cases.
1154
1155 Note that eventually this command should probably be changed so
1156 that only source lines are printed out when we hit the breakpoint
1157 we set. This may involve changes to wait_for_inferior and the
1158 proceed status code. */
1159
c906108c 1160static void
fba45db2 1161until_next_command (int from_tty)
c906108c
SS
1162{
1163 struct frame_info *frame;
1164 CORE_ADDR pc;
1165 struct symbol *func;
1166 struct symtab_and_line sal;
4e1c45ea 1167 struct thread_info *tp = inferior_thread ();
c5aa993b 1168
c906108c
SS
1169 clear_proceed_status ();
1170
1171 frame = get_current_frame ();
1172
1173 /* Step until either exited from this function or greater
1174 than the current line (if in symbolic section) or pc (if
1175 not). */
1176
1177 pc = read_pc ();
1178 func = find_pc_function (pc);
c5aa993b 1179
c906108c
SS
1180 if (!func)
1181 {
1182 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (pc);
c5aa993b 1183
c906108c 1184 if (msymbol == NULL)
8a3fe4f8 1185 error (_("Execution is not within a known function."));
c5aa993b 1186
4e1c45ea
PA
1187 tp->step_range_start = SYMBOL_VALUE_ADDRESS (msymbol);
1188 tp->step_range_end = pc;
c906108c
SS
1189 }
1190 else
1191 {
1192 sal = find_pc_line (pc, 0);
c5aa993b 1193
4e1c45ea
PA
1194 tp->step_range_start = BLOCK_START (SYMBOL_BLOCK_VALUE (func));
1195 tp->step_range_end = sal.end;
c906108c 1196 }
c5aa993b 1197
078130d0 1198 tp->step_over_calls = STEP_OVER_ALL;
4e1c45ea 1199 tp->step_frame_id = get_frame_id (frame);
c906108c 1200
af679fd0 1201 tp->step_multi = 0; /* Only one call to proceed */
c5aa993b 1202
2acceee2 1203 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
c906108c
SS
1204}
1205
c5aa993b 1206static void
fba45db2 1207until_command (char *arg, int from_tty)
c906108c 1208{
43ff13b4
JM
1209 int async_exec = 0;
1210
c906108c 1211 if (!target_has_execution)
8a3fe4f8 1212 error (_("The program is not running."));
43ff13b4
JM
1213
1214 /* Find out whether we must run in the background. */
1215 if (arg != NULL)
1216 async_exec = strip_bg_char (&arg);
1217
1218 /* If we must run in the background, but the target can't do it,
1219 error out. */
362646f5 1220 if (async_exec && !target_can_async_p ())
8a3fe4f8 1221 error (_("Asynchronous execution not supported on this target."));
43ff13b4
JM
1222
1223 /* If we are not asked to run in the bg, then prepare to run in the
1224 foreground, synchronously. */
362646f5 1225 if (!async_exec && target_can_async_p ())
c5aa993b 1226 {
43ff13b4 1227 /* Simulate synchronous execution */
6426a772 1228 async_disable_stdin ();
43ff13b4
JM
1229 }
1230
c906108c 1231 if (arg)
ae66c1fc 1232 until_break_command (arg, from_tty, 0);
c906108c
SS
1233 else
1234 until_next_command (from_tty);
1235}
ae66c1fc
EZ
1236
1237static void
1238advance_command (char *arg, int from_tty)
1239{
1240 int async_exec = 0;
1241
1242 if (!target_has_execution)
8a3fe4f8 1243 error (_("The program is not running."));
ae66c1fc
EZ
1244
1245 if (arg == NULL)
e2e0b3e5 1246 error_no_arg (_("a location"));
ae66c1fc
EZ
1247
1248 /* Find out whether we must run in the background. */
1249 if (arg != NULL)
1250 async_exec = strip_bg_char (&arg);
1251
1252 /* If we must run in the background, but the target can't do it,
1253 error out. */
362646f5 1254 if (async_exec && !target_can_async_p ())
8a3fe4f8 1255 error (_("Asynchronous execution not supported on this target."));
ae66c1fc
EZ
1256
1257 /* If we are not asked to run in the bg, then prepare to run in the
1258 foreground, synchronously. */
362646f5 1259 if (!async_exec && target_can_async_p ())
ae66c1fc
EZ
1260 {
1261 /* Simulate synchronous execution. */
1262 async_disable_stdin ();
1263 }
1264
1265 until_break_command (arg, from_tty, 1);
1266}
c906108c 1267\f
f941662f
MK
1268/* Print the result of a function at the end of a 'finish' command. */
1269
11cf8741 1270static void
c055b101 1271print_return_value (struct type *func_type, struct type *value_type)
11cf8741 1272{
31db7b6c 1273 struct gdbarch *gdbarch = current_gdbarch;
bb472c1e
MK
1274 struct cleanup *old_chain;
1275 struct ui_stream *stb;
44e5158b
AC
1276 struct value *value;
1277
181fc57c 1278 CHECK_TYPEDEF (value_type);
44e5158b 1279 gdb_assert (TYPE_CODE (value_type) != TYPE_CODE_VOID);
11cf8741 1280
92ad9cd9
AC
1281 /* FIXME: 2003-09-27: When returning from a nested inferior function
1282 call, it's possible (with no help from the architecture vector)
1283 to locate and return/print a "struct return" value. This is just
1284 a more complicated case of what is already being done in in the
1285 inferior function call code. In fact, when inferior function
1286 calls are made async, this will likely be made the norm. */
31db7b6c 1287
c055b101
CV
1288 switch (gdbarch_return_value (gdbarch, func_type, value_type,
1289 NULL, NULL, NULL))
44e5158b 1290 {
750eb019
AC
1291 case RETURN_VALUE_REGISTER_CONVENTION:
1292 case RETURN_VALUE_ABI_RETURNS_ADDRESS:
181fc57c 1293 case RETURN_VALUE_ABI_PRESERVES_ADDRESS:
44e5158b 1294 value = allocate_value (value_type);
c055b101 1295 gdbarch_return_value (gdbarch, func_type, value_type, stop_registers,
990a07ab 1296 value_contents_raw (value), NULL);
750eb019
AC
1297 break;
1298 case RETURN_VALUE_STRUCT_CONVENTION:
1299 value = NULL;
1300 break;
1301 default:
e2e0b3e5 1302 internal_error (__FILE__, __LINE__, _("bad switch"));
44e5158b 1303 }
bb472c1e 1304
31db7b6c
MK
1305 if (value)
1306 {
79a45b7d
TT
1307 struct value_print_options opts;
1308
31db7b6c 1309 /* Print it. */
1d751abe
PA
1310 stb = ui_out_stream_new (uiout);
1311 old_chain = make_cleanup_ui_out_stream_delete (stb);
31db7b6c
MK
1312 ui_out_text (uiout, "Value returned is ");
1313 ui_out_field_fmt (uiout, "gdb-result-var", "$%d",
1314 record_latest_value (value));
1315 ui_out_text (uiout, " = ");
79a45b7d
TT
1316 get_raw_print_options (&opts);
1317 value_print (value, stb->stream, &opts);
31db7b6c
MK
1318 ui_out_field_stream (uiout, "return-value", stb);
1319 ui_out_text (uiout, "\n");
1d751abe 1320 do_cleanups (old_chain);
31db7b6c
MK
1321 }
1322 else
1323 {
1324 ui_out_text (uiout, "Value returned has type: ");
1d751abe
PA
1325 ui_out_field_string (uiout, "return-type", TYPE_NAME (value_type));
1326 ui_out_text (uiout, ".");
1327 ui_out_text (uiout, " Cannot determine contents\n");
31db7b6c 1328 }
11cf8741
JM
1329}
1330
43ff13b4 1331/* Stuff that needs to be done by the finish command after the target
f941662f
MK
1332 has stopped. In asynchronous mode, we wait for the target to stop
1333 in the call to poll or select in the event loop, so it is
1334 impossible to do all the stuff as part of the finish_command
1335 function itself. The only chance we have to complete this command
1336 is in fetch_inferior_event, which is called by the event loop as
1337 soon as it detects that the target has stopped. This function is
1338 called via the cmd_continuation pointer. */
1339
bfec99b2 1340struct finish_command_continuation_args
43ff13b4 1341{
43ff13b4 1342 struct breakpoint *breakpoint;
bfec99b2
PA
1343 struct symbol *function;
1344};
c5aa993b 1345
bfec99b2 1346static void
604ead4a 1347finish_command_continuation (void *arg)
bfec99b2
PA
1348{
1349 struct finish_command_continuation_args *a = arg;
43ff13b4 1350
347bddb7
PA
1351 bpstat bs = NULL;
1352
1353 if (!ptid_equal (inferior_ptid, null_ptid)
1354 && target_has_execution
1355 && is_stopped (inferior_ptid))
1356 bs = inferior_thread ()->stop_bpstat;
1357
1358 if (bpstat_find_breakpoint (bs, a->breakpoint) != NULL
604ead4a 1359 && a->function != NULL)
43ff13b4 1360 {
604ead4a 1361 struct type *value_type;
bfec99b2 1362
604ead4a
PA
1363 value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (a->function));
1364 if (!value_type)
1365 internal_error (__FILE__, __LINE__,
1366 _("finish_command: function has no target type"));
f5871ec0 1367
604ead4a
PA
1368 if (TYPE_CODE (value_type) != TYPE_CODE_VOID)
1369 print_return_value (SYMBOL_TYPE (a->function), value_type);
43ff13b4 1370 }
f941662f 1371
604ead4a
PA
1372 /* We suppress normal call of normal_stop observer and do it here so
1373 that that *stopped notification includes the return value. */
1374 /* NOTE: This is broken in non-stop mode. There is no guarantee the
1375 next stop will be in the same thread that we started doing a
1376 finish on. This suppressing (or some other replacement means)
1377 should be a thread property. */
347bddb7 1378 observer_notify_normal_stop (bs);
8f6a8e84 1379 suppress_stop_observer = 0;
bfec99b2 1380 delete_breakpoint (a->breakpoint);
43ff13b4
JM
1381}
1382
604ead4a
PA
1383static void
1384finish_command_continuation_free_arg (void *arg)
1385{
1386 /* NOTE: See finish_command_continuation. This would go away, if
1387 this suppressing is made a thread property. */
1388 suppress_stop_observer = 0;
1389 xfree (arg);
1390}
1391
b2175913
MS
1392/* finish_backward -- helper function for finish_command. */
1393
1394static void
1395finish_backward (struct symbol *function)
1396{
1397 struct symtab_and_line sal;
1398 struct thread_info *tp = inferior_thread ();
1399 struct breakpoint *breakpoint;
1400 struct cleanup *old_chain;
1401 CORE_ADDR func_addr;
1402 int back_up;
1403
1404 if (find_pc_partial_function (get_frame_pc (get_current_frame ()),
1405 NULL, &func_addr, NULL) == 0)
1406 internal_error (__FILE__, __LINE__,
1407 _("Finish: couldn't find function."));
1408
1409 sal = find_pc_line (func_addr, 0);
1410
1411 /* We don't need a return value. */
1412 tp->proceed_to_finish = 0;
1413 /* Special case: if we're sitting at the function entry point,
1414 then all we need to do is take a reverse singlestep. We
1415 don't need to set a breakpoint, and indeed it would do us
1416 no good to do so.
1417
1418 Note that this can only happen at frame #0, since there's
1419 no way that a function up the stack can have a return address
1420 that's equal to its entry point. */
1421
1422 if (sal.pc != read_pc ())
1423 {
1424 /* Set breakpoint and continue. */
1425 breakpoint =
1426 set_momentary_breakpoint (sal,
1427 get_frame_id (get_selected_frame (NULL)),
1428 bp_breakpoint);
1429 /* Tell the breakpoint to keep quiet. We won't be done
1430 until we've done another reverse single-step. */
1431 make_breakpoint_silent (breakpoint);
1432 old_chain = make_cleanup_delete_breakpoint (breakpoint);
1433 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1434 /* We will be stopped when proceed returns. */
1435 back_up = bpstat_find_breakpoint (tp->stop_bpstat, breakpoint) != NULL;
1436 do_cleanups (old_chain);
1437 }
1438 else
1439 back_up = 1;
1440 if (back_up)
1441 {
1442 /* If in fact we hit the step-resume breakpoint (and not
1443 some other breakpoint), then we're almost there --
1444 we just need to back up by one more single-step. */
1445 tp->step_range_start = tp->step_range_end = 1;
1446 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 1);
1447 }
1448 return;
1449}
1450
1451/* finish_forward -- helper function for finish_command. */
1452
1453static void
1454finish_forward (struct symbol *function, struct frame_info *frame)
1455{
1456 struct symtab_and_line sal;
1457 struct thread_info *tp = inferior_thread ();
1458 struct breakpoint *breakpoint;
1459 struct cleanup *old_chain;
1460 struct finish_command_continuation_args *cargs;
1461
1462 sal = find_pc_line (get_frame_pc (frame), 0);
1463 sal.pc = get_frame_pc (frame);
1464
1465 breakpoint = set_momentary_breakpoint (sal, get_frame_id (frame),
1466 bp_finish);
1467
1468 old_chain = make_cleanup_delete_breakpoint (breakpoint);
1469
1470 tp->proceed_to_finish = 1; /* We want stop_registers, please... */
1471 make_cleanup_restore_integer (&suppress_stop_observer);
1472 suppress_stop_observer = 1;
1473 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
1474
1475 cargs = xmalloc (sizeof (*cargs));
1476
1477 cargs->breakpoint = breakpoint;
1478 cargs->function = function;
1479 add_continuation (tp, finish_command_continuation, cargs,
1480 finish_command_continuation_free_arg);
1481
1482 discard_cleanups (old_chain);
1483 if (!target_can_async_p ())
1484 do_all_continuations ();
1485}
1486
f941662f
MK
1487/* "finish": Set a temporary breakpoint at the place the selected
1488 frame will return to, then continue. */
c906108c
SS
1489
1490static void
fba45db2 1491finish_command (char *arg, int from_tty)
c906108c 1492{
52f0bd74
AC
1493 struct frame_info *frame;
1494 struct symbol *function;
43ff13b4
JM
1495
1496 int async_exec = 0;
1497
f941662f 1498 /* Find out whether we must run in the background. */
43ff13b4
JM
1499 if (arg != NULL)
1500 async_exec = strip_bg_char (&arg);
1501
1502 /* If we must run in the background, but the target can't do it,
f941662f 1503 error out. */
362646f5 1504 if (async_exec && !target_can_async_p ())
8a3fe4f8 1505 error (_("Asynchronous execution not supported on this target."));
43ff13b4 1506
b2175913
MS
1507 /* Don't try to async in reverse. */
1508 if (async_exec && execution_direction == EXEC_REVERSE)
1509 error (_("Asynchronous 'finish' not supported in reverse."));
1510
43ff13b4 1511 /* If we are not asked to run in the bg, then prepare to run in the
f941662f 1512 foreground, synchronously. */
362646f5 1513 if (!async_exec && target_can_async_p ())
c5aa993b 1514 {
f941662f 1515 /* Simulate synchronous execution. */
6426a772 1516 async_disable_stdin ();
43ff13b4 1517 }
c906108c
SS
1518
1519 if (arg)
8a3fe4f8 1520 error (_("The \"finish\" command does not take any arguments."));
c906108c 1521 if (!target_has_execution)
8a3fe4f8 1522 error (_("The program is not running."));
c906108c 1523
206415a3 1524 frame = get_prev_frame (get_selected_frame (_("No selected frame.")));
c906108c 1525 if (frame == 0)
8a3fe4f8 1526 error (_("\"finish\" not meaningful in the outermost frame."));
c906108c
SS
1527
1528 clear_proceed_status ();
1529
c906108c
SS
1530 /* Find the function we will return from. */
1531
206415a3 1532 function = find_pc_function (get_frame_pc (get_selected_frame (NULL)));
c906108c 1533
f941662f
MK
1534 /* Print info on the selected frame, including level number but not
1535 source. */
c906108c
SS
1536 if (from_tty)
1537 {
b2175913
MS
1538 if (execution_direction == EXEC_REVERSE)
1539 printf_filtered (_("Run back to call of "));
1540 else
1541 printf_filtered (_("Run till exit from "));
1542
b04f3ab4 1543 print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
c906108c
SS
1544 }
1545
b2175913
MS
1546 if (execution_direction == EXEC_REVERSE)
1547 finish_backward (function);
1548 else
1549 finish_forward (function, frame);
c906108c
SS
1550}
1551\f
f941662f 1552
c906108c 1553static void
fba45db2 1554program_info (char *args, int from_tty)
c906108c 1555{
347bddb7
PA
1556 bpstat bs;
1557 int num, stat;
1558 struct thread_info *tp;
1559 ptid_t ptid;
c5aa993b 1560
c906108c
SS
1561 if (!target_has_execution)
1562 {
a3f17187 1563 printf_filtered (_("The program being debugged is not being run.\n"));
c906108c
SS
1564 return;
1565 }
1566
347bddb7
PA
1567 if (non_stop)
1568 ptid = inferior_ptid;
1569 else
1570 {
1571 struct target_waitstatus ws;
1572 get_last_target_status (&ptid, &ws);
1573 }
1574
1575 if (ptid_equal (ptid, null_ptid) || is_exited (ptid))
1576 error (_("Invalid selected thread."));
1577 else if (is_running (ptid))
1578 error (_("Selected thread is running."));
1579
1580 tp = find_thread_pid (ptid);
1581 bs = tp->stop_bpstat;
1582 stat = bpstat_num (&bs, &num);
1583
c906108c 1584 target_files_info ();
a3f17187 1585 printf_filtered (_("Program stopped at %s.\n"),
bb599908 1586 hex_string ((unsigned long) stop_pc));
414c69f7 1587 if (tp->stop_step)
a3f17187 1588 printf_filtered (_("It stopped after being stepped.\n"));
8671a17b 1589 else if (stat != 0)
c906108c
SS
1590 {
1591 /* There may be several breakpoints in the same place, so this
c5aa993b 1592 isn't as strange as it seems. */
8671a17b 1593 while (stat != 0)
c906108c 1594 {
8671a17b 1595 if (stat < 0)
c906108c 1596 {
a3f17187
AC
1597 printf_filtered (_("\
1598It stopped at a breakpoint that has since been deleted.\n"));
c906108c
SS
1599 }
1600 else
a3f17187 1601 printf_filtered (_("It stopped at breakpoint %d.\n"), num);
8671a17b 1602 stat = bpstat_num (&bs, &num);
c906108c
SS
1603 }
1604 }
2020b7ab 1605 else if (tp->stop_signal != TARGET_SIGNAL_0)
c906108c 1606 {
a3f17187 1607 printf_filtered (_("It stopped with signal %s, %s.\n"),
2020b7ab
PA
1608 target_signal_to_name (tp->stop_signal),
1609 target_signal_to_string (tp->stop_signal));
c906108c
SS
1610 }
1611
1612 if (!from_tty)
1613 {
a3f17187
AC
1614 printf_filtered (_("\
1615Type \"info stack\" or \"info registers\" for more information.\n"));
c906108c
SS
1616 }
1617}
1618\f
1619static void
fba45db2 1620environment_info (char *var, int from_tty)
c906108c
SS
1621{
1622 if (var)
1623 {
aa1ee363 1624 char *val = get_in_environ (inferior_environ, var);
c906108c
SS
1625 if (val)
1626 {
1627 puts_filtered (var);
1628 puts_filtered (" = ");
1629 puts_filtered (val);
1630 puts_filtered ("\n");
1631 }
1632 else
1633 {
1634 puts_filtered ("Environment variable \"");
1635 puts_filtered (var);
1636 puts_filtered ("\" not defined.\n");
1637 }
1638 }
1639 else
1640 {
aa1ee363 1641 char **vector = environ_vector (inferior_environ);
c906108c
SS
1642 while (*vector)
1643 {
1644 puts_filtered (*vector++);
1645 puts_filtered ("\n");
1646 }
1647 }
1648}
1649
1650static void
fba45db2 1651set_environment_command (char *arg, int from_tty)
c906108c 1652{
52f0bd74 1653 char *p, *val, *var;
c906108c
SS
1654 int nullset = 0;
1655
1656 if (arg == 0)
e2e0b3e5 1657 error_no_arg (_("environment variable and value"));
c906108c
SS
1658
1659 /* Find seperation between variable name and value */
1660 p = (char *) strchr (arg, '=');
1661 val = (char *) strchr (arg, ' ');
1662
1663 if (p != 0 && val != 0)
1664 {
1665 /* We have both a space and an equals. If the space is before the
c5aa993b
JM
1666 equals, walk forward over the spaces til we see a nonspace
1667 (possibly the equals). */
c906108c
SS
1668 if (p > val)
1669 while (*val == ' ')
1670 val++;
1671
1672 /* Now if the = is after the char following the spaces,
c5aa993b 1673 take the char following the spaces. */
c906108c
SS
1674 if (p > val)
1675 p = val - 1;
1676 }
1677 else if (val != 0 && p == 0)
1678 p = val;
1679
1680 if (p == arg)
e2e0b3e5 1681 error_no_arg (_("environment variable to set"));
c906108c
SS
1682
1683 if (p == 0 || p[1] == 0)
1684 {
1685 nullset = 1;
1686 if (p == 0)
1687 p = arg + strlen (arg); /* So that savestring below will work */
1688 }
1689 else
1690 {
1691 /* Not setting variable value to null */
1692 val = p + 1;
1693 while (*val == ' ' || *val == '\t')
1694 val++;
1695 }
1696
c5aa993b
JM
1697 while (p != arg && (p[-1] == ' ' || p[-1] == '\t'))
1698 p--;
c906108c
SS
1699
1700 var = savestring (arg, p - arg);
1701 if (nullset)
1702 {
a3f17187
AC
1703 printf_filtered (_("\
1704Setting environment variable \"%s\" to null value.\n"),
1705 var);
c906108c
SS
1706 set_in_environ (inferior_environ, var, "");
1707 }
1708 else
1709 set_in_environ (inferior_environ, var, val);
b8c9b27d 1710 xfree (var);
c906108c
SS
1711}
1712
1713static void
fba45db2 1714unset_environment_command (char *var, int from_tty)
c906108c
SS
1715{
1716 if (var == 0)
1717 {
1718 /* If there is no argument, delete all environment variables.
c5aa993b 1719 Ask for confirmation if reading from the terminal. */
e2e0b3e5 1720 if (!from_tty || query (_("Delete all environment variables? ")))
c906108c
SS
1721 {
1722 free_environ (inferior_environ);
1723 inferior_environ = make_environ ();
1724 }
1725 }
1726 else
1727 unset_in_environ (inferior_environ, var);
1728}
1729
1730/* Handle the execution path (PATH variable) */
1731
1732static const char path_var_name[] = "PATH";
1733
c906108c 1734static void
fba45db2 1735path_info (char *args, int from_tty)
c906108c
SS
1736{
1737 puts_filtered ("Executable and object file path: ");
1738 puts_filtered (get_in_environ (inferior_environ, path_var_name));
1739 puts_filtered ("\n");
1740}
1741
1742/* Add zero or more directories to the front of the execution path. */
1743
1744static void
fba45db2 1745path_command (char *dirname, int from_tty)
c906108c
SS
1746{
1747 char *exec_path;
1748 char *env;
1749 dont_repeat ();
1750 env = get_in_environ (inferior_environ, path_var_name);
1751 /* Can be null if path is not set */
1752 if (!env)
1753 env = "";
4fcf66da 1754 exec_path = xstrdup (env);
c906108c
SS
1755 mod_path (dirname, &exec_path);
1756 set_in_environ (inferior_environ, path_var_name, exec_path);
b8c9b27d 1757 xfree (exec_path);
c906108c 1758 if (from_tty)
c5aa993b 1759 path_info ((char *) NULL, from_tty);
c906108c 1760}
c906108c 1761\f
c5aa993b 1762
4782dc19 1763/* Print out the machine register regnum. If regnum is -1, print all
0ab7a791
AC
1764 registers (print_all == 1) or all non-float and non-vector
1765 registers (print_all == 0).
c906108c
SS
1766
1767 For most machines, having all_registers_info() print the
0ab7a791
AC
1768 register(s) one per line is good enough. If a different format is
1769 required, (eg, for MIPS or Pyramid 90x, which both have lots of
1770 regs), or there is an existing convention for showing all the
1771 registers, define the architecture method PRINT_REGISTERS_INFO to
1772 provide that format. */
c906108c 1773
666e11c5 1774void
0ab7a791
AC
1775default_print_registers_info (struct gdbarch *gdbarch,
1776 struct ui_file *file,
1777 struct frame_info *frame,
1778 int regnum, int print_all)
c906108c 1779{
0ab7a791 1780 int i;
a4bd449d
UW
1781 const int numregs = gdbarch_num_regs (gdbarch)
1782 + gdbarch_num_pseudo_regs (gdbarch);
10c42a71 1783 gdb_byte buffer[MAX_REGISTER_SIZE];
0ab7a791 1784
c906108c
SS
1785 for (i = 0; i < numregs; i++)
1786 {
4782dc19
AC
1787 /* Decide between printing all regs, non-float / vector regs, or
1788 specific reg. */
c5aa993b
JM
1789 if (regnum == -1)
1790 {
f9418c0f 1791 if (print_all)
4782dc19 1792 {
f9418c0f 1793 if (!gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
4782dc19 1794 continue;
f9418c0f
AC
1795 }
1796 else
1797 {
1798 if (!gdbarch_register_reggroup_p (gdbarch, i, general_reggroup))
4782dc19
AC
1799 continue;
1800 }
c5aa993b
JM
1801 }
1802 else
1803 {
1804 if (i != regnum)
1805 continue;
1806 }
c906108c
SS
1807
1808 /* If the register name is empty, it is undefined for this
c5aa993b 1809 processor, so don't display anything. */
a4bd449d
UW
1810 if (gdbarch_register_name (gdbarch, i) == NULL
1811 || *(gdbarch_register_name (gdbarch, i)) == '\0')
c906108c
SS
1812 continue;
1813
a4bd449d 1814 fputs_filtered (gdbarch_register_name (gdbarch, i), file);
c9f4d572 1815 print_spaces_filtered (15 - strlen (gdbarch_register_name
a4bd449d 1816 (gdbarch, i)), file);
c906108c
SS
1817
1818 /* Get the data in raw format. */
9730f241 1819 if (! frame_register_read (frame, i, buffer))
c906108c 1820 {
0ab7a791 1821 fprintf_filtered (file, "*value not available*\n");
c906108c
SS
1822 continue;
1823 }
1824
0ab7a791
AC
1825 /* If virtual format is floating, print it that way, and in raw
1826 hex. */
f949c649
TJB
1827 if (TYPE_CODE (register_type (gdbarch, i)) == TYPE_CODE_FLT
1828 || TYPE_CODE (register_type (gdbarch, i)) == TYPE_CODE_DECFLOAT)
c906108c 1829 {
0ab7a791 1830 int j;
79a45b7d 1831 struct value_print_options opts;
c906108c 1832
79a45b7d
TT
1833 get_user_print_options (&opts);
1834 opts.deref_ref = 1;
a4bd449d 1835 val_print (register_type (gdbarch, i), buffer, 0, 0,
79a45b7d 1836 file, 0, &opts, current_language);
c906108c 1837
0ab7a791 1838 fprintf_filtered (file, "\t(raw 0x");
a4bd449d 1839 for (j = 0; j < register_size (gdbarch, i); j++)
c906108c 1840 {
0ab7a791 1841 int idx;
a4bd449d 1842 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
0ab7a791
AC
1843 idx = j;
1844 else
a4bd449d 1845 idx = register_size (gdbarch, i) - 1 - j;
9730f241 1846 fprintf_filtered (file, "%02x", (unsigned char) buffer[idx]);
c906108c 1847 }
0ab7a791 1848 fprintf_filtered (file, ")");
c906108c 1849 }
c906108c
SS
1850 else
1851 {
79a45b7d
TT
1852 struct value_print_options opts;
1853
ab4327e0 1854 /* Print the register in hex. */
79a45b7d
TT
1855 get_formatted_print_options (&opts, 'x');
1856 opts.deref_ref = 1;
a4bd449d 1857 val_print (register_type (gdbarch, i), buffer, 0, 0,
79a45b7d
TT
1858 file, 0, &opts,
1859 current_language);
ab4327e0
EZ
1860 /* If not a vector register, print it also according to its
1861 natural format. */
a4bd449d 1862 if (TYPE_VECTOR (register_type (gdbarch, i)) == 0)
ab4327e0 1863 {
79a45b7d
TT
1864 get_user_print_options (&opts);
1865 opts.deref_ref = 1;
9d84ac84 1866 fprintf_filtered (file, "\t");
a4bd449d 1867 val_print (register_type (gdbarch, i), buffer, 0, 0,
79a45b7d 1868 file, 0, &opts, current_language);
ab4327e0 1869 }
c906108c
SS
1870 }
1871
0ab7a791 1872 fprintf_filtered (file, "\n");
c906108c
SS
1873 }
1874}
c906108c 1875
c906108c 1876void
fba45db2 1877registers_info (char *addr_exp, int fpregs)
c906108c 1878{
206415a3 1879 struct frame_info *frame;
a4bd449d 1880 struct gdbarch *gdbarch;
c906108c 1881 int regnum, numregs;
52f0bd74 1882 char *end;
c906108c
SS
1883
1884 if (!target_has_registers)
8a3fe4f8 1885 error (_("The program has no registers now."));
206415a3 1886 frame = get_selected_frame (NULL);
a4bd449d 1887 gdbarch = get_frame_arch (frame);
c906108c
SS
1888
1889 if (!addr_exp)
1890 {
a4bd449d 1891 gdbarch_print_registers_info (gdbarch, gdb_stdout,
206415a3 1892 frame, -1, fpregs);
c906108c
SS
1893 return;
1894 }
1895
f9418c0f 1896 while (*addr_exp != '\0')
c5aa993b 1897 {
f9418c0f
AC
1898 char *start;
1899 const char *end;
c906108c 1900
f9418c0f
AC
1901 /* Keep skipping leading white space. */
1902 if (isspace ((*addr_exp)))
1903 {
1904 addr_exp++;
1905 continue;
1906 }
c906108c 1907
f9418c0f
AC
1908 /* Discard any leading ``$''. Check that there is something
1909 resembling a register following it. */
1910 if (addr_exp[0] == '$')
1911 addr_exp++;
1912 if (isspace ((*addr_exp)) || (*addr_exp) == '\0')
8a3fe4f8 1913 error (_("Missing register name"));
c906108c 1914
f9418c0f
AC
1915 /* Find the start/end of this register name/num/group. */
1916 start = addr_exp;
1917 while ((*addr_exp) != '\0' && !isspace ((*addr_exp)))
1918 addr_exp++;
1919 end = addr_exp;
ad842144 1920
f9418c0f
AC
1921 /* Figure out what we've found and display it. */
1922
1923 /* A register name? */
1924 {
029a67e4 1925 int regnum = user_reg_map_name_to_regnum (gdbarch, start, end - start);
f9418c0f
AC
1926 if (regnum >= 0)
1927 {
ad842144
MR
1928 /* User registers lie completely outside of the range of
1929 normal registers. Catch them early so that the target
1930 never sees them. */
1931 if (regnum >= gdbarch_num_regs (gdbarch)
1932 + gdbarch_num_pseudo_regs (gdbarch))
1933 {
79a45b7d 1934 struct value_print_options opts;
ad842144
MR
1935 struct value *val = value_of_user_reg (regnum, frame);
1936
1937 printf_filtered ("%s: ", start);
79a45b7d 1938 get_formatted_print_options (&opts, 'x');
ad842144
MR
1939 print_scalar_formatted (value_contents (val),
1940 check_typedef (value_type (val)),
79a45b7d 1941 &opts, 0, gdb_stdout);
ad842144
MR
1942 printf_filtered ("\n");
1943 }
1944 else
1945 gdbarch_print_registers_info (gdbarch, gdb_stdout,
1946 frame, regnum, fpregs);
f9418c0f
AC
1947 continue;
1948 }
1949 }
ad842144 1950
f9418c0f
AC
1951 /* A register number? (how portable is this one?). */
1952 {
1953 char *endptr;
1954 int regnum = strtol (start, &endptr, 0);
1955 if (endptr == end
1956 && regnum >= 0
a4bd449d
UW
1957 && regnum < gdbarch_num_regs (gdbarch)
1958 + gdbarch_num_pseudo_regs (gdbarch))
f9418c0f 1959 {
a4bd449d 1960 gdbarch_print_registers_info (gdbarch, gdb_stdout,
206415a3 1961 frame, regnum, fpregs);
f9418c0f
AC
1962 continue;
1963 }
1964 }
1965
1966 /* A register group? */
1967 {
6c7d17ba 1968 struct reggroup *group;
a4bd449d 1969 for (group = reggroup_next (gdbarch, NULL);
6c7d17ba 1970 group != NULL;
a4bd449d 1971 group = reggroup_next (gdbarch, group))
f9418c0f
AC
1972 {
1973 /* Don't bother with a length check. Should the user
1974 enter a short register group name, go with the first
1975 group that matches. */
6c7d17ba 1976 if (strncmp (start, reggroup_name (group), end - start) == 0)
f9418c0f
AC
1977 break;
1978 }
6c7d17ba 1979 if (group != NULL)
f9418c0f
AC
1980 {
1981 int regnum;
f57d151a 1982 for (regnum = 0;
a4bd449d
UW
1983 regnum < gdbarch_num_regs (gdbarch)
1984 + gdbarch_num_pseudo_regs (gdbarch);
f57d151a 1985 regnum++)
f9418c0f 1986 {
a4bd449d
UW
1987 if (gdbarch_register_reggroup_p (gdbarch, regnum, group))
1988 gdbarch_print_registers_info (gdbarch,
206415a3 1989 gdb_stdout, frame,
f9418c0f
AC
1990 regnum, fpregs);
1991 }
1992 continue;
1993 }
1994 }
c906108c 1995
f9418c0f 1996 /* Nothing matched. */
8a3fe4f8 1997 error (_("Invalid register `%.*s'"), (int) (end - start), start);
c5aa993b 1998 }
c906108c
SS
1999}
2000
2001void
fba45db2 2002all_registers_info (char *addr_exp, int from_tty)
c906108c
SS
2003{
2004 registers_info (addr_exp, 1);
2005}
2006
a58dd373 2007static void
fba45db2 2008nofp_registers_info (char *addr_exp, int from_tty)
c906108c
SS
2009{
2010 registers_info (addr_exp, 0);
2011}
e76f1f2e
AC
2012
2013static void
2014print_vector_info (struct gdbarch *gdbarch, struct ui_file *file,
2015 struct frame_info *frame, const char *args)
2016{
2017 if (gdbarch_print_vector_info_p (gdbarch))
2018 gdbarch_print_vector_info (gdbarch, file, frame, args);
2019 else
2020 {
2021 int regnum;
2022 int printed_something = 0;
ab4327e0 2023
f57d151a 2024 for (regnum = 0;
a4bd449d
UW
2025 regnum < gdbarch_num_regs (gdbarch)
2026 + gdbarch_num_pseudo_regs (gdbarch);
f57d151a 2027 regnum++)
e76f1f2e 2028 {
f9418c0f 2029 if (gdbarch_register_reggroup_p (gdbarch, regnum, vector_reggroup))
e76f1f2e
AC
2030 {
2031 printed_something = 1;
e76f1f2e 2032 gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
e76f1f2e
AC
2033 }
2034 }
2035 if (!printed_something)
2036 fprintf_filtered (file, "No vector information\n");
2037 }
2038}
2039
2040static void
2041vector_info (char *args, int from_tty)
2042{
206415a3
DJ
2043 if (!target_has_registers)
2044 error (_("The program has no registers now."));
2045
2046 print_vector_info (current_gdbarch, gdb_stdout,
2047 get_selected_frame (NULL), args);
e76f1f2e 2048}
c906108c 2049\f
c5aa993b 2050
74531fed
PA
2051/* Used in `attach&' command. ARG is a point to an integer
2052 representing a process id. Proceed threads of this process iff
2053 they stopped due to debugger request, and when they did, they
2054 reported a clean stop (TARGET_SIGNAL_0). Do not proceed threads
2055 that have been explicitly been told to stop. */
2056
2057static int
2058proceed_after_attach_callback (struct thread_info *thread,
2059 void *arg)
2060{
2061 int pid = * (int *) arg;
2062
2063 if (ptid_get_pid (thread->ptid) == pid
2064 && !is_exited (thread->ptid)
2065 && !is_executing (thread->ptid)
2066 && !thread->stop_requested
2067 && thread->stop_signal == TARGET_SIGNAL_0)
2068 {
2069 switch_to_thread (thread->ptid);
2070 clear_proceed_status ();
2071 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
2072 }
2073
2074 return 0;
2075}
2076
2077static void
2078proceed_after_attach (int pid)
2079{
2080 /* Don't error out if the current thread is running, because
2081 there may be other stopped threads. */
2082 struct cleanup *old_chain;
2083
2084 /* Backup current thread and selected frame. */
2085 old_chain = make_cleanup_restore_current_thread ();
2086
2087 iterate_over_threads (proceed_after_attach_callback, &pid);
2088
2089 /* Restore selected ptid. */
2090 do_cleanups (old_chain);
2091}
2092
c906108c
SS
2093/*
2094 * TODO:
2095 * Should save/restore the tty state since it might be that the
2096 * program to be debugged was started on this tty and it wants
2097 * the tty in some state other than what we want. If it's running
2098 * on another terminal or without a terminal, then saving and
2099 * restoring the tty state is a harmless no-op.
2100 * This only needs to be done if we are attaching to a process.
2101 */
2102
2103/*
2104 attach_command --
2105 takes a program started up outside of gdb and ``attaches'' to it.
2106 This stops it cold in its tracks and allows us to start debugging it.
2107 and wait for the trace-trap that results from attaching. */
2108
9356cf8d
PA
2109static void
2110attach_command_post_wait (char *args, int from_tty, int async_exec)
2111{
2112 char *exec_file;
2113 char *full_exec_path = NULL;
d6b48e9c 2114 struct inferior *inferior;
9356cf8d 2115
d6b48e9c
PA
2116 inferior = current_inferior ();
2117 inferior->stop_soon = NO_STOP_QUIETLY;
9356cf8d
PA
2118
2119 /* If no exec file is yet known, try to determine it from the
2120 process itself. */
2121 exec_file = (char *) get_exec_file (0);
2122 if (!exec_file)
2123 {
2124 exec_file = target_pid_to_exec_file (PIDGET (inferior_ptid));
2125 if (exec_file)
2126 {
2127 /* It's possible we don't have a full path, but rather just a
2128 filename. Some targets, such as HP-UX, don't provide the
2129 full path, sigh.
2130
2131 Attempt to qualify the filename against the source path.
2132 (If that fails, we'll just fall back on the original
2133 filename. Not much more we can do...)
2134 */
2135 if (!source_full_path_of (exec_file, &full_exec_path))
2136 full_exec_path = savestring (exec_file, strlen (exec_file));
2137
2138 exec_file_attach (full_exec_path, from_tty);
2139 symbol_file_add_main (full_exec_path, from_tty);
2140 }
2141 }
2142 else
2143 {
2144 reopen_exec_file ();
2145 reread_symbols ();
2146 }
2147
2148 /* Take any necessary post-attaching actions for this platform. */
2149 target_post_attach (PIDGET (inferior_ptid));
2150
2151 post_create_inferior (&current_target, from_tty);
2152
2153 /* Install inferior's terminal modes. */
2154 target_terminal_inferior ();
2155
2156 if (async_exec)
74531fed
PA
2157 {
2158 /* The user requested an `attach&', so be sure to leave threads
2159 that didn't get a signal running. */
2160
2161 /* Immediatelly resume all suspended threads of this inferior,
2162 and this inferior only. This should have no effect on
2163 already running threads. If a thread has been stopped with a
2164 signal, leave it be. */
2165 if (non_stop)
2166 proceed_after_attach (inferior->pid);
2167 else
2168 {
2169 if (inferior_thread ()->stop_signal == TARGET_SIGNAL_0)
2170 {
2171 clear_proceed_status ();
2172 proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
2173 }
2174 }
2175 }
9356cf8d
PA
2176 else
2177 {
74531fed
PA
2178 /* The user requested a plain `attach', so be sure to leave
2179 the inferior stopped. */
2180
9356cf8d
PA
2181 if (target_can_async_p ())
2182 async_enable_stdin ();
74531fed
PA
2183
2184 /* At least the current thread is already stopped. */
2185
2186 /* In all-stop, by definition, all threads have to be already
2187 stopped at this point. In non-stop, however, although the
2188 selected thread is stopped, others may still be executing.
2189 Be sure to explicitly stop all threads of the process. This
2190 should have no effect on already stopped threads. */
2191 if (non_stop)
2192 target_stop (pid_to_ptid (inferior->pid));
2193
2194 /* Tell the user/frontend where we're stopped. */
9356cf8d
PA
2195 normal_stop ();
2196 if (deprecated_attach_hook)
2197 deprecated_attach_hook ();
2198 }
2199}
2200
bfec99b2 2201struct attach_command_continuation_args
9356cf8d
PA
2202{
2203 char *args;
2204 int from_tty;
2205 int async_exec;
bfec99b2 2206};
9356cf8d 2207
bfec99b2 2208static void
604ead4a 2209attach_command_continuation (void *args)
bfec99b2
PA
2210{
2211 struct attach_command_continuation_args *a = args;
2212 attach_command_post_wait (a->args, a->from_tty, a->async_exec);
9356cf8d
PA
2213}
2214
604ead4a
PA
2215static void
2216attach_command_continuation_free_args (void *args)
2217{
2218 struct attach_command_continuation_args *a = args;
2219 xfree (a->args);
2220 xfree (a);
2221}
2222
c906108c 2223void
fba45db2 2224attach_command (char *args, int from_tty)
c906108c 2225{
c5aa993b
JM
2226 char *exec_file;
2227 char *full_exec_path = NULL;
9356cf8d 2228 int async_exec = 0;
c906108c 2229
c5aa993b 2230 dont_repeat (); /* Not for the faint of heart */
c906108c 2231
8a305172
PA
2232 if (target_supports_multi_process ())
2233 /* Don't complain if we can be attached to multiple processes. */
2234 ;
2235 else if (target_has_execution)
c906108c
SS
2236 {
2237 if (query ("A program is being debugged already. Kill it? "))
2238 target_kill ();
2239 else
8a3fe4f8 2240 error (_("Not killed."));
c906108c
SS
2241 }
2242
fd79ecee
DJ
2243 /* Clean up any leftovers from other runs. Some other things from
2244 this function should probably be moved into target_pre_inferior. */
2245 target_pre_inferior (from_tty);
2246
9908b566
VP
2247 if (non_stop && !target_supports_non_stop ())
2248 error (_("Cannot attach to this target in non-stop mode"));
2249
9356cf8d
PA
2250 if (args)
2251 {
2252 async_exec = strip_bg_char (&args);
2253
2254 /* If we get a request for running in the bg but the target
2255 doesn't support it, error out. */
2256 if (async_exec && !target_can_async_p ())
2257 error (_("Asynchronous execution not supported on this target."));
2258 }
2259
2260 /* If we don't get a request of running in the bg, then we need
2261 to simulate synchronous (fg) execution. */
2262 if (!async_exec && target_can_async_p ())
2263 {
2264 /* Simulate synchronous execution */
2265 async_disable_stdin ();
2266 }
2267
c906108c
SS
2268 target_attach (args, from_tty);
2269
2270 /* Set up the "saved terminal modes" of the inferior
2271 based on what modes we are starting it with. */
2272 target_terminal_init ();
2273
c906108c
SS
2274 /* Set up execution context to know that we should return from
2275 wait_for_inferior as soon as the target reports a stop. */
2276 init_wait_for_inferior ();
2277 clear_proceed_status ();
c906108c 2278
74531fed
PA
2279 if (non_stop)
2280 {
2281 /* If we find that the current thread isn't stopped, explicitly
2282 do so now, because we're going to install breakpoints and
2283 poke at memory. */
2284
2285 if (async_exec)
2286 /* The user requested an `attach&'; stop just one thread. */
2287 target_stop (inferior_ptid);
2288 else
2289 /* The user requested an `attach', so stop all threads of this
2290 inferior. */
2291 target_stop (pid_to_ptid (ptid_get_pid (inferior_ptid)));
2292 }
2293
dc177b7a
PA
2294 /* Some system don't generate traps when attaching to inferior.
2295 E.g. Mach 3 or GNU hurd. */
2296 if (!target_attach_no_wait)
c5aa993b 2297 {
d6b48e9c
PA
2298 struct inferior *inferior = current_inferior ();
2299
dc177b7a
PA
2300 /* Careful here. See comments in inferior.h. Basically some
2301 OSes don't ignore SIGSTOPs on continue requests anymore. We
2302 need a way for handle_inferior_event to reset the stop_signal
2303 variable after an attach, and this is what
2304 STOP_QUIETLY_NO_SIGSTOP is for. */
d6b48e9c 2305 inferior->stop_soon = STOP_QUIETLY_NO_SIGSTOP;
c5aa993b 2306
dc177b7a
PA
2307 if (target_can_async_p ())
2308 {
2309 /* sync_execution mode. Wait for stop. */
bfec99b2
PA
2310 struct attach_command_continuation_args *a;
2311
2312 a = xmalloc (sizeof (*a));
2313 a->args = xstrdup (args);
2314 a->from_tty = from_tty;
2315 a->async_exec = async_exec;
95e54da7
PA
2316 add_continuation (inferior_thread (),
2317 attach_command_continuation, a,
604ead4a 2318 attach_command_continuation_free_args);
dc177b7a
PA
2319 return;
2320 }
c906108c 2321
dc177b7a
PA
2322 wait_for_inferior (0);
2323 }
6426a772 2324
9356cf8d 2325 attach_command_post_wait (args, from_tty, async_exec);
c906108c
SS
2326}
2327
2328/*
2329 * detach_command --
2330 * takes a program previously attached to and detaches it.
2331 * The program resumes execution and will no longer stop
2332 * on signals, etc. We better not have left any breakpoints
2333 * in the program or it'll die when it hits one. For this
2334 * to work, it may be necessary for the process to have been
2335 * previously attached. It *might* work if the program was
2336 * started via the normal ptrace (PTRACE_TRACEME).
2337 */
2338
2339static void
fba45db2 2340detach_command (char *args, int from_tty)
c906108c 2341{
1f5d0fc9 2342 dont_repeat (); /* Not for the faint of heart. */
c906108c 2343 target_detach (args, from_tty);
e85a822c 2344 no_shared_libraries (NULL, from_tty);
8a305172
PA
2345
2346 /* If the current target interface claims there's still execution,
2347 then don't mess with threads of other processes. */
2348 if (!target_has_execution)
2349 init_thread_list ();
2350
9a4105ab
AC
2351 if (deprecated_detach_hook)
2352 deprecated_detach_hook ();
c906108c
SS
2353}
2354
6ad8ae5c
DJ
2355/* Disconnect from the current target without resuming it (leaving it
2356 waiting for a debugger).
2357
2358 We'd better not have left any breakpoints in the program or the
2359 next debugger will get confused. Currently only supported for some
2360 remote targets, since the normal attach mechanisms don't work on
2361 stopped processes on some native platforms (e.g. GNU/Linux). */
2362
2363static void
2364disconnect_command (char *args, int from_tty)
2365{
2366 dont_repeat (); /* Not for the faint of heart */
2367 target_disconnect (args, from_tty);
e85a822c 2368 no_shared_libraries (NULL, from_tty);
a0ef4274 2369 init_thread_list ();
9a4105ab
AC
2370 if (deprecated_detach_hook)
2371 deprecated_detach_hook ();
6ad8ae5c
DJ
2372}
2373
77ebaa5a
VP
2374void
2375interrupt_target_1 (int all_threads)
2376{
2377 ptid_t ptid;
2378 if (all_threads)
2379 ptid = minus_one_ptid;
2380 else
2381 ptid = inferior_ptid;
2382 target_stop (ptid);
252fbfc8
PA
2383
2384 /* Tag the thread as having been explicitly requested to stop, so
2385 other parts of gdb know not to resume this thread automatically,
2386 if it was stopped due to an internal event. Limit this to
2387 non-stop mode, as when debugging a multi-threaded application in
2388 all-stop mode, we will only get one stop event --- it's undefined
2389 which thread will report the event. */
2390 if (non_stop)
2391 set_stop_requested (ptid, 1);
77ebaa5a
VP
2392}
2393
43ff13b4 2394/* Stop the execution of the target while running in async mode, in
8cae4b3f
PA
2395 the backgound. In all-stop, stop the whole process. In non-stop
2396 mode, stop the current thread only by default, or stop all threads
2397 if the `-a' switch is used. */
2398
2399/* interrupt [-a] */
8b93c638 2400void
fba45db2 2401interrupt_target_command (char *args, int from_tty)
43ff13b4 2402{
362646f5 2403 if (target_can_async_p ())
43ff13b4 2404 {
8cae4b3f
PA
2405 int all_threads = 0;
2406
c5aa993b 2407 dont_repeat (); /* Not for the faint of heart */
94cc34af 2408
8cae4b3f
PA
2409 if (args != NULL
2410 && strncmp (args, "-a", sizeof ("-a") - 1) == 0)
2411 all_threads = 1;
2412
2413 if (!non_stop && all_threads)
2414 error (_("-a is meaningless in all-stop mode."));
2415
77ebaa5a 2416 interrupt_target_1 (all_threads);
43ff13b4
JM
2417 }
2418}
2419
c906108c 2420static void
23e3a7ac
AC
2421print_float_info (struct gdbarch *gdbarch, struct ui_file *file,
2422 struct frame_info *frame, const char *args)
c906108c 2423{
23e3a7ac
AC
2424 if (gdbarch_print_float_info_p (gdbarch))
2425 gdbarch_print_float_info (gdbarch, file, frame, args);
2426 else
2427 {
23e3a7ac
AC
2428 int regnum;
2429 int printed_something = 0;
ab4327e0 2430
f57d151a 2431 for (regnum = 0;
a4bd449d
UW
2432 regnum < gdbarch_num_regs (gdbarch)
2433 + gdbarch_num_pseudo_regs (gdbarch);
f57d151a 2434 regnum++)
23e3a7ac 2435 {
f9418c0f 2436 if (gdbarch_register_reggroup_p (gdbarch, regnum, float_reggroup))
23e3a7ac
AC
2437 {
2438 printed_something = 1;
23e3a7ac 2439 gdbarch_print_registers_info (gdbarch, file, frame, regnum, 1);
23e3a7ac
AC
2440 }
2441 }
2442 if (!printed_something)
2443 fprintf_filtered (file, "\
2444No floating-point info available for this processor.\n");
23e3a7ac
AC
2445 }
2446}
2447
2448static void
2449float_info (char *args, int from_tty)
2450{
206415a3
DJ
2451 if (!target_has_registers)
2452 error (_("The program has no registers now."));
2453
1f5d0fc9 2454 print_float_info (current_gdbarch, gdb_stdout,
206415a3 2455 get_selected_frame (NULL), args);
c906108c
SS
2456}
2457\f
c906108c 2458static void
fba45db2 2459unset_command (char *args, int from_tty)
c906108c 2460{
a3f17187
AC
2461 printf_filtered (_("\
2462\"unset\" must be followed by the name of an unset subcommand.\n"));
c906108c
SS
2463 help_list (unsetlist, "unset ", -1, gdb_stdout);
2464}
2465
2466void
fba45db2 2467_initialize_infcmd (void)
c906108c 2468{
3cb3b8df
BR
2469 struct cmd_list_element *c = NULL;
2470
2471 /* add the filename of the terminal connected to inferior I/O */
2472 add_setshow_filename_cmd ("inferior-tty", class_run,
2473 &inferior_io_terminal, _("\
2474Set terminal for future runs of program being debugged."), _("\
2475Show terminal for future runs of program being debugged."), _("\
2476Usage: set inferior-tty /dev/pts/1"), NULL, NULL, &setlist, &showlist);
2477 add_com_alias ("tty", "set inferior-tty", class_alias, 0);
c906108c 2478
b4b4ac0b
AC
2479 add_setshow_optional_filename_cmd ("args", class_run,
2480 &inferior_args, _("\
2481Set argument list to give program being debugged when it is started."), _("\
2482Show argument list to give program being debugged when it is started."), _("\
2483Follow this command with any number of args, to be passed to the program."),
2484 notice_args_set,
2485 notice_args_read,
2486 &setlist, &showlist);
c906108c 2487
1a966eab
AC
2488 c = add_cmd ("environment", no_class, environment_info, _("\
2489The environment to give the program, or one variable's value.\n\
c906108c
SS
2490With an argument VAR, prints the value of environment variable VAR to\n\
2491give the program being debugged. With no arguments, prints the entire\n\
1a966eab 2492environment to be given to the program."), &showlist);
5ba2abeb 2493 set_cmd_completer (c, noop_completer);
c906108c
SS
2494
2495 add_prefix_cmd ("unset", no_class, unset_command,
1bedd215 2496 _("Complement to certain \"set\" commands."),
c906108c 2497 &unsetlist, "unset ", 0, &cmdlist);
c5aa993b 2498
1a966eab
AC
2499 c = add_cmd ("environment", class_run, unset_environment_command, _("\
2500Cancel environment variable VAR for the program.\n\
2501This does not affect the program until the next \"run\" command."),
c5aa993b 2502 &unsetlist);
5ba2abeb 2503 set_cmd_completer (c, noop_completer);
c906108c 2504
1a966eab
AC
2505 c = add_cmd ("environment", class_run, set_environment_command, _("\
2506Set environment variable value to give the program.\n\
c906108c
SS
2507Arguments are VAR VALUE where VAR is variable name and VALUE is value.\n\
2508VALUES of environment variables are uninterpreted strings.\n\
1a966eab 2509This does not affect the program until the next \"run\" command."),
c5aa993b 2510 &setlist);
5ba2abeb 2511 set_cmd_completer (c, noop_completer);
c5aa993b 2512
1bedd215
AC
2513 c = add_com ("path", class_files, path_command, _("\
2514Add directory DIR(s) to beginning of search path for object files.\n\
c906108c
SS
2515$cwd in the path means the current working directory.\n\
2516This path is equivalent to the $PATH shell variable. It is a list of\n\
2517directories, separated by colons. These directories are searched to find\n\
1bedd215 2518fully linked executable files and separately compiled object files as needed."));
5ba2abeb 2519 set_cmd_completer (c, filename_completer);
c906108c 2520
1a966eab
AC
2521 c = add_cmd ("paths", no_class, path_info, _("\
2522Current search path for finding object files.\n\
c906108c
SS
2523$cwd in the path means the current working directory.\n\
2524This path is equivalent to the $PATH shell variable. It is a list of\n\
2525directories, separated by colons. These directories are searched to find\n\
1a966eab 2526fully linked executable files and separately compiled object files as needed."),
c906108c 2527 &showlist);
5ba2abeb 2528 set_cmd_completer (c, noop_completer);
c906108c 2529
1bedd215
AC
2530 add_com ("attach", class_run, attach_command, _("\
2531Attach to a process or file outside of GDB.\n\
c906108c
SS
2532This command attaches to another target, of the same type as your last\n\
2533\"target\" command (\"info files\" will show your target stack).\n\
2534The command may take as argument a process id or a device file.\n\
2535For a process id, you must have permission to send the process a signal,\n\
2536and it must have the same effective uid as the debugger.\n\
2537When using \"attach\" with a process id, the debugger finds the\n\
2538program running in the process, looking first in the current working\n\
2539directory, or (if not found there) using the source file search path\n\
2540(see the \"directory\" command). You can also use the \"file\" command\n\
1bedd215 2541to specify the program, and to load its symbol table."));
c906108c 2542
f73adfeb 2543 add_prefix_cmd ("detach", class_run, detach_command, _("\
1bedd215 2544Detach a process or file previously attached.\n\
c906108c 2545If a process, it is no longer traced, and it continues its execution. If\n\
f73adfeb
AS
2546you were debugging a file, the file is closed and gdb no longer accesses it."),
2547 &detachlist, "detach ", 0, &cmdlist);
c906108c 2548
1bedd215
AC
2549 add_com ("disconnect", class_run, disconnect_command, _("\
2550Disconnect from a target.\n\
6ad8ae5c 2551The target will wait for another debugger to connect. Not available for\n\
1bedd215 2552all targets."));
6ad8ae5c 2553
1bedd215
AC
2554 add_com ("signal", class_run, signal_command, _("\
2555Continue program giving it signal specified by the argument.\n\
2556An argument of \"0\" means continue program without giving it a signal."));
c906108c 2557
1bedd215
AC
2558 add_com ("stepi", class_run, stepi_command, _("\
2559Step one instruction exactly.\n\
2560Argument N means do this N times (or till program stops for another reason)."));
c906108c
SS
2561 add_com_alias ("si", "stepi", class_alias, 0);
2562
1bedd215
AC
2563 add_com ("nexti", class_run, nexti_command, _("\
2564Step one instruction, but proceed through subroutine calls.\n\
2565Argument N means do this N times (or till program stops for another reason)."));
c906108c
SS
2566 add_com_alias ("ni", "nexti", class_alias, 0);
2567
1bedd215
AC
2568 add_com ("finish", class_run, finish_command, _("\
2569Execute until selected stack frame returns.\n\
2570Upon return, the value returned is printed and put in the value history."));
0e479716 2571 add_com_alias ("fin", "finish", class_run, 1);
c906108c 2572
1bedd215
AC
2573 add_com ("next", class_run, next_command, _("\
2574Step program, proceeding through subroutine calls.\n\
c906108c
SS
2575Like the \"step\" command as long as subroutine calls do not happen;\n\
2576when they do, the call is treated as one instruction.\n\
1bedd215 2577Argument N means do this N times (or till program stops for another reason)."));
c906108c
SS
2578 add_com_alias ("n", "next", class_run, 1);
2579 if (xdb_commands)
c5aa993b 2580 add_com_alias ("S", "next", class_run, 1);
c906108c 2581
1bedd215
AC
2582 add_com ("step", class_run, step_command, _("\
2583Step program until it reaches a different source line.\n\
2584Argument N means do this N times (or till program stops for another reason)."));
c906108c
SS
2585 add_com_alias ("s", "step", class_run, 1);
2586
1bedd215
AC
2587 c = add_com ("until", class_run, until_command, _("\
2588Execute until the program reaches a source line greater than the current\n\
2589or a specified location (same args as break command) within the current frame."));
5ba2abeb 2590 set_cmd_completer (c, location_completer);
c906108c 2591 add_com_alias ("u", "until", class_run, 1);
c5aa993b 2592
1bedd215
AC
2593 c = add_com ("advance", class_run, advance_command, _("\
2594Continue the program up to the given location (same form as args for break command).\n\
2595Execution will also stop upon exit from the current stack frame."));
ae66c1fc
EZ
2596 set_cmd_completer (c, location_completer);
2597
1bedd215
AC
2598 c = add_com ("jump", class_run, jump_command, _("\
2599Continue program being debugged at specified line or address.\n\
c906108c 2600Give as argument either LINENUM or *ADDR, where ADDR is an expression\n\
1bedd215 2601for an address to start at."));
5ba2abeb 2602 set_cmd_completer (c, location_completer);
c906108c 2603
b83266a0 2604 if (xdb_commands)
c94fdfd0 2605 {
1bedd215
AC
2606 c = add_com ("go", class_run, go_command, _("\
2607Usage: go <location>\n\
c906108c
SS
2608Continue program being debugged, stopping at specified line or \n\
2609address.\n\
2610Give as argument either LINENUM or *ADDR, where ADDR is an \n\
2611expression for an address to start at.\n\
1bedd215 2612This command is a combination of tbreak and jump."));
5ba2abeb 2613 set_cmd_completer (c, location_completer);
c94fdfd0 2614 }
b83266a0 2615
c906108c 2616 if (xdb_commands)
c5aa993b 2617 add_com_alias ("g", "go", class_run, 1);
c906108c 2618
8cae4b3f 2619 c = add_com ("continue", class_run, continue_command, _("\
1bedd215 2620Continue program being debugged, after signal or breakpoint.\n\
c906108c
SS
2621If proceeding from breakpoint, a number N may be used as an argument,\n\
2622which means to set the ignore count of that breakpoint to N - 1 (so that\n\
8cae4b3f
PA
2623the breakpoint won't break until the Nth time it is reached).\n\
2624\n\
2625If non-stop mode is enabled, continue only the current thread,\n\
2626otherwise all the threads in the program are continued. To \n\
2627continue all stopped threads in non-stop mode, use the -a option.\n\
2628Specifying -a and an ignore count simultaneously is an error."));
c906108c
SS
2629 add_com_alias ("c", "cont", class_run, 1);
2630 add_com_alias ("fg", "cont", class_run, 1);
2631
1bedd215
AC
2632 c = add_com ("run", class_run, run_command, _("\
2633Start debugged program. You may specify arguments to give it.\n\
c906108c
SS
2634Args may include \"*\", or \"[...]\"; they are expanded using \"sh\".\n\
2635Input and output redirection with \">\", \"<\", or \">>\" are also allowed.\n\n\
2636With no arguments, uses arguments last specified (with \"run\" or \"set args\").\n\
2637To cancel previous arguments and run with no arguments,\n\
1bedd215 2638use \"set args\" without arguments."));
5ba2abeb 2639 set_cmd_completer (c, filename_completer);
c906108c
SS
2640 add_com_alias ("r", "run", class_run, 1);
2641 if (xdb_commands)
2642 add_com ("R", class_run, run_no_args_command,
1bedd215 2643 _("Start debugged program with no arguments."));
c906108c 2644
1bedd215 2645 c = add_com ("start", class_run, start_command, _("\
a4d5f2e0
JB
2646Run the debugged program until the beginning of the main procedure.\n\
2647You may specify arguments to give to your program, just as with the\n\
1bedd215 2648\"run\" command."));
a4d5f2e0
JB
2649 set_cmd_completer (c, filename_completer);
2650
700b53b1 2651 c = add_com ("interrupt", class_run, interrupt_target_command,
8cae4b3f
PA
2652 _("Interrupt the execution of the debugged program.\n\
2653If non-stop mode is enabled, interrupt only the current thread,\n\
2654otherwise all the threads in the program are stopped. To \n\
2655interrupt all running threads in non-stop mode, use the -a option."));
43ff13b4 2656
1bedd215
AC
2657 add_info ("registers", nofp_registers_info, _("\
2658List of integer registers and their contents, for selected stack frame.\n\
2659Register name as argument means describe only that register."));
7194c49b 2660 add_info_alias ("r", "registers", 1);
c906108c
SS
2661
2662 if (xdb_commands)
1bedd215
AC
2663 add_com ("lr", class_info, nofp_registers_info, _("\
2664List of integer registers and their contents, for selected stack frame.\n\
2665Register name as argument means describe only that register."));
2666 add_info ("all-registers", all_registers_info, _("\
2667List of all registers and their contents, for selected stack frame.\n\
2668Register name as argument means describe only that register."));
c906108c
SS
2669
2670 add_info ("program", program_info,
1bedd215 2671 _("Execution status of the program."));
c906108c
SS
2672
2673 add_info ("float", float_info,
1bedd215 2674 _("Print the status of the floating point unit\n"));
c906108c 2675
e76f1f2e 2676 add_info ("vector", vector_info,
1bedd215 2677 _("Print the status of the vector unit\n"));
e76f1f2e 2678
c906108c
SS
2679 inferior_environ = make_environ ();
2680 init_environ (inferior_environ);
2681}