| OLD | NEW |
| 1 # Copyright (C) 1998, 2007-2012 Free Software Foundation, Inc. | 1 # Copyright (C) 1998-2013 Free Software Foundation, Inc. |
| 2 | 2 |
| 3 # This program is free software; you can redistribute it and/or modify | 3 # This program is free software; you can redistribute it and/or modify |
| 4 # it under the terms of the GNU General Public License as published by | 4 # it under the terms of the GNU General Public License as published by |
| 5 # the Free Software Foundation; either version 3 of the License, or | 5 # the Free Software Foundation; either version 3 of the License, or |
| 6 # (at your option) any later version. | 6 # (at your option) any later version. |
| 7 # | 7 # |
| 8 # This program is distributed in the hope that it will be useful, | 8 # This program is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 # GNU General Public License for more details. | 11 # GNU General Public License for more details. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 # with a clean slate with respect to tracepoints, so this utility proc | 62 # with a clean slate with respect to tracepoints, so this utility proc |
| 63 # lets us do this without duplicating this code everywhere. | 63 # lets us do this without duplicating this code everywhere. |
| 64 # | 64 # |
| 65 | 65 |
| 66 proc gdb_delete_tracepoints {} { | 66 proc gdb_delete_tracepoints {} { |
| 67 global gdb_prompt | 67 global gdb_prompt |
| 68 | 68 |
| 69 send_gdb "delete tracepoints\n" | 69 send_gdb "delete tracepoints\n" |
| 70 gdb_expect 30 { | 70 gdb_expect 30 { |
| 71 -re "Delete all tracepoints.*y or n.*$" { | 71 -re "Delete all tracepoints.*y or n.*$" { |
| 72 » send_gdb "y\n"; | 72 » send_gdb "y\n" |
| 73 exp_continue | 73 exp_continue |
| 74 } | 74 } |
| 75 -re ".*$gdb_prompt $" { # This happens if there were no tracepoints } | 75 -re ".*$gdb_prompt $" { # This happens if there were no tracepoints } |
| 76 timeout { | 76 timeout { |
| 77 perror "Delete all tracepoints in delete_tracepoints (timeout)" | 77 perror "Delete all tracepoints in delete_tracepoints (timeout)" |
| 78 return | 78 return |
| 79 } | 79 } |
| 80 } | 80 } |
| 81 send_gdb "info tracepoints\n" | 81 send_gdb "info tracepoints\n" |
| 82 gdb_expect 30 { | 82 gdb_expect 30 { |
| 83 -re "No tracepoints.*$gdb_prompt $" {} | 83 -re "No tracepoints.*$gdb_prompt $" {} |
| 84 -re "$gdb_prompt $" { perror "tracepoints not deleted" ; return } | 84 -re "$gdb_prompt $" { perror "tracepoints not deleted" ; return } |
| 85 timeout { perror "info tracepoints (timeout)" ; return } | 85 timeout { perror "info tracepoints (timeout)" ; return } |
| 86 } | 86 } |
| 87 } | 87 } |
| 88 | 88 |
| 89 # | |
| 90 # Procedure: gdb_trace_setactions | |
| 91 # Define actions for a tracepoint. | 89 # Define actions for a tracepoint. |
| 92 # Arguments: | 90 # Arguments: |
| 91 # actions_command -- the command used to create the actions. |
| 92 # either "actions" or "commands". |
| 93 # testname -- identifying string for pass/fail output | 93 # testname -- identifying string for pass/fail output |
| 94 #» tracepoint -- to which tracepoint do these actions apply? (optional) | 94 #» tracepoint -- to which tracepoint(s) do these actions apply? (optional) |
| 95 # args -- list of actions to be defined. | 95 # args -- list of actions to be defined. |
| 96 # Returns: | 96 # Returns: |
| 97 # zero -- success | 97 # zero -- success |
| 98 # non-zero -- failure | 98 # non-zero -- failure |
| 99 | 99 |
| 100 proc gdb_trace_setactions { testname tracepoint args } { | 100 proc gdb_trace_setactions_command { actions_command testname tracepoint args } { |
| 101 global gdb_prompt; | 101 global gdb_prompt |
| 102 | 102 |
| 103 set state 0; | 103 set state 0 |
| 104 set passfail "pass"; | 104 set passfail "pass" |
| 105 send_gdb "actions $tracepoint\n"; | 105 send_gdb "$actions_command $tracepoint\n" |
| 106 set expected_result ""; | 106 set expected_result "" |
| 107 gdb_expect 5 { | 107 gdb_expect 5 { |
| 108 -re "No tracepoint number .*$gdb_prompt $" { | 108 -re "No tracepoint number .*$gdb_prompt $" { |
| 109 fail $testname | 109 fail $testname |
| 110 » return 1; | 110 » return 1 |
| 111 } | 111 } |
| 112 -re "Enter actions for tracepoint $tracepoint.*>" { | 112 -re "Enter actions for tracepoint $tracepoint.*>" { |
| 113 if { [llength $args] > 0 } { | 113 if { [llength $args] > 0 } { |
| 114 » » set lastcommand "[lindex $args $state]"; | 114 » » set lastcommand "[lindex $args $state]" |
| 115 » » send_gdb "[lindex $args $state]\n"; | 115 » » send_gdb "[lindex $args $state]\n" |
| 116 » » incr state; | 116 » » incr state |
| 117 » » set expected_result [lindex $args $state]; | 117 » » set expected_result [lindex $args $state] |
| 118 » » incr state; | 118 » » incr state |
| 119 } else { | 119 } else { |
| 120 » » send_gdb "end\n"; | 120 » » send_gdb "end\n" |
| 121 } | 121 } |
| 122 » exp_continue; | 122 » exp_continue |
| 123 } | 123 } |
| 124 -re "\(.*\)\[\r\n\]+\[ \t]*>$" { | 124 -re "\(.*\)\[\r\n\]+\[ \t]*>$" { |
| 125 if { $expected_result != "" } { | 125 if { $expected_result != "" } { |
| 126 » » regsub "^\[^\r\n\]+\[\r\n\]+" "$expect_out(1,string)" "" out; | 126 » » regsub "^\[^\r\n\]+\[\r\n\]+" "$expect_out(1,string)" "" out |
| 127 if ![regexp $expected_result $out] { | 127 if ![regexp $expected_result $out] { |
| 128 » » set passfail "fail"; | 128 » » set passfail "fail" |
| 129 } | 129 } |
| 130 » » set expected_result ""; | 130 » » set expected_result "" |
| 131 } | 131 } |
| 132 if { $state < [llength $args] } { | 132 if { $state < [llength $args] } { |
| 133 » » send_gdb "[lindex $args $state]\n"; | 133 » » send_gdb "[lindex $args $state]\n" |
| 134 » » incr state; | 134 » » incr state |
| 135 » » set expected_result [lindex $args $state]; | 135 » » set expected_result [lindex $args $state] |
| 136 » » incr state; | 136 » » incr state |
| 137 } else { | 137 } else { |
| 138 » » send_gdb "end\n"; | 138 » » send_gdb "end\n" |
| 139 » » set expected_result ""; | 139 » » set expected_result "" |
| 140 } | 140 } |
| 141 » exp_continue; | 141 » exp_continue |
| 142 } | 142 } |
| 143 -re "\(.*\)$gdb_prompt $" { | 143 -re "\(.*\)$gdb_prompt $" { |
| 144 if { $expected_result != "" } { | 144 if { $expected_result != "" } { |
| 145 if ![regexp $expected_result $expect_out(1,string)] { | 145 if ![regexp $expected_result $expect_out(1,string)] { |
| 146 » » set passfail "fail"; | 146 » » set passfail "fail" |
| 147 } | 147 } |
| 148 » » set expected_result ""; | 148 » » set expected_result "" |
| 149 } | 149 } |
| 150 if { [llength $args] < $state } { | 150 if { [llength $args] < $state } { |
| 151 » » set passfail "fail"; | 151 » » set passfail "fail" |
| 152 } | 152 } |
| 153 } | 153 } |
| 154 default { | 154 default { |
| 155 » set passfail "fail"; | 155 » set passfail "fail" |
| 156 } | 156 } |
| 157 } | 157 } |
| 158 if { $testname != "" } { | 158 if { $testname != "" } { |
| 159 » $passfail $testname; | 159 » $passfail $testname |
| 160 } | 160 } |
| 161 if { $passfail == "pass" } then { | 161 if { $passfail == "pass" } then { |
| 162 » return 0; | 162 » return 0 |
| 163 } else { | 163 } else { |
| 164 » return 1; | 164 » return 1 |
| 165 } | 165 } |
| 166 } | 166 } |
| 167 | 167 |
| 168 # Define actions for a tracepoint, using the "actions" command. See |
| 169 # gdb_trace_setactions_command. |
| 170 # |
| 171 proc gdb_trace_setactions { testname tracepoint args } { |
| 172 eval gdb_trace_setactions_command "actions" {$testname} {$tracepoint} $args |
| 173 } |
| 174 |
| 175 # Define actions for a tracepoint, using the "commands" command. See |
| 176 # gdb_trace_setactions_command. |
| 177 # |
| 178 proc gdb_trace_setcommands { testname tracepoint args } { |
| 179 eval gdb_trace_setactions_command "commands" {$testname} {$tracepoint} $args |
| 180 } |
| 181 |
| 168 # | 182 # |
| 169 # Procedure: gdb_tfind_test | 183 # Procedure: gdb_tfind_test |
| 170 # Find a specified trace frame. | 184 # Find a specified trace frame. |
| 171 # Arguments: | 185 # Arguments: |
| 172 # testname -- identifying string for pass/fail output | 186 # testname -- identifying string for pass/fail output |
| 173 # tfind_arg -- frame (line, PC, etc.) identifier | 187 # tfind_arg -- frame (line, PC, etc.) identifier |
| 174 # exp_res -- Expected result of frame test | 188 # exp_res -- Expected result of frame test |
| 175 # args -- Test expression | 189 # args -- Test expression |
| 176 # Returns: | 190 # Returns: |
| 177 # zero -- success | 191 # zero -- success |
| 178 # non-zero -- failure | 192 # non-zero -- failure |
| 179 # | 193 # |
| 180 | 194 |
| 181 proc gdb_tfind_test { testname tfind_arg exp_res args } { | 195 proc gdb_tfind_test { testname tfind_arg exp_res args } { |
| 182 global gdb_prompt; | 196 global gdb_prompt |
| 183 | 197 |
| 184 if { "$args" != "" } { | 198 if { "$args" != "" } { |
| 185 » set expr "$exp_res"; | 199 » set expr "$exp_res" |
| 186 » set exp_res "$args"; | 200 » set exp_res "$args" |
| 187 } else { | 201 } else { |
| 188 » set expr "(int) \$trace_frame"; | 202 » set expr "(int) \$trace_frame" |
| 189 } | 203 } |
| 190 set passfail "fail"; | 204 set passfail "fail" |
| 191 | 205 |
| 192 gdb_test "tfind $tfind_arg" "" "" | 206 gdb_test "tfind $tfind_arg" "" "" |
| 193 send_gdb "printf \"x \%d x\\n\", $expr\n"; | 207 send_gdb "printf \"x \%d x\\n\", $expr\n" |
| 194 gdb_expect 10 { | 208 gdb_expect 10 { |
| 195 -re "x (-*\[0-9\]+) x" { | 209 -re "x (-*\[0-9\]+) x" { |
| 196 if { $expect_out(1,string) == $exp_res } { | 210 if { $expect_out(1,string) == $exp_res } { |
| 197 » » set passfail "pass"; | 211 » » set passfail "pass" |
| 198 } | 212 } |
| 199 » exp_continue; | 213 » exp_continue |
| 200 } | 214 } |
| 201 -re "$gdb_prompt $" { } | 215 -re "$gdb_prompt $" { } |
| 202 } | 216 } |
| 203 $passfail "$testname"; | 217 $passfail "$testname" |
| 204 if { $passfail == "pass" } then { | 218 if { $passfail == "pass" } then { |
| 205 » return 0; | 219 » return 0 |
| 206 } else { | 220 } else { |
| 207 » return 1; | 221 » return 1 |
| 208 } | 222 } |
| 209 } | 223 } |
| 210 | 224 |
| 211 # | 225 # |
| 212 # Procedure: gdb_readexpr | 226 # Procedure: gdb_readexpr |
| 213 # Arguments: | 227 # Arguments: |
| 214 # gdb_expr -- the expression whose value is desired | 228 # gdb_expr -- the expression whose value is desired |
| 215 # Returns: | 229 # Returns: |
| 216 # the value of gdb_expr, as evaluated by gdb. | 230 # the value of gdb_expr, as evaluated by gdb. |
| 217 # [FIXME: returns -1 on error, which is sometimes a legit value] | 231 # [FIXME: returns -1 on error, which is sometimes a legit value] |
| 218 # | 232 # |
| 219 | 233 |
| 220 proc gdb_readexpr { gdb_expr } { | 234 proc gdb_readexpr { gdb_expr } { |
| 221 global gdb_prompt; | 235 global gdb_prompt |
| 222 | 236 |
| 223 set result -1; | 237 set result -1 |
| 224 send_gdb "print $gdb_expr\n" | 238 send_gdb "print $gdb_expr\n" |
| 225 gdb_expect 5 { | 239 gdb_expect 5 { |
| 226 -re "\[$\].*= (\[0-9\]+).*$gdb_prompt $" { | 240 -re "\[$\].*= (\[0-9\]+).*$gdb_prompt $" { |
| 227 » set result $expect_out(1,string); | 241 » set result $expect_out(1,string) |
| 228 } | 242 } |
| 229 -re "$gdb_prompt $" { } | 243 -re "$gdb_prompt $" { } |
| 230 default { } | 244 default { } |
| 231 } | 245 } |
| 232 return $result; | 246 return $result |
| 233 } | 247 } |
| 234 | 248 |
| 235 # | 249 # |
| 236 # Procedure: gdb_gettpnum | 250 # Procedure: gdb_gettpnum |
| 237 # Arguments: | 251 # Arguments: |
| 238 # tracepoint (optional): if supplied, set a tracepoint here. | 252 # tracepoint (optional): if supplied, set a tracepoint here. |
| 239 # Returns: | 253 # Returns: |
| 240 # the tracepoint ID of the most recently set tracepoint. | 254 # the tracepoint ID of the most recently set tracepoint. |
| 241 # | 255 # |
| 242 | 256 |
| 243 proc gdb_gettpnum { tracepoint } { | 257 proc gdb_gettpnum { tracepoint } { |
| 244 global gdb_prompt; | 258 global gdb_prompt |
| 245 | 259 |
| 246 if { $tracepoint != "" } { | 260 if { $tracepoint != "" } { |
| 247 gdb_test "trace $tracepoint" "" "" | 261 gdb_test "trace $tracepoint" "" "" |
| 248 } | 262 } |
| 249 return [gdb_readexpr "\$tpnum"]; | 263 return [gdb_readexpr "\$tpnum"] |
| 250 } | 264 } |
| 251 | 265 |
| 252 | 266 |
| 253 # | 267 # |
| 254 # Procedure: gdb_find_function_baseline | 268 # Procedure: gdb_find_function_baseline |
| 255 # Arguments: | 269 # Arguments: |
| 256 # func_name -- name of source function | 270 # func_name -- name of source function |
| 257 # Returns: | 271 # Returns: |
| 258 # Sourcefile line of function definition (open curly brace), | 272 # Sourcefile line of function definition (open curly brace), |
| 259 # or -1 on failure. Caller must check return value. | 273 # or -1 on failure. Caller must check return value. |
| 260 # Note: | 274 # Note: |
| 261 # Works only for open curly brace at beginning of source line! | 275 # Works only for open curly brace at beginning of source line! |
| 262 # | 276 # |
| 263 | 277 |
| 264 proc gdb_find_function_baseline { func_name } { | 278 proc gdb_find_function_baseline { func_name } { |
| 265 global gdb_prompt; | 279 global gdb_prompt |
| 266 | 280 |
| 267 set baseline -1; | 281 set baseline -1 |
| 268 | 282 |
| 269 send_gdb "list $func_name\n" | 283 send_gdb "list $func_name\n" |
| 270 # gdb_expect { | 284 # gdb_expect { |
| 271 # -re "\[\r\n\]\[\{\].*$gdb_prompt $" { | 285 # -re "\[\r\n\]\[\{\].*$gdb_prompt $" { |
| 272 # set baseline 1 | 286 # set baseline 1 |
| 273 # } | 287 # } |
| 274 # } | 288 # } |
| 275 } | 289 } |
| 276 | 290 |
| 277 # | 291 # |
| 278 # Procedure: gdb_find_function_baseline | 292 # Procedure: gdb_find_function_baseline |
| 279 # Arguments: | 293 # Arguments: |
| 280 # filename: name of source file of desired function. | 294 # filename: name of source file of desired function. |
| 281 # Returns: | 295 # Returns: |
| 282 # Sourcefile line of function definition (open curly brace), | 296 # Sourcefile line of function definition (open curly brace), |
| 283 # or -1 on failure. Caller must check return value. | 297 # or -1 on failure. Caller must check return value. |
| 284 # Note: | 298 # Note: |
| 285 # Works only for open curly brace at beginning of source line! | 299 # Works only for open curly brace at beginning of source line! |
| 286 # | 300 # |
| 287 | 301 |
| 288 proc gdb_find_recursion_test_baseline { filename } { | 302 proc gdb_find_recursion_test_baseline { filename } { |
| 289 global gdb_prompt; | 303 global gdb_prompt |
| 290 | 304 |
| 291 set baseline -1; | 305 set baseline -1 |
| 292 | 306 |
| 293 gdb_test "list $filename:1" "" "" | 307 gdb_test "list $filename:1" "" "" |
| 294 send_gdb "search gdb_recursion_test line 0\n" | 308 send_gdb "search gdb_recursion_test line 0\n" |
| 295 gdb_expect { | 309 gdb_expect { |
| 296 -re "(\[0-9\]+)\[\t \]+\{.*line 0.*$gdb_prompt $" { | 310 -re "(\[0-9\]+)\[\t \]+\{.*line 0.*$gdb_prompt $" { |
| 297 » set baseline $expect_out(1,string); | 311 » set baseline $expect_out(1,string) |
| 298 } | 312 } |
| 299 -re "$gdb_prompt $" { } | 313 -re "$gdb_prompt $" { } |
| 300 default { } | 314 default { } |
| 301 } | 315 } |
| 302 return $baseline; | 316 return $baseline |
| 303 } | 317 } |
| 304 | 318 |
| 305 # Return the location of the IPA library. | 319 # Return the location of the IPA library. |
| 306 | 320 |
| 307 proc get_in_proc_agent {} { | 321 proc get_in_proc_agent {} { |
| 308 global objdir | 322 global objdir |
| 309 | 323 |
| 310 if [target_info exists in_proc_agent] { | 324 if [target_info exists in_proc_agent] { |
| 311 return [target_info in_proc_agent] | 325 return [target_info in_proc_agent] |
| 312 } else { | 326 } else { |
| 313 return $objdir/../gdbserver/libinproctrace.so | 327 return $objdir/../gdbserver/libinproctrace.so |
| 314 } | 328 } |
| 315 } | 329 } |
| OLD | NEW |