aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2008-02-28 16:26:18 +0000
committerDaniel Jacobowitz <drow@false.org>2008-02-28 16:26:18 +0000
commit8edfe2693228f91b78661dc04e8c91095ab19487 (patch)
treeeedbb500de71648048b63f651ab5b3b13aeb07d4 /gdb
parent0d6ba1b16e08532da8a7fa2de4d867927cf3f9f6 (diff)
downloadfsf-binutils-gdb-8edfe2693228f91b78661dc04e8c91095ab19487.zip
fsf-binutils-gdb-8edfe2693228f91b78661dc04e8c91095ab19487.tar.gz
fsf-binutils-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/ChangeLog7
-rw-r--r--gdb/doc/ChangeLog6
-rw-r--r--gdb/doc/gdb.texinfo21
-rw-r--r--gdb/infcmd.c6
-rw-r--r--gdb/target.c35
-rw-r--r--gdb/target.h2
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);