# Copyright 2012-2013 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
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

if [is_remote target] {
    # The test always runs locally.
    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} {
    return -1
}

set test "spawn valgrind"
set cmd "valgrind --vgdb-error=0 $binfile"
set res [remote_spawn host $cmd];
if { $res < 0 || $res == "" } {
    verbose -log "Spawning $cmd failed."
    unsupported $test
    return -1
}
pass $test
# Declare GDB now as running.
set gdb_spawn_id -1

# 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.
set use_gdb_stub 1

set test "valgrind started"
# The trailing '.' differs for different memcheck versions.
gdb_test_multiple "" $test {
    -re "Memcheck, a memory error detector\\.?\r\n" {
	pass $test
    }
    -re "valgrind: failed to start tool 'memcheck' for platform '.*': No such file or directory" {
	unsupported $test
	return -1
    }
    -re "valgrind: wrong ELF executable class" {
	unsupported $test
	return -1
    }
    -re "command not found" {
	# The spawn succeeded, but then valgrind was not found - e.g. if
	# we spawned SSH to a remote system.
	unsupported $test
	return -1
    }
    -re "valgrind: Bad option.*--vgdb-error=0" {
	# valgrind is not >= 3.7.0.
	unsupported $test
	return -1
    }
}

set test "vgdb prompt"
# The trailing '.' differs for different memcheck versions.
gdb_test_multiple "" $test {
    -re "  (target remote | \[^\r\n\]*/vgdb \[^\r\n\]*)\r\n" {
	set vgdbcmd $expect_out(1,string)
	pass $test
    }
}

# Do not kill valgrind.
set valgrind_pid [exp_pid -i [board_info host fileid]]
unset gdb_spawn_id
set board [host_info name]
unset_board_info fileid

clean_restart $executable

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
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
	    set loop 0
	}
	-re "Remote connection closed.*\r\n$gdb_prompt $" {
	    fail "$test (remote connection closed)"
	    return -1
	}
	-re "The program is not being run\\.\r\n$gdb_prompt $" {
	    fail "$test (valgrind vgdb has terminated)"
	    return -1
	}
	-re "\r\n$gdb_prompt $" {
	    pass "$test (false warning)"
	}
    }
    set continue_count [expr $continue_count + 1]
}

set test "p gdb_test_infcall ()"
gdb_test_multiple $test $test {
    -re "unhandled instruction bytes.*\r\n$gdb_prompt $" {
	fail $test
    }
    -re "Continuing \\.\\.\\..*\r\n\\\$1 = 2\r\n$gdb_prompt $" {
	pass $test
    }
}

# Only if valgrind got stuck.
remote_exec host "kill -9 ${valgrind_pid}"
