enable target async by default; separate MI and target notions of async

This finally makes background execution commands possible by default.

However, in order to do that, there's one last thing we need to do --
we need to separate the MI and target notions of "async".  Unlike the
CLI, where the user explicitly requests foreground vs background
execution in the execution command itself (c vs c&), MI chose to treat
"set target-async" specially -- setting it changes the default
behavior of execution commands.

So, we can't simply "set target-async" default to on, as that would
affect MI frontends.  Instead we have to make the setting MI-specific,
and teach MI about sync commands on top of an async target.

Because the "target" word in "set target-async" ends up as a potential
source of confusion, the patch adds a "set mi-async" option, and makes
"set target-async" a deprecated alias.

Rather than make the targets always async, this patch introduces a new
"maint set target-async" option so that the GDB developer can control
whether the target is async.  This makes it simpler to debug issues
arising only in the synchronous mode; important because sync mode
seems unlikely to go away.

Unlike in previous revisions, "set target-async" does not affect this
new maint parameter.  The rationale for this is that then one can
easily run the test suite in the "maint set target-async off" mode and
have tests that enable mi-async fail just like they fail on
non-async-capable targets.  This emulation is exactly the point of the
maint option.

I had asked Tom in a previous iteration to split the actual change of
the target async default to a separate patch, but it turns out that
that is quite awkward in this version of the patch, because with MI
async and target async decoupled (unlike in previous versions), if we
don't flip the default at the same time, then just "set target-async
on" alone never actually manages to do anything.  It's best to not
have that transitory state in the tree.

Given "set target-async on" now only has effect for MI, the patch goes
through the testsuite removing it from non-MI tests.  MI tests are
adjusted to use the new and less confusing "mi-async" spelling.

2014-05-29  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tromey@redhat.com>

	* NEWS: Mention "maint set target-async", "set mi-async", and that
	background execution commands are now always available.
	* target.h (target_async_permitted): Update comment.
	* target.c (target_async_permitted, target_async_permitted_1):
	Default to 1.
	(set_target_async_command): Rename to ...
	(maint_set_target_async_command): ... this.
	(show_target_async_command): Rename to ...
	(maint_show_target_async_command): ... this.
	(_initialize_target): Adjust.
	* infcmd.c (prepare_execution_command): Make extern.
	* inferior.h (prepare_execution_command): Declare.
	* infrun.c (set_observer_mode): Leave target async alone.
	* mi/mi-interp.c (mi_interpreter_init): Install
	mi_on_sync_execution_done as sync_execution_done observer.
	(mi_on_sync_execution_done): New function.
	(mi_execute_command_input_handler): Don't print the prompt if we
	just started a synchronous command with an async target.
	(mi_on_resume): Check sync_execution before printing prompt.
	* mi/mi-main.h (mi_async_p): Declare.
	* mi/mi-main.c: Include gdbcmd.h.
	(mi_async_p): New function.
	(mi_async, mi_async_1): New globals.
	(set_mi_async_command, show_mi_async_command, mi_async): New
	functions.
	(exec_continue): Call prepare_execution_command.
	(run_one_inferior, mi_cmd_exec_run, mi_cmd_list_target_features)
	(mi_execute_async_cli_command): Use mi_async_p.
	(_initialize_mi_main): Install "set mi-async".  Make
	"target-async" a deprecated alias.

2014-05-29  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tromey@redhat.com>

	* gdb.texinfo (Non-Stop Mode): Remove "set target-async 1"
	from example.
	(Asynchronous and non-stop modes): Document '-gdb-set mi-async'.
	Mention that target-async is now deprecated.
	(Maintenance Commands): Document maint set/show target-async.

2014-05-29  Pedro Alves  <palves@redhat.com>
	    Tom Tromey  <tromey@redhat.com>

	* gdb.base/async-shell.exp: Don't enable target-async.
	* gdb.base/async.exp
	* gdb.base/corefile.exp (corefile_test_attach): Remove 'async'
	parameter.  Adjust.
	(top level): Don't test with "target-async".
	* gdb.base/dprintf-non-stop.exp: Don't enable target-async.
	* gdb.base/gdb-sigterm.exp: Don't test with "target-async".
	* gdb.base/inferior-died.exp: Don't enable target-async.
	* gdb.base/interrupt-noterm.exp: Likewise.
	* gdb.mi/mi-async.exp: Use "mi-async" instead of "target-async".
	* gdb.mi/mi-nonstop-exit.exp: Likewise.
	* gdb.mi/mi-nonstop.exp: Likewise.
	* gdb.mi/mi-ns-stale-regcache.exp: Likewise.
	* gdb.mi/mi-nsintrall.exp: Likewise.
	* gdb.mi/mi-nsmoribund.exp: Likewise.
	* gdb.mi/mi-nsthrexec.exp: Likewise.
	* gdb.mi/mi-watch-nonstop.exp: Likewise.
	* gdb.multi/watchpoint-multi.exp: Adjust comment.
	* gdb.python/py-evsignal.exp: Don't enable target-async.
	* gdb.python/py-evthreads.exp: Likewise.
	* gdb.python/py-prompt.exp: Likewise.
	* gdb.reverse/break-precsave.exp: Don't test with "target-async".
	* gdb.server/solib-list.exp: Don't enable target-async.
	* gdb.threads/thread-specific-bp.exp: Likewise.
	* lib/mi-support.exp: Adjust to use mi-async.
This commit is contained in:
Pedro Alves 2014-05-29 19:58:57 +01:00
parent 92bcb5f949
commit 329ea57934
36 changed files with 296 additions and 109 deletions

View file

@ -1,3 +1,37 @@
2014-05-29 Pedro Alves <palves@redhat.com>
Tom Tromey <tromey@redhat.com>
* NEWS: Mention "maint set target-async", "set mi-async", and that
background execution commands are now always available.
* target.h (target_async_permitted): Update comment.
* target.c (target_async_permitted, target_async_permitted_1):
Default to 1.
(set_target_async_command): Rename to ...
(maint_set_target_async_command): ... this.
(show_target_async_command): Rename to ...
(maint_show_target_async_command): ... this.
(_initialize_target): Adjust.
* infcmd.c (prepare_execution_command): Make extern.
* inferior.h (prepare_execution_command): Declare.
* infrun.c (set_observer_mode): Leave target async alone.
* mi/mi-interp.c (mi_interpreter_init): Install
mi_on_sync_execution_done as sync_execution_done observer.
(mi_on_sync_execution_done): New function.
(mi_execute_command_input_handler): Don't print the prompt if we
just started a synchronous command with an async target.
(mi_on_resume): Check sync_execution before printing prompt.
* mi/mi-main.h (mi_async_p): Declare.
* mi/mi-main.c: Include gdbcmd.h.
(mi_async_p): New function.
(mi_async, mi_async_1): New globals.
(set_mi_async_command, show_mi_async_command, mi_async): New
functions.
(exec_continue): Call prepare_execution_command.
(run_one_inferior, mi_cmd_exec_run, mi_cmd_list_target_features)
(mi_execute_async_cli_command): Use mi_async_p.
(_initialize_mi_main): Install "set mi-async". Make
"target-async" a deprecated alias.
2014-05-29 Pedro Alves <palves@redhat.com>
* cli/cli-interp.c (cli_interpreter_display_prompt_p): Delete.

View file

@ -71,6 +71,26 @@ set record btrace replay-memory-access (read-only|read-write)
show record btrace replay-memory-access
Control what memory accesses are allowed during replay.
maint set target-async (on|off)
maint show target-async
This controls whether GDB targets operate in syncronous or
asyncronous mode. Normally the default is asyncronous, if it is
available; but this can be changed to more easily debug problems
occurring only in syncronous mode.
set mi-async (on|off)
show mi-async
Control whether MI asynchronous mode is preferred. This supersedes
"set target-async" of previous GDB versions.
* "set target-async" is deprecated as a CLI option and is now an alias
for "set mi-async" (only puts MI into async mode).
* Background execution commands (e.g., "c&", "s&", etc.) are now
possible ``out of the box'' if the target supports them. Previously
the user would need to explicitly enable the possibility with the
"set target-async on" command.
* New features in the GDB remote stub, GDBserver
** New option --debug-format=option1[,option2,...] allows one to add
@ -145,6 +165,17 @@ PowerPC64 GNU/Linux little-endian powerpc64le-*-linux*
supported. Use "set serial baud" and "show serial baud" (respectively)
instead.
* MI changes
** A new option "-gdb-set mi-async" replaces "-gdb-set
target-async". The latter is left as a deprecated alias of the
former for backward compatibility. If the target supports it,
CLI background execution commands are now always possible by
default, independently of whether the frontend stated a
preference for asynchronous execution with "-gdb-set mi-async".
Previously "-gdb-set target-async off" affected both MI execution
commands and CLI execution commands.
*** Changes in GDB 7.7
* Improved support for process record-replay and reverse debugging on

View file

@ -1,3 +1,12 @@
2014-05-29 Pedro Alves <palves@redhat.com>
Tom Tromey <tromey@redhat.com>
* gdb.texinfo (Non-Stop Mode): Remove "set target-async 1"
from example.
(Asynchronous and non-stop modes): Document '-gdb-set mi-async'.
Mention that target-async is now deprecated.
(Maintenance Commands): Document maint set/show target-async.
2014-05-29 Pedro Alves <palves@redhat.com>
* observer.texi (sync_execution_done, command_error): New

View file

@ -5778,9 +5778,6 @@ To enter non-stop mode, use this sequence of commands before you run
or attach to your program:
@smallexample
# Enable the async interface.
set target-async 1
# If using the CLI, pagination breaks non-stop.
set pagination off
@ -5850,21 +5847,6 @@ the program to report that some thread has stopped before prompting for
another command. In background execution, @value{GDBN} immediately gives
a command prompt so that you can issue other commands while your program runs.
You need to explicitly enable asynchronous mode before you can use
background execution commands. You can use these commands to
manipulate the asynchronous mode setting:
@table @code
@kindex set target-async
@item set target-async on
Enable asynchronous mode.
@item set target-async off
Disable asynchronous mode.
@kindex show target-async
@item show target-async
Show the current target-async setting.
@end table
If the target doesn't support async mode, @value{GDBN} issues an error
message if you attempt to use the background execution commands.
@ -24818,12 +24800,37 @@ On some targets, @value{GDBN} is capable of processing MI commands
even while the target is running. This is called @dfn{asynchronous
command execution} (@pxref{Background Execution}). The frontend may
specify a preferrence for asynchronous execution using the
@code{-gdb-set target-async 1} command, which should be emitted before
@code{-gdb-set mi-async 1} command, which should be emitted before
either running the executable or attaching to the target. After the
frontend has started the executable or attached to the target, it can
find if asynchronous execution is enabled using the
@code{-list-target-features} command.
@table @code
@item -gdb-set mi-async on
@item -gdb-set mi-async off
Set whether MI is in asynchronous mode.
When @code{off}, which is the default, MI execution commands (e.g.,
@code{-exec-continue}) are foreground commands, and @value{GDBN} waits
for the program to stop before processing further commands.
When @code{on}, MI execution commands are background execution
commands (e.g., @code{-exec-continue} becomes the equivalent of the
@code{c&} CLI command), and so @value{GDBN} is capable of processing
MI commands even while the target is running.
@item -gdb-show mi-async
Show whether MI asynchronous mode is enabled.
@end table
Note: In @value{GDBN} version 7.7 and earlier, this option was called
@code{target-async} instead of @code{mi-async}, and it had the effect
of both putting MI in asynchronous mode and making CLI background
commands possible. CLI background commands are now always possible
``out of the box'' if the target supports them. The old spelling is
kept as a deprecated alias for backwards compatibility.
Even if @value{GDBN} can accept a command while target is running,
many commands that access the target do not work when the target is
running. Therefore, asynchronous command execution is most useful
@ -33532,6 +33539,15 @@ Control whether to show all non zero areas within a 1k block starting
at thread local base, when using the @samp{info w32 thread-information-block}
command.
@kindex maint set target-async
@kindex maint show target-async
@item maint set target-async
@itemx maint show target-async
This controls whether @value{GDBN} targets operate in synchronous or
asynchronous mode (@pxref{Background Execution}). Normally the
default is asynchronous, if it is available; but this can be changed
to more easily debug problems occurring only in synchronous mode.
@kindex maint set per-command
@kindex maint show per-command
@item maint set per-command

View file

@ -497,11 +497,9 @@ Start it from the beginning? ")))
}
}
/* Prepare for execution command. TARGET is the target that will run
the command. BACKGROUND determines whether this is a foreground
(synchronous) or background (asynchronous) command. */
/* See inferior.h. */
static void
void
prepare_execution_command (struct target_ops *target, int background)
{
/* If we get a request for running in the bg but the target

View file

@ -164,6 +164,13 @@ extern void notice_new_inferior (ptid_t, int, int);
extern struct value *get_return_value (struct value *function,
struct type *value_type);
/* Prepare for execution command. TARGET is the target that will run
the command. BACKGROUND determines whether this is a foreground
(synchronous) or background (asynchronous) command. */
extern void prepare_execution_command (struct target_ops *target,
int background);
/* Whether to start up the debuggee under a shell.
If startup-with-shell is set, GDB's "run" will attempt to start up

View file

@ -235,7 +235,6 @@ set_observer_mode (char *args, int from_tty,
going out we leave it that way. */
if (observer_mode)
{
target_async_permitted = 1;
pagination_enabled = 0;
non_stop = non_stop_1 = 1;
}

View file

@ -85,6 +85,7 @@ static void mi_breakpoint_modified (struct breakpoint *b);
static void mi_command_param_changed (const char *param, const char *value);
static void mi_memory_changed (struct inferior *inf, CORE_ADDR memaddr,
ssize_t len, const bfd_byte *myaddr);
static void mi_on_sync_execution_done (void);
static int report_initial_inferior (struct inferior *inf, void *closure);
@ -158,6 +159,7 @@ mi_interpreter_init (struct interp *interp, int top_level)
observer_attach_breakpoint_modified (mi_breakpoint_modified);
observer_attach_command_param_changed (mi_command_param_changed);
observer_attach_memory_changed (mi_memory_changed);
observer_attach_sync_execution_done (mi_on_sync_execution_done);
/* The initial inferior is created before this function is
called, so we need to report it explicitly. Use iteration in
@ -304,6 +306,28 @@ mi_execute_command_wrapper (const char *cmd)
mi_execute_command (cmd, stdin == instream);
}
/* Observer for the synchronous_command_done notification. */
static void
mi_on_sync_execution_done (void)
{
/* MI generally prints a prompt after a command, indicating it's
ready for further input. However, due to an historical wart, if
MI async, and a (CLI) synchronous command was issued, then we
will print the prompt right after printing "^running", even if we
cannot actually accept any input until the target stops. See
mi_on_resume. However, if the target is async but MI is sync,
then we need to output the MI prompt now, to replicate gdb's
behavior when neither the target nor MI are async. (Note this
observer is only called by the asynchronous target event handling
code.) */
if (!mi_async_p ())
{
fputs_unfiltered ("(gdb) \n", raw_stdout);
gdb_flush (raw_stdout);
}
}
/* mi_execute_command_wrapper wrapper suitable for INPUT_HANDLER. */
static void
@ -311,8 +335,24 @@ mi_execute_command_input_handler (char *cmd)
{
mi_execute_command_wrapper (cmd);
fputs_unfiltered ("(gdb) \n", raw_stdout);
gdb_flush (raw_stdout);
/* MI generally prints a prompt after a command, indicating it's
ready for further input. However, due to an historical wart, if
MI is async, and a synchronous command was issued, then we will
print the prompt right after printing "^running", even if we
cannot actually accept any input until the target stops. See
mi_on_resume.
If MI is not async, then we print the prompt when the command
finishes. If the target is sync, that means output the prompt
now, as in that case executing a command doesn't return until the
command is done. However, if the target is async, we go back to
the event loop and output the prompt in the
'synchronous_command_done' observer. */
if (!target_is_async_p () || !sync_execution)
{
fputs_unfiltered ("(gdb) \n", raw_stdout);
gdb_flush (raw_stdout);
}
}
static void
@ -928,10 +968,10 @@ mi_on_resume (ptid_t ptid)
running_result_record_printed = 1;
/* This is what gdb used to do historically -- printing prompt even if
it cannot actually accept any input. This will be surely removed
for MI3, and may be removed even earler. */
/* FIXME: review the use of target_is_async_p here -- is that
what we want? */
if (!target_is_async_p ())
for MI3, and may be removed even earlier. SYNC_EXECUTION is
checked here because we only need to emit a prompt if a
synchronous command was issued when the target is async. */
if (!target_is_async_p () || sync_execution)
fputs_unfiltered ("(gdb) \n", raw_stdout);
}
gdb_flush (raw_stdout);

View file

@ -54,6 +54,7 @@
#include "ada-lang.h"
#include "linespec.h"
#include "extension.h"
#include "gdbcmd.h"
#include <ctype.h>
#include <sys/time.h>
@ -105,6 +106,45 @@ static int register_changed_p (int regnum, struct regcache *,
static void output_register (struct frame_info *, int regnum, int format,
int skip_unavailable);
/* Controls whether the frontend wants MI in async mode. */
static int mi_async = 0;
/* The set command writes to this variable. If the inferior is
executing, mi_async is *not* updated. */
static int mi_async_1 = 0;
static void
set_mi_async_command (char *args, int from_tty,
struct cmd_list_element *c)
{
if (have_live_inferiors ())
{
mi_async_1 = mi_async;
error (_("Cannot change this setting while the inferior is running."));
}
mi_async = mi_async_1;
}
static void
show_mi_async_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
fprintf_filtered (file,
_("Whether MI is in asynchronous mode is %s.\n"),
value);
}
/* A wrapper for target_can_async_p that takes the MI setting into
account. */
int
mi_async_p (void)
{
return mi_async && target_can_async_p ();
}
/* Command implementations. FIXME: Is this libgdb? No. This is the MI
layer that calls libgdb. Any operation used in the below should be
formalized. */
@ -229,6 +269,8 @@ proceed_thread_callback (struct thread_info *thread, void *arg)
static void
exec_continue (char **argv, int argc)
{
prepare_execution_command (&current_target, mi_async_p ());
if (non_stop)
{
/* In non-stop mode, 'resume' always resumes a single thread.
@ -395,8 +437,8 @@ run_one_inferior (struct inferior *inf, void *arg)
switch_to_thread (null_ptid);
set_current_program_space (inf->pspace);
}
mi_execute_cli_command (run_cmd, target_can_async_p (),
target_can_async_p () ? "&" : NULL);
mi_execute_cli_command (run_cmd, mi_async_p (),
mi_async_p () ? "&" : NULL);
return 0;
}
@ -450,8 +492,8 @@ mi_cmd_exec_run (char *command, char **argv, int argc)
{
const char *run_cmd = start_p ? "start" : "run";
mi_execute_cli_command (run_cmd, target_can_async_p (),
target_can_async_p () ? "&" : NULL);
mi_execute_cli_command (run_cmd, mi_async_p (),
mi_async_p () ? "&" : NULL);
}
}
@ -1838,11 +1880,10 @@ mi_cmd_list_target_features (char *command, char **argv, int argc)
struct ui_out *uiout = current_uiout;
cleanup = make_cleanup_ui_out_list_begin_end (uiout, "features");
if (target_can_async_p ())
if (mi_async_p ())
ui_out_field_string (uiout, NULL, "async");
if (target_can_execute_reverse)
ui_out_field_string (uiout, NULL, "reverse");
do_cleanups (cleanup);
return;
}
@ -2269,7 +2310,7 @@ mi_execute_async_cli_command (char *cli_command, char **argv, int argc)
struct cleanup *old_cleanups;
char *run;
if (target_can_async_p ())
if (mi_async_p ())
run = xstrprintf ("%s %s&", cli_command, argc ? *argv : "");
else
run = xstrprintf ("%s %s", cli_command, argc ? *argv : "");
@ -2920,3 +2961,25 @@ mi_cmd_trace_frame_collected (char *command, char **argv, int argc)
do_cleanups (old_chain);
}
void
_initialize_mi_main (void)
{
struct cmd_list_element *c;
add_setshow_boolean_cmd ("mi-async", class_run,
&mi_async_1, _("\
Set whether MI asynchronous mode is enabled."), _("\
Show whether MI asynchronous mode is enabled."), _("\
Tells GDB whether MI should be in asynchronous mode."),
set_mi_async_command,
show_mi_async_command,
&setlist,
&showlist);
/* Alias old "target-async" to "mi-async". */
c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &setlist);
deprecate_cmd (c, "set mi-async");
c = add_alias_cmd ("target-async", "mi-async", class_run, 0, &showlist);
deprecate_cmd (c, "show mi-async");
}

View file

@ -28,6 +28,10 @@ extern void mi_load_progress (const char *section_name,
extern void mi_print_timing_maybe (void);
/* Whether MI is in async mode. */
extern int mi_async_p (void);
extern char *current_token;
extern int running_result_record_printed;

View file

@ -4105,16 +4105,17 @@ maintenance_print_target_stack (char *cmd, int from_tty)
}
}
/* Controls if async mode is permitted. */
int target_async_permitted = 0;
/* Controls if targets can report that they can/are async. This is
just for maintainers to use when debugging gdb. */
int target_async_permitted = 1;
/* The set command writes to this variable. If the inferior is
executing, target_async_permitted is *not* updated. */
static int target_async_permitted_1 = 0;
static int target_async_permitted_1 = 1;
static void
set_target_async_command (char *args, int from_tty,
struct cmd_list_element *c)
maint_set_target_async_command (char *args, int from_tty,
struct cmd_list_element *c)
{
if (have_live_inferiors ())
{
@ -4126,9 +4127,9 @@ set_target_async_command (char *args, int from_tty,
}
static void
show_target_async_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
maint_show_target_async_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c,
const char *value)
{
fprintf_filtered (file,
_("Controlling the inferior in "
@ -4233,10 +4234,10 @@ result in significant performance improvement for remote targets."),
Set whether gdb controls the inferior in asynchronous mode."), _("\
Show whether gdb controls the inferior in asynchronous mode."), _("\
Tells gdb whether to control the inferior in asynchronous mode."),
set_target_async_command,
show_target_async_command,
&setlist,
&showlist);
maint_set_target_async_command,
maint_show_target_async_command,
&maintenance_set_cmdlist,
&maintenance_show_cmdlist);
add_setshow_boolean_cmd ("may-write-registers", class_support,
&may_write_registers_1, _("\

View file

@ -1619,8 +1619,7 @@ extern int default_child_has_execution (struct target_ops *ops,
#define target_can_lock_scheduler \
(current_target.to_has_thread_control & tc_schedlock)
/* Should the target enable async mode if it is supported? Temporary
cludge until async mode is a strict superset of sync mode. */
/* Controls whether async mode is permitted. */
extern int target_async_permitted;
/* Can the target support asynchronous execution? */

View file

@ -1,3 +1,32 @@
2014-05-29 Pedro Alves <palves@redhat.com>
Tom Tromey <tromey@redhat.com>
* gdb.base/async-shell.exp: Don't enable target-async.
* gdb.base/async.exp
* gdb.base/corefile.exp (corefile_test_attach): Remove 'async'
parameter. Adjust.
(top level): Don't test with "target-async".
* gdb.base/dprintf-non-stop.exp: Don't enable target-async.
* gdb.base/gdb-sigterm.exp: Don't test with "target-async".
* gdb.base/inferior-died.exp: Don't enable target-async.
* gdb.base/interrupt-noterm.exp: Likewise.
* gdb.mi/mi-async.exp: Use "mi-async" instead of "target-async".
* gdb.mi/mi-nonstop-exit.exp: Likewise.
* gdb.mi/mi-nonstop.exp: Likewise.
* gdb.mi/mi-ns-stale-regcache.exp: Likewise.
* gdb.mi/mi-nsintrall.exp: Likewise.
* gdb.mi/mi-nsmoribund.exp: Likewise.
* gdb.mi/mi-nsthrexec.exp: Likewise.
* gdb.mi/mi-watch-nonstop.exp: Likewise.
* gdb.multi/watchpoint-multi.exp: Adjust comment.
* gdb.python/py-evsignal.exp: Don't enable target-async.
* gdb.python/py-evthreads.exp: Likewise.
* gdb.python/py-prompt.exp: Likewise.
* gdb.reverse/break-precsave.exp: Don't test with "target-async".
* gdb.server/solib-list.exp: Don't enable target-async.
* gdb.threads/thread-specific-bp.exp: Likewise.
* lib/mi-support.exp: Adjust to use mi-async.
2014-05-29 Pedro Alves <palves@redhat.com>
PR gdb/13860

View file

@ -31,7 +31,6 @@ if { [prepare_for_testing ${testfile}.exp ${testfile} $srcfile] } {
set gdbindex_warning_re "warning: Skipping \[^\r\n\]+ \\.gdb_index section \[^\r\n\]*\r\nDo \"set use-deprecated-index-sections on\" before the file is read\r\nto use the section anyway\\."
gdb_test_no_output "set target-async on "
gdb_test_no_output "set non-stop on"
gdb_test "run &" "Starting program: \[^\r\n\]*(\r\n$gdbindex_warning_re)?"

View file

@ -25,8 +25,6 @@ if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
return -1
}
gdb_test_no_output "set target-async on"
#
# set it up at a breakpoint so we can play with it
#

View file

@ -241,7 +241,7 @@ gdb_exit
# Test an attach command will clear any loaded core file.
proc corefile_test_attach {{async 0}} {
proc corefile_test_attach {} {
global binfile corefile gdb_prompt
if ![is_remote target] {
@ -257,11 +257,6 @@ proc corefile_test_attach {{async 0}} {
gdb_start
if {$async} {
gdb_test_no_output "set target-async on" \
"enable target-async for attach tests"
}
gdb_test "core-file $corefile" "Core was generated by .*" "attach: load core again"
gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "attach: sanity check we see the core file"
@ -298,13 +293,3 @@ gdb_test_multiple "core-file $corefile" $test {
pass $test
}
}
# Try a couple tests again with target-async.
with_test_prefix "target-async" {
clean_restart ${testfile}
gdb_test_no_output "set target-async on"
corefile_test_run
corefile_test_attach 1
}

View file

@ -26,7 +26,6 @@ if [prepare_for_testing "failed to prepare for dprintf with non-stop" \
return -1
}
gdb_test_no_output "set target-async on"
gdb_test_no_output "set non-stop on"
if ![runto main] {

View file

@ -79,17 +79,7 @@ proc do_test { pass } {
# 50 runs should be approx. a safe number to be sure it is fixed now.
for {set pass 0} {$pass < 50} {incr pass} {
clean_restart ${testfile}
gdb_test_no_output "set target-async off" ""
with_test_prefix "sync" {
do_test $pass
}
clean_restart ${testfile}
gdb_test_no_output "set target-async on" ""
with_test_prefix "async" {
do_test $pass
}
do_test $pass
}
pass "$pass SIGTERM passes"

View file

@ -38,7 +38,6 @@ if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c] } {
}
gdb_test_no_output "set detach-on-fork off"
gdb_test_no_output "set target-async on"
gdb_test_no_output "set non-stop on"
if ![runto_main] {

View file

@ -22,7 +22,6 @@ if [prepare_for_testing "failed to prepare for testing" \
# Pretend there's no terminal.
gdb_test_no_output "set interactive-mode off"
gdb_test_no_output "set target-async on"
if ![runto main] {
fail "Can't run to main"

View file

@ -27,7 +27,7 @@ if { !([isnative] && [istarget *-linux*]) } then {
# The plan is for async mode to become the default but toggle for now.
set saved_gdbflags $GDBFLAGS
set GDBFLAGS [concat $GDBFLAGS " -ex \"set target-async on\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"set mi-async on\""]
load_lib mi-support.exp

View file

@ -40,7 +40,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -50,7 +50,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -53,7 +53,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -40,7 +40,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -40,7 +40,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -50,7 +50,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -52,7 +52,7 @@ mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile
mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_gdb_test "-gdb-set mi-async 1" ".*"
mi_detect_async
if { [mi_run_to_main] < 0 } {

View file

@ -37,7 +37,7 @@ if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executa
clean_restart $executable
# Simulate non-stop+target-async which also uses breakpoint always-inserted.
# Simulate non-stop which also uses breakpoint always-inserted.
gdb_test_no_output "set breakpoint always-inserted on"
# displaced-stepping is also needed as other GDB sometimes still removes the
# breakpoints, even with always-inserted on.

View file

@ -35,7 +35,6 @@ gdb_test_no_output "python exec (open ('${pyfile}').read ())" ""
gdb_test "test-events" "Event testers registered."
gdb_test_no_output "set non-stop on"
gdb_test_no_output "set target-async on"
gdb_run_cmd
gdb_test_multiple "" "Signal Thread 3" {

View file

@ -40,7 +40,6 @@ gdb_test_no_output "python exec (open ('${pyfile}').read ())" ""
gdb_test "test-events" "Event testers registered."
gdb_test_no_output "set non-stop on"
gdb_test_no_output "set target-async on"
gdb_breakpoint "main"
gdb_breakpoint "thread2"

View file

@ -90,8 +90,7 @@ if { [istarget "*-*-cygwin*"] } {
set testpid [ exec ps -e | gawk "{ if (\$1 == $testpid) print \$4; }" ]
}
set GDBFLAGS [concat $tmp_gdbflags " -ex \"set target-async on\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"set pagination off\""]
set GDBFLAGS [concat $tmp_gdbflags " -ex \"set pagination off\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"set editing on\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"attach $testpid\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"continue&\""]
@ -107,8 +106,7 @@ gdb_test "python print (\"'\" + str(p\[0\]) + \"'\")" "'$gdb_prompt_fail '" \
"prompt_hook argument is default prompt. 3"
gdb_exit
set GDBFLAGS [concat $tmp_gdbflags " -ex \"set target-async on\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"set pagination off\""]
set GDBFLAGS [concat $tmp_gdbflags " -ex \"set pagination off\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"set editing on\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"attach $testpid\""]
set GDBFLAGS [concat $GDBFLAGS " -ex \"interrupt\""]

View file

@ -110,9 +110,3 @@ proc precsave_tests {} {
}
precsave_tests
with_test_prefix "target-async" {
clean_restart $testfile
gdb_test_no_output "set target-async on"
precsave_tests
}

View file

@ -66,7 +66,6 @@ foreach nonstop { 0 1 } { with_test_prefix "non-stop $nonstop" {
gdb_test "disconnect" ".*"
gdb_test "set non-stop $nonstop"
gdb_test "set target-async $nonstop"
# It is required for the non-stop mode, GDB would try to step over
# _dl_debug_state breakpoint will still only ld.so loaded in gdbserver.

View file

@ -122,6 +122,5 @@ check_thread_specific_breakpoint "all-stop"
clean_restart ${binfile}
# Test non-stop mode.
gdb_test_no_output "set target-async on" "set async mode"
gdb_test_no_output "set non-stop on" "set non-stop mode"
check_thread_specific_breakpoint "non-stop"

View file

@ -1014,10 +1014,10 @@ proc mi_detect_async {} {
global async
global mi_gdb_prompt
send_gdb "show target-async\n"
send_gdb "show mi-async\n"
gdb_expect {
-re ".*Controlling the inferior in asynchronous mode is on...*$mi_gdb_prompt$" {
-re "asynchronous mode is on...*$mi_gdb_prompt$" {
set async 1
}
-re ".*$mi_gdb_prompt$" {