]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/lib/emc-support.exp
This commit was manufactured by cvs2svn to create branch
[thirdparty/binutils-gdb.git] / gdb / testsuite / lib / emc-support.exp
1 proc gdb_emc_readvar { varname } {
2 global gdb_prompt;
3
4 set result -1;
5 send_gdb "print $varname\n"
6 gdb_expect 5 {
7 -re "\[$\].*= (\[0-9\]+).*$gdb_prompt $" {
8 set result $expect_out(1,string);
9 }
10 -re "$gdb_prompt $" { }
11 default { }
12 }
13 return $result;
14 }
15
16 proc gdb_emc_gettpnum { testname } {
17 global gdb_prompt;
18
19 if { $testname != "" } {
20 gdb_test "trace $testname" "" ""
21 }
22 return [gdb_emc_readvar "\$tpnum"];
23 }
24
25 proc gdb_emc_setactions { testname actionname args } {
26 global gdb_prompt;
27
28 set state 0;
29 set status "pass";
30 send_gdb "actions $actionname\n";
31 set expected_result "";
32 gdb_expect 5 {
33 -re "No tracepoint number .*$gdb_prompt $" {
34 fail $testname
35 return 1;
36 }
37 -re "Enter actions for tracepoint $actionname.*>" {
38 if { [llength $args] > 0 } {
39 set lastcommand "[lindex $args $state]";
40 send_gdb "[lindex $args $state]\n";
41 incr state;
42 set expected_result [lindex $args $state];
43 incr state;
44 } else {
45 send_gdb "end\n";
46 }
47 exp_continue;
48 }
49 -re "\(.*\[\r\n\]+)\[ \t]*> $" {
50 if { $expected_result != "" } {
51 # Remove echoed command and its associated newline.
52 regsub "^\[^\r\n\]+\[\r\n\]+" "$expect_out(1,string)" "" out;
53 # Strip off any newlines at the end of the string.
54 regsub "\[\r\n\]+$" "$out" "" out;
55 verbose "expected '$expected_result', got '$out', expect_out is '$expect_out(1,string)'";
56 if ![regexp $expected_result $out] {
57 set status "fail";
58 }
59 set expected_result "";
60 }
61 if { $state < [llength $args] } {
62 send_gdb "[lindex $args $state]\n";
63 incr state;
64 set expected_result [lindex $args $state];
65 incr state;
66 } else {
67 send_gdb "end\n";
68 set expected_result "";
69 }
70 exp_continue;
71 }
72 -re "\(.*\)$gdb_prompt $" {
73 if { $expected_result != "" } {
74 if ![regexp $expected_result $expect_out(1,string)] {
75 set status "fail";
76 }
77 set expected_result "";
78 }
79 if { [llength $args] < $state } {
80 set status "fail";
81 }
82 }
83 default {
84 set status "fail";
85 }
86 }
87 if { $testname != "" } {
88 $status $testname;
89 }
90 if { $status == "pass" } then {
91 return 0;
92 } else {
93 return 1;
94 }
95 }
96
97 #
98 # test collect command
99 #
100
101 proc gdb_emc_tracetest_collect { arg1 msgstring } {
102 global decimal
103 global gdb_prompt;
104
105 set teststate 0
106 gdb_expect 30 {
107 -re "Enter actions for tracepoint $decimal.*> $" {
108 send_gdb "collect $arg1\n"
109 incr teststate;
110 exp_continue
111 }
112 -re "> $" {
113 if { $teststate == 1 } {
114 send_gdb "end\n"
115 incr teststate;
116 exp_continue
117 } else {
118 fail "$msgstring"
119 }
120 }
121 -re ".*$gdb_prompt $" {
122 if { $teststate == 2 } {
123 pass "$msgstring";
124 } else {
125 fail "$msgstring";
126 }
127 }
128 default {
129 fail "$msgstring (default)";
130 }
131 }
132 regsub -all "(\[($@*+)\])" "collect $arg1" "\[\\1\]" arg1_regexp;
133 gdb_test "info tracepoints" ".*$arg1_regexp.*" "$msgstring info tracepoint"
134 }
135
136 proc gdb_delete_tracepoints { } {
137 global gdb_prompt;
138
139 send_gdb "delete tracepoints\n"
140 gdb_expect 30 {
141 -re "Delete all tracepoints.*y or n.*$" {
142 send_gdb "y\n"
143 exp_continue;
144 }
145 -re "$gdb_prompt $" { }
146 timeout { fail "delete all tracepoints (timeout)" }
147 }
148 }
149
150
151 # Send each command in the list CMDLIST to gdb. If we see the string
152 # "error" or "warning" from gdb, we assume an error has occured and
153 # return a non-zero result. All of the commands in CMDLIST are always
154 # sent, even if an error occurs.
155 # If TESTNAME is non-null, we call pass or fail with the string in TESTNAME
156 # depending on whether or not an error/warning has occurred.
157 #
158 proc gdb_do_cmdlist { cmdlist testname } {
159 global gdb_prompt;
160
161 set status 0;
162
163 foreach x $cmdlist {
164 send_gdb "$x\n";
165 gdb_expect 60 {
166 -re "\[Ee\]rror|\[Ww\]arning" {
167 set status 1;
168 exp_continue;
169 }
170 -re "$gdb_prompt $" { }
171 -re "\[\r\n\]\[ \t\]*> *$" { }
172 }
173 }
174 if { $testname != "" } {
175 if { $status == 0 } {
176 pass "$testname";
177 } else {
178 fail "$testname";
179 }
180 }
181 return $status;
182 }
183
184 #
185 # Given the file FILENAME, we read it as a list of commands and generate
186 # a list suitable for use by gdb_do_cmdlist. Lines beginning with # are
187 # ignored; blank lines are interpreted as empty lines to be sent to gdb.
188 #
189 proc gdb_process_cmdfile { filename } {
190 set id [open $filename "r"];
191 if { $id < 0 } {
192 return "";
193 }
194 set result {};
195 while { [gets $id line] >= 0 } {
196 if [regexp "^#" $line] {
197 continue;
198 }
199 set result [concat $result [list "$line"]];
200 }
201 close $id;
202 return $result;
203 }
204
205 # gdb_find_c_test_baseline
206 # returns -1 on failure (CALLER MUST CHECK RETURN!)
207 proc gdb_find_c_test_baseline { } {
208 global gdb_prompt;
209
210 set gdb_c_test_baseline -1;
211
212 send_gdb "list gdb_c_test\n"
213 gdb_expect {
214 -re "void.*p5,.*void.*p6.*\[\r\n\](\[0-9\]+)\[\t \]+\{.*$gdb_prompt $" {
215 set gdb_c_test_baseline $expect_out(1,string)
216 }
217 -re "$gdb_prompt $" { }
218 default { }
219 }
220 return $gdb_c_test_baseline;
221 }
222
223