diff options
author | Daniel Jacobowitz <drow@false.org> | 2008-02-28 16:26:18 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2008-02-28 16:26:18 +0000 |
commit | 8edfe2693228f91b78661dc04e8c91095ab19487 (patch) | |
tree | eedbb500de71648048b63f651ab5b3b13aeb07d4 /gdb | |
parent | 0d6ba1b16e08532da8a7fa2de4d867927cf3f9f6 (diff) | |
download | gdb-8edfe2693228f91b78661dc04e8c91095ab19487.zip gdb-8edfe2693228f91b78661dc04e8c91095ab19487.tar.gz gdb-8edfe2693228f91b78661dc04e8c91095ab19487.tar.bz2 |
* infcmd.c (kill_if_already_running): Make static. Use
target_require_runnable.
* target.c (target_require_runnable): New.
* target.h (target_require_runnable): Declare.
* gdb.texinfo (Starting): Mention always-running targets.
(Target Commands): Add an anchor for load.
(Connecting): Explain continue instead of run.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/doc/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/doc/gdb.texinfo | 21 | ||||
-rw-r--r-- | gdb/infcmd.c | 6 | ||||
-rw-r--r-- | gdb/target.c | 35 | ||||
-rw-r--r-- | gdb/target.h | 2 |
6 files changed, 72 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 50481ce..18a4641 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2008-02-28 Daniel Jacobowitz <dan@codesourcery.com> + * infcmd.c (kill_if_already_running): Make static. Use + target_require_runnable. + * target.c (target_require_runnable): New. + * target.h (target_require_runnable): Declare. + +2008-02-28 Daniel Jacobowitz <dan@codesourcery.com> + * frame.c (reinit_frame_cache): Only annotate if frames were previously valid. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 1cc9af4..95d94d9 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,9 @@ +2008-02-28 Daniel Jacobowitz <dan@codesourcery.com> + + * gdb.texinfo (Starting): Mention always-running targets. + (Target Commands): Add an anchor for load. + (Connecting): Explain continue instead of run. + 2008-02-27 Daniel Jacobowitz <dan@codesourcery.com> * gdb.texinfo (Debugging Output): Document "set debug timestamp". diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 4f4b694..dfc6e81 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -1818,8 +1818,19 @@ argument to @value{GDBN} (@pxref{Invocation, ,Getting In and Out of If you are running your program in an execution environment that supports processes, @code{run} creates an inferior process and makes -that process run your program. (In environments without processes, -@code{run} jumps to the start of your program.) +that process run your program. In some environments without processes, +@code{run} jumps to the start of your program. Other targets, +like @samp{remote}, are always running. If you get an error +message like this one: + +@smallexample +The "remote" target does not support "run". +Try "help target" or "continue". +@end smallexample + +@noindent +then use @code{continue} to run your program. You may need @code{load} +first (@pxref{load}). The execution of a program is affected by certain information it receives from its superior. @value{GDBN} provides ways to specify this @@ -12669,6 +12680,7 @@ Show the current status of displaying communications between @kindex load @var{filename} @item load @var{filename} +@anchor{load} Depending on what remote debugging facilities are configured into @value{GDBN}, the @code{load} command may be available. Where it exists, it is meant to make @var{filename} (an executable) available for debugging @@ -12847,8 +12859,9 @@ program has already exited, this will have no effect.) @end table Once the connection has been established, you can use all the usual -commands to examine and change data and to step and continue the -remote program. +commands to examine and change data. The remote program is already +running; you can use @kbd{step} and @kbd{continue}, and you do not +need to use @kbd{run}. @cindex interrupting remote programs @cindex remote programs, interrupting diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 972f9e2..9d889b2 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -444,11 +444,15 @@ post_create_inferior (struct target_ops *target, int from_tty) from the beginning. Ask the user to confirm that he wants to restart the program being debugged when FROM_TTY is non-null. */ -void +static void kill_if_already_running (int from_tty) { if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution) { + /* Bail out before killing the program if we will not be able to + restart it. */ + target_require_runnable (); + if (from_tty && !query ("The program being debugged has been started already.\n\ Start it from the beginning? ")) diff --git a/gdb/target.c b/gdb/target.c index 87ddf24..ceb71b3 100644 --- a/gdb/target.c +++ b/gdb/target.c @@ -1723,6 +1723,41 @@ target_read_description (struct target_ops *target) return NULL; } +/* Look through the currently pushed targets. If none of them will + be able to restart the currently running process, issue an error + message. */ + +void +target_require_runnable (void) +{ + struct target_ops *t; + + for (t = target_stack; t != NULL; t = t->beneath) + { + /* If this target knows how to create a new program, then + assume we will still be able to after killing the current + one. Either killing and mourning will not pop T, or else + find_default_run_target will find it again. */ + if (t->to_create_inferior != NULL) + return; + + /* Do not worry about thread_stratum targets that can not + create inferiors. Assume they will be pushed again if + necessary, and continue to the process_stratum. */ + if (t->to_stratum == thread_stratum) + continue; + + error (_("\ +The \"%s\" target does not support \"run\". Try \"help target\" or \"continue\"."), + t->to_shortname); + } + + /* This function is only called if the target is running. In that + case there should have been a process_stratum target and it + should either know how to create inferiors, or not... */ + internal_error (__FILE__, __LINE__, "No targets found"); +} + /* Look through the list of possible targets for a target that can execute a run or attach command without any other data. This is used to locate the default process stratum. diff --git a/gdb/target.h b/gdb/target.h index 4a2236c..b703830 100644 --- a/gdb/target.h +++ b/gdb/target.h @@ -1188,6 +1188,8 @@ extern void initialize_targets (void); extern void noprocess (void); +extern void target_require_runnable (void); + extern void find_default_attach (char *, int); extern void find_default_create_inferior (char *, char *, char **, int); |