diff options
author | Yao Qi <yao@codesourcery.com> | 2012-09-29 00:03:56 +0000 |
---|---|---|
committer | Yao Qi <yao@codesourcery.com> | 2012-09-29 00:03:56 +0000 |
commit | 45814d45729f339d48925fda6cda3eb2a02609e8 (patch) | |
tree | 906d4341bad7a4883bdc2b6d952e16b54161014d /gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp | |
parent | 2d8066705f13f40c1e249201cecb7d9926ce06a2 (diff) | |
download | binutils-gdb-45814d45729f339d48925fda6cda3eb2a02609e8.tar.gz |
gdb/testsuite/
* gdb.trace/mi-tracepoint-changed.exp: New.
* gdb.mi/mi-breakpoint-changed.exp: New.
* gdb.mi/pending.c, gdb.mi/pendshr1.c: New
* gdb.mi/pendshr2.c: New.
Diffstat (limited to 'gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp')
-rw-r--r-- | gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp b/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp new file mode 100644 index 00000000000..aa386bb4957 --- /dev/null +++ b/gdb/testsuite/gdb.trace/mi-tracepoint-changed.exp @@ -0,0 +1,221 @@ +# Copyright 2012 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +load_lib trace-support.exp + +if {[skip_shlib_tests]} { + return 0 +} + +standard_testfile pending.c +set libfile1 "pendshr1" +set libfile2 "pendshr2" +set executable $testfile +set libsrc1 $srcdir/$subdir/$libfile1.c +set libsrc2 $srcdir/$subdir/$libfile2.c +set lib_sl1 [standard_output_file pendshr1.sl] +set lib_sl2 [standard_output_file pendshr2.sl] + +set lib_opts [gdb_target_symbol_prefix_flags] + +if { [gdb_compile_shlib $libsrc1 $lib_sl1 $lib_opts] != "" + || [gdb_compile_shlib $libsrc2 $lib_sl2 $lib_opts] != ""} { + untested "Could not compile either $libsrc1 or $libsrc2" + return -1 +} + +set exec_opts [list debug shlib=$lib_sl1 shlib_load] +if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != "" } { + untested "Failed to compile $srcfile" + return -1 +} + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +# Test when GDB connects to a disconnected stub, existing tracepoints in +# remote stub can be uploaded to GDB, and GDB emits MI notification if +# new tracepoints are created. + +proc test_reconnect { } { with_test_prefix "reconnect" { + + global gdbserver_reconnect_p + global gdb_prompt + global executable + global lib_sl1 lib_sl2 + + set gdbserver_reconnect_p 1 + if { [info proc gdb_reconnect] == "" } { + return 0 + } + + clean_restart $executable + gdb_load_shlibs $lib_sl1 + gdb_load_shlibs $lib_sl2 + if ![runto_main] then { + fail "Can't run to main" + return 0 + } + gdb_test "trace marker" "Tracepoint.*at.* file .*" \ + "tracepointpoint on marker" + gdb_test_no_output "tstart" "start trace experiment" + + set test "disconnect" + gdb_test_multiple "disconnect" $test { + -re "Trace is running but will stop on detach; detach anyway\\? \\(y or n\\) $" { + pass $test + + set test "disconnected" + gdb_test_multiple "y" $test { + -re "$gdb_prompt $" { + pass "$test" + } + } + } + } + + gdb_exit + + if [mi_gdb_start] { + return + } + + global srcdir + global subdir + global binfile + + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} + + global gdbserver_protocol + global gdbserver_gdbport + + send_gdb "47-target-select $gdbserver_protocol $gdbserver_gdbport\n" + + global mi_gdb_prompt + set test "tracepoint created" + gdb_expect { + -re "=breakpoint-created,bkpt=\{number=\"1\",type=\"tracepoint\",disp=\"keep\",enabled=\"y\",.*,func=\"marker\".*${mi_gdb_prompt}" { + pass $test + } + timeout { + fail $test + } + } + + set gdbserver_reconnect_p 0 +}} + + +# Test 'breakpoint-modified' notification is emited when pending tracepoints are +# resolved. + +proc test_pending_resolved { } { with_test_prefix "pending resolved" { + global decimal hex + global executable + global srcdir + global subdir + global binfile + global lib_sl1 lib_sl2 + global mi_gdb_prompt + + gdb_exit + if [mi_gdb_start] { + continue + } + + mi_gdb_reinitialize_dir $srcdir/$subdir + mi_gdb_load ${binfile} + mi_load_shlibs $lib_sl1 $lib_sl2 + + # Create a pending tracepoint on pendfunc2 + mi_gdb_test "-break-insert -a -f pendfunc2" \ + {.*\^done,bkpt=.*addr=\"<PENDING>\".*} \ + "insert breakpoint on pendfunc2" + # Insert breakpoint on marker + mi_gdb_test "-break-insert marker" {.*\^done,bkpt=.*} \ + "insert breakpoint on marker" + + mi_run_cmd + mi_expect_stop "breakpoint-hit" "marker" ""\ + ".*" ".*" {"" "disp=\"keep\""} \ + "continue to marker breakpoint" + mi_gdb_test "-trace-start" {\^done} "trace start" + + mi_send_resuming_command "exec-continue" "continuing execution to marker 1" + + set test "tracepoint on pendfunc2 resolved" + gdb_expect { + -re ".*=breakpoint-modified,bkpt=\{number=\"1\",type=\"tracepoint\".*.*times=\"0\"" { + pass "$test" + } + -re ".*${mi_gdb_prompt}$" { + fail $test + } + timeout { + fail "$test (timeout)" + } + } + mi_expect_stop "breakpoint-hit" "marker" ".*" ".*" ".*" \ + {"" "disp=\"keep\""} "continue to marker" + + + mi_gdb_test "-trace-stop" {\^done,.*} "trace stop" + mi_gdb_test "-trace-find frame-number 0" \ + "-trace-find frame-number 0\r\n\\^done,found=\"1\",tracepoint=\"${decimal}\",traceframe=\"0\",frame=\{.*" \ + "-trace-find frame-number 0" + mi_gdb_test "-trace-find none" {\^done,found="0"} "back to live inferior" + + mi_send_resuming_command "exec-continue" "continuing to exit" + set test "tracepoint on pendfunc2 becomes pending again" + gdb_expect { + -re ".*=breakpoint-modified,bkpt=\{number=\"1\",type=\"tracepoint\".*addr=\"<PENDING>\",.*times=\"0\"" { + pass "$test" + } + -re ".*${mi_gdb_prompt}$" { + fail $test + } + timeout { + fail "$test (timeout)" + } + } + + mi_expect_stop "exited-normally" "" "" "" "" "" "" +}} + +# Test target supports tracepoints or not. + +clean_restart $executable + +gdb_load_shlibs $lib_sl1 +gdb_load_shlibs $lib_sl2 + +if ![runto_main] { + fail "Can't run to main to check for trace support" + return -1 +} + +if ![gdb_target_supports_trace] { + unsupported "Current target does not support trace" + return -1; +} + +gdb_exit + +test_reconnect + +test_pending_resolved + +return 0 |