summaryrefslogtreecommitdiff
path: root/gdb/testsuite/lib/emc-support.exp
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/testsuite/lib/emc-support.exp')
-rw-r--r--gdb/testsuite/lib/emc-support.exp223
1 files changed, 223 insertions, 0 deletions
diff --git a/gdb/testsuite/lib/emc-support.exp b/gdb/testsuite/lib/emc-support.exp
new file mode 100644
index 00000000000..70bf2df0690
--- /dev/null
+++ b/gdb/testsuite/lib/emc-support.exp
@@ -0,0 +1,223 @@
+proc gdb_emc_readvar { varname } {
+ global gdb_prompt;
+
+ set result -1;
+ send_gdb "print $varname\n"
+ gdb_expect 5 {
+ -re "\[$\].*= (\[0-9\]+).*$gdb_prompt $" {
+ set result $expect_out(1,string);
+ }
+ -re "$gdb_prompt $" { }
+ default { }
+ }
+ return $result;
+}
+
+proc gdb_emc_gettpnum { testname } {
+ global gdb_prompt;
+
+ if { $testname != "" } {
+ gdb_test "trace $testname" "" ""
+ }
+ return [gdb_emc_readvar "\$tpnum"];
+}
+
+proc gdb_emc_setactions { testname actionname args } {
+ global gdb_prompt;
+
+ set state 0;
+ set status "pass";
+ send_gdb "actions $actionname\n";
+ set expected_result "";
+ gdb_expect 5 {
+ -re "No tracepoint number .*$gdb_prompt $" {
+ fail $testname
+ return 1;
+ }
+ -re "Enter actions for tracepoint $actionname.*>" {
+ if { [llength $args] > 0 } {
+ set lastcommand "[lindex $args $state]";
+ send_gdb "[lindex $args $state]\n";
+ incr state;
+ set expected_result [lindex $args $state];
+ incr state;
+ } else {
+ send_gdb "end\n";
+ }
+ exp_continue;
+ }
+ -re "\(.*\[\r\n\]+)\[ \t]*> $" {
+ if { $expected_result != "" } {
+ # Remove echoed command and its associated newline.
+ regsub "^\[^\r\n\]+\[\r\n\]+" "$expect_out(1,string)" "" out;
+ # Strip off any newlines at the end of the string.
+ regsub "\[\r\n\]+$" "$out" "" out;
+ verbose "expected '$expected_result', got '$out', expect_out is '$expect_out(1,string)'";
+ if ![regexp $expected_result $out] {
+ set status "fail";
+ }
+ set expected_result "";
+ }
+ if { $state < [llength $args] } {
+ send_gdb "[lindex $args $state]\n";
+ incr state;
+ set expected_result [lindex $args $state];
+ incr state;
+ } else {
+ send_gdb "end\n";
+ set expected_result "";
+ }
+ exp_continue;
+ }
+ -re "\(.*\)$gdb_prompt $" {
+ if { $expected_result != "" } {
+ if ![regexp $expected_result $expect_out(1,string)] {
+ set status "fail";
+ }
+ set expected_result "";
+ }
+ if { [llength $args] < $state } {
+ set status "fail";
+ }
+ }
+ default {
+ set status "fail";
+ }
+ }
+ if { $testname != "" } {
+ $status $testname;
+ }
+ if { $status == "pass" } then {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+#
+# test collect command
+#
+
+proc gdb_emc_tracetest_collect { arg1 msgstring } {
+ global decimal
+ global gdb_prompt;
+
+ set teststate 0
+ gdb_expect 30 {
+ -re "Enter actions for tracepoint $decimal.*> $" {
+ send_gdb "collect $arg1\n"
+ incr teststate;
+ exp_continue
+ }
+ -re "> $" {
+ if { $teststate == 1 } {
+ send_gdb "end\n"
+ incr teststate;
+ exp_continue
+ } else {
+ fail "$msgstring"
+ }
+ }
+ -re ".*$gdb_prompt $" {
+ if { $teststate == 2 } {
+ pass "$msgstring";
+ } else {
+ fail "$msgstring";
+ }
+ }
+ default {
+ fail "$msgstring (default)";
+ }
+ }
+ regsub -all "(\[($@*+)\])" "collect $arg1" "\[\\1\]" arg1_regexp;
+ gdb_test "info tracepoints" ".*$arg1_regexp.*" "$msgstring info tracepoint"
+}
+
+proc gdb_delete_tracepoints { } {
+ global gdb_prompt;
+
+ send_gdb "delete tracepoints\n"
+ gdb_expect 30 {
+ -re "Delete all tracepoints.*y or n.*$" {
+ send_gdb "y\n"
+ exp_continue;
+ }
+ -re "$gdb_prompt $" { }
+ timeout { fail "delete all tracepoints (timeout)" }
+ }
+}
+
+
+# Send each command in the list CMDLIST to gdb. If we see the string
+# "error" or "warning" from gdb, we assume an error has occured and
+# return a non-zero result. All of the commands in CMDLIST are always
+# sent, even if an error occurs.
+# If TESTNAME is non-null, we call pass or fail with the string in TESTNAME
+# depending on whether or not an error/warning has occurred.
+#
+proc gdb_do_cmdlist { cmdlist testname } {
+ global gdb_prompt;
+
+ set status 0;
+
+ foreach x $cmdlist {
+ send_gdb "$x\n";
+ gdb_expect 60 {
+ -re "\[Ee\]rror|\[Ww\]arning" {
+ set status 1;
+ exp_continue;
+ }
+ -re "$gdb_prompt $" { }
+ -re "\[\r\n\]\[ \t\]*> *$" { }
+ }
+ }
+ if { $testname != "" } {
+ if { $status == 0 } {
+ pass "$testname";
+ } else {
+ fail "$testname";
+ }
+ }
+ return $status;
+}
+
+#
+# Given the file FILENAME, we read it as a list of commands and generate
+# a list suitable for use by gdb_do_cmdlist. Lines beginning with # are
+# ignored; blank lines are interpreted as empty lines to be sent to gdb.
+#
+proc gdb_process_cmdfile { filename } {
+ set id [open $filename "r"];
+ if { $id < 0 } {
+ return "";
+ }
+ set result {};
+ while { [gets $id line] >= 0 } {
+ if [regexp "^#" $line] {
+ continue;
+ }
+ set result [concat $result [list "$line"]];
+ }
+ close $id;
+ return $result;
+}
+
+# gdb_find_c_test_baseline
+# returns -1 on failure (CALLER MUST CHECK RETURN!)
+proc gdb_find_c_test_baseline { } {
+ global gdb_prompt;
+
+ set gdb_c_test_baseline -1;
+
+ send_gdb "list gdb_c_test\n"
+ gdb_expect {
+ -re "void.*p5,.*void.*p6.*\[\r\n\](\[0-9\]+)\[\t \]+\{.*$gdb_prompt $" {
+ set gdb_c_test_baseline $expect_out(1,string)
+ }
+ -re "$gdb_prompt $" { }
+ default { }
+ }
+ return $gdb_c_test_baseline;
+}
+
+