#   Copyright 1998 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Michael Snyder (msnyder@cygnus.com)

load_lib "trace-support.exp"

if $tracelevel then {
    strace $tracelevel
}

set prms_id 0
set bug_id 0

gdb_exit
gdb_start

if [istarget "m68k-*-elf"] then {
    load_lib "emc-support.exp"
    set testfile "gdb_c_test"
    set srcfile  $testfile.c
    set binfile [board_info target d490_binfile];
    gdb_test "set remotetimeout 6" "" ""
    set timeout 500
    gdb_target_monitor "$binfile"
    # Give a TSTOP and ignore errors, to make sure any previous trace is off
    gdb_test "tstop" "" ""
    gdb_test "tfind none"  "" ""
    send_gdb "compare-section CS\n"
    gdb_expect {
	-re "MIS-MATCHED.*$gdb_prompt $" {
	    gdb_suppress_entire_file "Symbol file does not match target!
	    all tests in this module will fail.";
	}
	-re ".*$gdb_prompt $" { }
    }
} else {
    set testfile "actions"
    set srcfile $testfile.c
    set binfile $objdir/$subdir/$testfile
    if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	    executable {debug additional_flags=-w}] != "" } {
	gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
    }
    gdb_load $binfile
    gdb_test "tstop"       "" ""
    gdb_test "tfind none"  "" ""
    runto_main
}
gdb_reinitialize_dir $srcdir/$subdir

# We generously give ourselves one "pass" if we successfully 
# detect that this test cannot be run on this target!
if { ![gdb_target_supports_trace] } then {
    pass "Current target does not supporst trace"
    return 1;

}

# If testing on a remote host, download the source file.
# remote_download host $srcdir/$subdir/$srcfile

#
# test while-stepping dynamically (live target)
#

## verify number of trace frames collected matches stepcount

gdb_delete_tracepoints
gdb_test "trace gdb_c_test" \
	"Tracepoint $decimal at .*" \
	"Set tracepoint at gdb_c_test"

gdb_trace_setactions "5.12: define while-stepping <stepcount>" \
	"" \
	"collect \$fp" "^$" \
	"while-stepping 5" "^$" \
	"collect p" "^$" \
	"end" "^$" \
	"end" ""

gdb_test "tstart" "" ""

if [istarget "m68k-*-elf"] then {
    gdb_emclaptop_command "85,1,2,3,4,5,6"
    sleep 5
} else {
    gdb_test "break end" "" ""
    gdb_test "continue" \
	    "Continuing.*Breakpoint $decimal, end.*" \
	    "run trace experiment"
}

gdb_test "tstop" "" ""

gdb_tfind_test "5.12: frame 5 should be the last one collected" "5" "5"

send_gdb "tfind 6\n"
gdb_expect {
    -re "failed to find.*$gdb_prompt $" {
	pass "5.12: trace stopped after 5 stepping frames"
    }
    -re ".*$gdb_prompt $" {
	fail "5.12: trace stopped after 5 stepping frames"
    }
}

gdb_test "tfind none" "" ""
