diff options
author | Vladimir Prus <vladimir@codesourcery.com> | 2008-06-10 09:35:09 +0000 |
---|---|---|
committer | Vladimir Prus <vladimir@codesourcery.com> | 2008-06-10 09:35:09 +0000 |
commit | f7f9a841a31878b377a60bfc7c793e6c8400fafe (patch) | |
tree | 1554ae753adf4a06eee7b5129ff71c937f5245ad /gdb/testsuite/lib | |
parent | f5871ec07bfb6388317ec60513286c51ecd06733 (diff) | |
download | gdb-f7f9a841a31878b377a60bfc7c793e6c8400fafe.zip gdb-f7f9a841a31878b377a60bfc7c793e6c8400fafe.tar.gz gdb-f7f9a841a31878b377a60bfc7c793e6c8400fafe.tar.bz2 |
Use observers to report stop events in MI.
* mi/mi-interp.c (mi_on_normal_stop): New.
(mi_interpreter_init): Register mi_on_normal_stop.
(mi_interpreter_exec_continuation): Remove.
(mi_cmd_interpreter_exec): Don't register the above.
* mi/mi-main.c (captured_mi_execute_command): Don't care
about sync_execution.
(mi_execute_async_cli_command): Don't install continuation. Don't
print *stopped.
(mi_exec_async_cli_cmd_continuation): Remove.
Diffstat (limited to 'gdb/testsuite/lib')
-rw-r--r-- | gdb/testsuite/lib/mi-support.exp | 64 |
1 files changed, 58 insertions, 6 deletions
diff --git a/gdb/testsuite/lib/mi-support.exp b/gdb/testsuite/lib/mi-support.exp index 6a52c88..23f3f07 100644 --- a/gdb/testsuite/lib/mi-support.exp +++ b/gdb/testsuite/lib/mi-support.exp @@ -227,6 +227,8 @@ proc default_mi_gdb_start { args } { } } + detect_async + return 0; } @@ -911,6 +913,30 @@ proc mi_step { test } { return [mi_step_to {.*} {.*} {.*} {.*} $test] } +set async "unknown" + +proc detect_async {} { + global async + global mi_gdb_prompt + + if { $async == "unknown" } { + send_gdb "maint show linux-async\n" + + gdb_expect { + -re ".*Controlling the GNU/Linux inferior in asynchronous mode is on...*$mi_gdb_prompt$" { + set async 1 + } + -re ".*$mi_gdb_prompt$" { + set async 0 + } + timeout { + set async 0 + } + } + } + return $async +} + # Wait for MI *stopped notification to appear. # The REASON, FUNC, ARGS, FILE and LINE are regular expressions # to match against whatever is output in *stopped. ARGS should @@ -933,6 +959,7 @@ proc mi_expect_stop { reason func args file line extra test } { global hex global decimal global fullname_syntax + global async set after_stopped "" set after_reason "" @@ -944,10 +971,28 @@ proc mi_expect_stop { reason func args file line extra test } { set after_stopped [lindex $extra 0] } + if {$async} { + set prompt_re "" + } else { + set prompt_re "$mi_gdb_prompt" + } + + if { $reason == "really-no-reason" } { + gdb_expect { + -re "\\*stopped\r\n$prompt_re$" { + pass "$test" + } + timeout { + fail "$test (unknown output after running)" + } + } + return + } + if { $reason == "exited-normally" } { gdb_expect { - -re "\\*stopped,reason=\"exited-normally\"\r\n$mi_gdb_prompt$" { + -re "\\*stopped,reason=\"exited-normally\"\r\n$prompt_re$" { pass "$test" } -re ".*$mi_gdb_prompt$" {fail "continue to end (2)"} @@ -973,17 +1018,17 @@ proc mi_expect_stop { reason func args file line extra test } { set a $after_reason - verbose -log "mi_expect_stop: expecting: .*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\".*$file\",fullname=\"${fullname_syntax}$file\",line=\"$line\"\}$after_stopped\r\n$mi_gdb_prompt$" + verbose -log "mi_expect_stop: expecting: .*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\".*$file\",fullname=\"${fullname_syntax}$file\",line=\"$line\"\}$after_stopped\r\n$prompt_re$" gdb_expect { - -re ".*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\".*$file\",fullname=\"${fullname_syntax}$file\",line=\"($line)\"\}$after_stopped\r\n$mi_gdb_prompt$" { + -re ".*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=$args,file=\".*$file\",fullname=\"${fullname_syntax}$file\",line=\"($line)\"\}$after_stopped\r\n$prompt_re$" { pass "$test" return $expect_out(2,string) } - -re ".*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\".*\",args=\[\\\[\{\].*\[\\\]\}\],file=\".*\",fullname=\"${fullname_syntax}.*\",line=\"\[0-9\]*\"\}.*\r\n$mi_gdb_prompt$" { + -re ".*\\*stopped,${r}${a}${bn}thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\".*\",args=\[\\\[\{\].*\[\\\]\}\],file=\".*\",fullname=\"${fullname_syntax}.*\",line=\"\[0-9\]*\"\}.*\r\n$prompt_re$" { fail "$test (stopped at wrong place)" return -1 } - -re ".*\r\n${mi_gdb_prompt}$" { + -re ".*\r\n$mi_gdb_prompt$" { fail "$test (unknown output after running)" return -1 } @@ -1388,9 +1433,16 @@ proc mi_continue_to_line {location test} { proc mi_get_stop_line {test} { global mi_gdb_prompt + global async + + if {$async} { + set prompt_re "" + } else { + set prompt_re "$mi_gdb_prompt" + } gdb_expect { - -re ".*line=\"(.*)\".*\r\n$mi_gdb_prompt$" { + -re ".*line=\"(.*)\".*\r\n$prompt_re$" { return $expect_out(1,string) } -re ".*$mi_gdb_prompt$" { |