Commit | Line | Data |
---|---|---|
c906108c SS |
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 |