-# Copyright 2012 Free Software Foundation, Inc.
+# Copyright 2012-2017 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
return 0
}
-set test valgrind-infcall
-set srcfile $test.c
-set executable $test
-set binfile ${objdir}/${subdir}/${executable}
-if {[build_executable $test.exp $executable $srcfile {debug}] == -1} {
+standard_testfile .c
+if {[build_executable $testfile.exp $testfile $srcfile {debug}] == -1} {
return -1
}
set test "spawn valgrind"
set cmd "valgrind --vgdb-error=0 $binfile"
-set res [remote_spawn host $cmd];
+set res [remote_spawn host $cmd]
if { $res < 0 || $res == "" } {
verbose -log "Spawning $cmd failed."
unsupported $test
}
pass $test
# Declare GDB now as running.
-set gdb_spawn_id -1
+set gdb_spawn_id $res
# GDB started by vgdb stops already after the startup is executed, like with
# non-extended gdbserver. It is also not correct to run/attach the inferior.
}
# Do not kill valgrind.
+set valgrind_spawn_id [board_info host fileid]
unset gdb_spawn_id
set board [host_info name]
unset_board_info fileid
-clean_restart $executable
+clean_restart $testfile
-gdb_test "$vgdbcmd" " in _start .*" "target remote for vgdb"
+# Make sure we're disconnected, in case we're testing with the
+# native-extended-gdbserver board, where gdb_start/gdb_load spawn
+# gdbserver and connect to it.
+gdb_test "disconnect" ".*"
+
+gdb_test "$vgdbcmd" " in \\.?_start .*" "target remote for vgdb"
gdb_test "monitor v.set gdb_output" "valgrind output will go to gdb.*"
set continue_count 1
-while 1 {
+set loop 1
+while {$loop && $continue_count < 100} {
set test "continue #$continue_count"
gdb_test_multiple "continue" "" {
-re "Invalid free\\(\\).*: main .*\r\n$gdb_prompt $" {
pass $test
- break
+ set loop 0
+ }
+ -re "Remote connection closed.*\r\n$gdb_prompt $" {
+ fail "$test (remote connection closed)"
+ # Only if valgrind got stuck.
+ kill_wait_spawned_process $valgrind_spawn_id
+ return -1
+ }
+ -re "The program is not being run\\.\r\n$gdb_prompt $" {
+ fail "$test (valgrind vgdb has terminated)"
+ # Only if valgrind got stuck.
+ kill_wait_spawned_process $valgrind_spawn_id
+ return -1
}
-re "\r\n$gdb_prompt $" {
pass "$test (false warning)"
pass $test
}
}
+
+# Only if valgrind got stuck.
+kill_wait_spawned_process $valgrind_spawn_id