# 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 . load_lib trace-support.exp load_lib mi-support.exp standard_testfile actions.c if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \ executable {debug nowarnings}] != "" } { untested mi-tsv-changed.exp return -1 } # Test notifications on creating and deleting TSV. proc test_create_delete_tsv { } {with_test_prefix "create delete" { global binfile global decimal if [mi_gdb_start] { return } mi_gdb_load ${binfile} mi_gdb_test "tvariable \$tvar1" \ ".*=tsv-created,name=\"tvar1\",value=\"0\"\\\\n.*\\^done" \ "tvariable \$tvar1" mi_gdb_test "tvariable \$tvar2 = 45" \ ".*=tsv-created,name=\"tvar2\",value=\"45\"\\\\n.*\\^done" \ "tvariable \$tvar2" mi_gdb_test "delete tvariable \$tvar2" \ ".*=tsv-deleted,name=\"tvar2\"\\\\n.*\\^done" \ "delete tvariable \$tvar2" mi_gdb_test "delete tvariable" \ ".*=tsv-deleted\\\\n.*\\^done" \ "delete all tvariables" }} # Test when GDB connects to a disconnected stub, existing TSVs in # remote stub can be uploaded to GDB, and GDB emits MI notification # for new uploaded TSVs. proc test_upload_tsv { } { with_test_prefix "upload" { global gdbserver_reconnect_p global gdb_prompt global testfile global decimal set gdbserver_reconnect_p 1 if { [info proc gdb_reconnect] == "" } { return 0 } clean_restart $testfile if ![runto_main] then { fail "Can't run to main" return 0 } gdb_test "tvariable \$tvar1" \ "Trace state variable \\\$tvar1 created, with initial value 0." \ "Create a trace state variable" gdb_test "tvariable \$tvar2 = 45" \ "Trace state variable \\\$tvar2 created, with initial value 45." \ "Create a trace state variable with initial value" # Define a tracepoint otherwise tracing cannot be started. gdb_test "trace main" "Tracepoint $decimal at .*" 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 tsv1_created 0 set tsv2_created 0 gdb_expect { -re "=tsv-created,name=\"tvar1\",value=\"0\"" { set tsv1_created 1 exp_continue } -re "=tsv-created,name=\"tvar2\",value=\"45\"" { set tsv2_created 1 exp_continue } -re ".*${mi_gdb_prompt}" { } } if $tsv1_created { pass "tsv1 created" } else { fail "tsv1 created" } if $tsv2_created { pass "tsv2 created" } else { fail "tsv2 created" } set gdbserver_reconnect_p 0 }} test_create_delete_tsv # Test target supports tracepoints or not. clean_restart $testfile 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_upload_tsv return 0