|
|
|
@ -621,42 +621,67 @@ proc mi_run_to_main { } { |
|
|
|
return -1 |
|
|
|
} |
|
|
|
|
|
|
|
global mi_gdb_prompt |
|
|
|
global hex |
|
|
|
global decimal |
|
|
|
global srcdir |
|
|
|
global subdir |
|
|
|
global binfile |
|
|
|
global srcfile |
|
|
|
|
|
|
|
set test "mi run-to-main" |
|
|
|
mi_delete_breakpoints |
|
|
|
mi_gdb_reinitialize_dir $srcdir/$subdir |
|
|
|
mi_gdb_load ${binfile} |
|
|
|
|
|
|
|
mi_gdb_test "200-break-insert main" \ |
|
|
|
"200\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"main\",file=\".*\",line=\"\[0-9\]*\",times=\"0\"\}" \ |
|
|
|
"breakpoint at main" |
|
|
|
mi_runto main |
|
|
|
} |
|
|
|
|
|
|
|
mi_run_cmd |
|
|
|
gdb_expect { |
|
|
|
-re "000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"1\",thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"main\",args=\(\\\[\\\]\|\{\}\),file=\".*\",line=\"\[0-9\]*\"\}\r\n$mi_gdb_prompt$" { |
|
|
|
pass "$test" |
|
|
|
return 0 |
|
|
|
} |
|
|
|
-re ".*$mi_gdb_prompt$" { |
|
|
|
fail "$test (2)" |
|
|
|
} |
|
|
|
timeout { |
|
|
|
fail "$test (timeout)" |
|
|
|
return -1 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
# Just like gdb's "runto" proc, it will run the target to a given |
|
|
|
# function. The big difference here between mi_runto and mi_execute_to |
|
|
|
# is that mi_execute_to must have the inferior running already. This |
|
|
|
# proc will (like gdb's runto) (re)start the inferior, too. |
|
|
|
# |
|
|
|
# FUNC is the linespec of the place to stop (it inserts a breakpoint here). |
|
|
|
# It returns: |
|
|
|
# -1 if test suppressed, failed, timedout |
|
|
|
# 0 if test passed |
|
|
|
|
|
|
|
proc mi_runto {func} { |
|
|
|
global suppress_flag |
|
|
|
if { $suppress_flag } { |
|
|
|
return -1 |
|
|
|
} |
|
|
|
|
|
|
|
global mi_gdb_prompt expect_out |
|
|
|
global hex decimal |
|
|
|
|
|
|
|
set test "mi runto $func" |
|
|
|
mi_gdb_test "200-break-insert $func" \ |
|
|
|
"200\\^done,bkpt=\{number=\"\[0-9\]+\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"$func\",file=\".*\",line=\"\[0-9\]*\",times=\"0\"\}" \ |
|
|
|
"breakpoint at $func" |
|
|
|
|
|
|
|
if {![regexp {number="[0-9]+"} $expect_out(buffer) str] |
|
|
|
|| ![scan $str {number="%d"} bkptno]} { |
|
|
|
set bkptno {[0-9]+} |
|
|
|
} |
|
|
|
|
|
|
|
mi_run_cmd |
|
|
|
gdb_expect { |
|
|
|
-re ".*000\\*stopped,reason=\"breakpoint-hit\",bkptno=\"$bkptno\",thread-id=\"$decimal\",frame=\{addr=\"$hex\",func=\"$func\",args=\(\\\[.*\\\]\|\{.*\}\),file=\".*\",line=\"\[0-9\]*\"\}\r\n$mi_gdb_prompt$" { |
|
|
|
pass "$test" |
|
|
|
return 0 |
|
|
|
} |
|
|
|
-re ".*$mi_gdb_prompt$" { |
|
|
|
fail "$test (2)" |
|
|
|
} |
|
|
|
timeout { |
|
|
|
fail "$test (timeout)" |
|
|
|
return -1 |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
# Next to the next statement |
|
|
|
# For return values, see mi_run_to_helper |
|
|
|
# For return values, see mi_execute_to_helper |
|
|
|
|
|
|
|
proc mi_next { test } { |
|
|
|
return [mi_next_to {.*} {.*} {.*} {.*} $test] |
|
|
|
@ -664,7 +689,7 @@ proc mi_next { test } { |
|
|
|
|
|
|
|
|
|
|
|
# Step to the next statement |
|
|
|
# For return values, see mi_run_to_helper |
|
|
|
# For return values, see mi_execute_to_helper |
|
|
|
|
|
|
|
proc mi_step { test } { |
|
|
|
return [mi_step_to {.*} {.*} {.*} {.*} $test] |
|
|
|
@ -676,7 +701,7 @@ proc mi_step { test } { |
|
|
|
# Can not match -re ".*\r\n${mi_gdb_prompt}", because of false positives |
|
|
|
# after the first prompt is printed. |
|
|
|
|
|
|
|
proc mi_run_to_helper { cmd reason func args file line extra test } { |
|
|
|
proc mi_execute_to_helper { cmd reason func args file line extra test } { |
|
|
|
global suppress_flag |
|
|
|
if { $suppress_flag } { |
|
|
|
return -1 |
|
|
|
@ -705,56 +730,56 @@ proc mi_run_to_helper { cmd reason func args file line extra test } { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
proc mi_run_to { cmd reason func args file line extra test } { |
|
|
|
mi_run_to_helper "$cmd" "$reason" "$func" "\\\[$args\\\]" \ |
|
|
|
proc mi_execute_to { cmd reason func args file line extra test } { |
|
|
|
mi_execute_to_helper "$cmd" "$reason" "$func" "\\\[$args\\\]" \ |
|
|
|
"$file" "$line" "$extra" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi_next_to { func args file line test } { |
|
|
|
mi_run_to "exec-next" "end-stepping-range" "$func" "$args" \ |
|
|
|
mi_execute_to "exec-next" "end-stepping-range" "$func" "$args" \ |
|
|
|
"$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi_step_to { func args file line test } { |
|
|
|
mi_run_to "exec-step" "end-stepping-range" "$func" "$args" \ |
|
|
|
mi_execute_to "exec-step" "end-stepping-range" "$func" "$args" \ |
|
|
|
"$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi_finish_to { func args file line result ret test } { |
|
|
|
mi_run_to "exec-finish" "function-finished" "$func" "$args" \ |
|
|
|
mi_execute_to "exec-finish" "function-finished" "$func" "$args" \ |
|
|
|
"$file" "$line" \ |
|
|
|
",gdb-result-var=\"$result\",return-value=\"$ret\"" \ |
|
|
|
"$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi_continue_to { bkptno func args file line test } { |
|
|
|
mi_run_to "exec-continue" "breakpoint-hit\",bkptno=\"$bkptno" \ |
|
|
|
mi_execute_to "exec-continue" "breakpoint-hit\",bkptno=\"$bkptno" \ |
|
|
|
"$func" "$args" "$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi0_run_to { cmd reason func args file line extra test } { |
|
|
|
mi_run_to_helper "$cmd" "$reason" "$func" "\{$args\}" \ |
|
|
|
proc mi0_execute_to { cmd reason func args file line extra test } { |
|
|
|
mi_execute_to_helper "$cmd" "$reason" "$func" "\{$args\}" \ |
|
|
|
"$file" "$line" "$extra" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi0_next_to { func args file line test } { |
|
|
|
mi0_run_to "exec-next" "end-stepping-range" "$func" "$args" \ |
|
|
|
mi0_execute_to "exec-next" "end-stepping-range" "$func" "$args" \ |
|
|
|
"$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi0_step_to { func args file line test } { |
|
|
|
mi0_run_to "exec-step" "end-stepping-range" "$func" "$args" \ |
|
|
|
mi0_execute_to "exec-step" "end-stepping-range" "$func" "$args" \ |
|
|
|
"$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi0_finish_to { func args file line result ret test } { |
|
|
|
mi0_run_to "exec-finish" "function-finished" "$func" "$args" \ |
|
|
|
mi0_execute_to "exec-finish" "function-finished" "$func" "$args" \ |
|
|
|
"$file" "$line" \ |
|
|
|
",gdb-result-var=\"$result\",return-value=\"$ret\"" \ |
|
|
|
"$test" |
|
|
|
} |
|
|
|
|
|
|
|
proc mi0_continue_to { bkptno func args file line test } { |
|
|
|
mi0_run_to "exec-continue" "breakpoint-hit\",bkptno=\"$bkptno" \ |
|
|
|
mi0_execute_to "exec-continue" "breakpoint-hit\",bkptno=\"$bkptno" \ |
|
|
|
"$func" "$args" "$file" "$line" "" "$test" |
|
|
|
} |
|
|
|
|