#   Copyright 1998, 2002, 2005 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 srcfile gdb_c_test.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-sections 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

# define relative source line numbers:
# all subsequent line numbers are relative to this first one (baseline)
set baseline  [gdb_find_recursion_test_baseline $srcfile];
if { $baseline == -1 } then {
    fail "Could not find gdb_recursion_test function"
    return;
}

set testline1 [expr $baseline + 1]
set testline2 [expr $baseline + 5]
set testline3 [expr $baseline + 6]
set testline4 [expr $baseline + 7]
set testline5 [expr $baseline + 8]

#
# test tfind command
#

gdb_delete_tracepoints
set tdp1 [gdb_gettpnum "\*gdb_recursion_test"]
set tdp2 [gdb_gettpnum $testline2]
set tdp3 [gdb_gettpnum $testline3]
set tdp4 [gdb_gettpnum $testline4]
set tdp5 [gdb_gettpnum $testline5]
if { $tdp1 <= 0 || $tdp2 <= 0 || $tdp3 <= 0 || \
     $tdp4 <= 0 || $tdp5 <= 0 } then {
    fail "setting tracepoints"
    return;
}

# 6.1 test tstart command
send_gdb "tstart\n"
gdb_expect {
    -re "Trace can only be run on remote targets.*$gdb_prompt $" {
	fail "6.1: tstart (not connected to remote?)"
	return;
    }
    -re "Target does not support this command.*$gdb_prompt $" {
	fail "6.1: tstart (connected to wrong target?)"
	return;
    }
    -re "Target returns error code.*$gdb_prompt $" {
	fail "6.1: tstart (connected to wrong target?)"
	return;
    }
    -re "$gdb_prompt $" {
	pass "6.1: tstart"
    }
    default {
	fail "6.1: tstart (default)"
	return;
    }
}

# test tstatus (when trace on)
gdb_test "tstatus" "\[Tt\]race is running.*" "test tstatus on"

# 6.2 test help tstart
gdb_test "help tstart" "Start trace data collection." "6.2: help tstart"

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

# 7.1 test tstop command
send_gdb "tstop\n"
gdb_expect {
    -re "Trace can only be run on remote targets.*$gdb_prompt $" {
	fail "7.1: tstop (not connected to remote?)"
	return;
    }
    -re "Target does not support this command.*$gdb_prompt $" {
	fail "7.1: tstop (connected to wrong target?)"
	return;
    }
    -re "Target returns error code.*$gdb_prompt $" {
	fail "7.1: tstop (connected to wrong target?)"
	return;
    }
    -re "$gdb_prompt $" {
	pass "7.1: tstop"
    }
    default {
	fail "7.1: tstop (default)"
	return;
    }
}

# 7.2 test help tstop
gdb_test "help tstop" "Stop trace data collection." "7.2: help tstop"

# test tstatus (when trace off)
gdb_test "tstatus" "\[Tt\]race.* not running.*" "test tstatus off"

## record starting PC
set save_pc [gdb_readexpr "(unsigned long) \$pc"];
if { $save_pc == -1 } then {
    fail "could not read PC"
    return;
}

# 8.7  tfind start
## check $trace_frame == 0
gdb_tfind_test "8.7: tfind start command" "start" "0";
## check $pc != startPC
gdb_test "printf \"x \%d x\\n\", \$pc != $save_pc" \
	"x 1 x" \
	"8.7b: tfind start"

# 8.8  tfind none
## check $trace_frame == -1
gdb_tfind_test "8.8: tfind none" "none" "-1";
## check $pc == startPC
gdb_test "printf \"x \%d x\\n\", \$pc == $save_pc" \
	"x 1 x" \
	"8.8b: tfind none (restores non-trace PC)"

# 8.9  tfind end
## check $trace_frame == -1
gdb_tfind_test "8.9: tfind end, selects no frame" "end" "-1";
## check $pc == startPC
gdb_test "printf \"x \%d x\\n\", \$pc == $save_pc" \
	"x 1 x" \
	"8.9b: tfind end (restores non-tracing PC)"

# 8.1  tfind n
## check $trace_frame == n
gdb_tfind_test "8.1: tfind 1" "1" "1"
## check $trace_line corresponds to tracepoint for frame n
gdb_test "print \$trace_line" "$testline2" "8.1b: tfind 1 (correct line)"

# 8.28 tfind invalid n (big number)
## check "not found" error
## check $trace_frame != n
gdb_test "tfind 32767" \
	"failed to find.*" \
	"8.28: tfind <n> command rejects invalid frame number"

gdb_test "printf \"x \%d x\\n\", \$trace_frame == 32767" \
	"x 0 x" \
	"8.28: tfind <n> rejected bad input (32767)"

# 8.31 tfind negative n
## check error
gdb_test "tfind -3" "invalid input.*" "8.31: tfind <n> rejects negative input"
## check $trace_frame != -n
gdb_test "printf \"x \%d x\\n\", \$trace_frame == -3" "x 0 x" \
	"8.31: tfind <n> rejected negative input (-3)"

# 8.10 tfind <no arg>
## check $trace_frame += 1

gdb_tfind_test "8.10: tfind start" "start" "0";
gdb_test "print \$trace_line" "$baseline"  \
	"8.10: tfind 0 (correct line $baseline)"
gdb_tfind_test "8.10: tfind noargument 1" "" "1";
gdb_test "print \$trace_line" "$testline2" \
	"8.10: tfind 1 (correct line $testline2)"
gdb_tfind_test "8.10: tfind noargument 2" "" "2";
gdb_test "print \$trace_line" "$testline3" \
	"8.10: tfind 2 (correct line $testline3)"
gdb_tfind_test "8.10: tfind noargument 3" "" "3";
gdb_test "print \$trace_line" "$testline4" \
	"8.10: tfind 3 (correct line $testline4)"

gdb_tfind_test "8.11: tfind 3" "3" "3";
gdb_test "print \$trace_line" "$testline4" \
	"8.11: tfind 3 (correct line $testline4)"
gdb_tfind_test "8.11: tfind backward 2" "-" "2";
gdb_test "print \$trace_line" "$testline3" \
	"8.11: tfind 2 (correct line $testline3)"
gdb_tfind_test "8.11: tfind backward 1" "-" "1";
gdb_test "print \$trace_line" "$testline2" \
	"8.11: tfind 1 (correct line $testline2)"
gdb_tfind_test "8.11: tfind backward 0" "-" "0";
gdb_test "print \$trace_line" "$baseline"  \
	"8.11: tfind 0 (correct line $baseline)"

gdb_tfind_test "8.12: tfind none" "none" "-1";
gdb_tfind_test "8.12: tfind tracepoint <n>" "tracepoint $tdp2" \
	"\$tracepoint" "$tdp2";
gdb_test "print \$trace_line" "$testline2" \
	"8.12: tfind tracepoint <n> (line $testline2)"

gdb_tfind_test "8.25: tfind none" "none" "-1";
gdb_test "tfind tracepoint 0" "failed to find.*" \
	"8.25: tfind tracepoint rejects zero"
gdb_test "tfind tracepoint 32767" "failed to find.*" \
	"8.25: tfind tracepoint rejects nonexistant tracepoint (32767)"
gdb_test "tfind tracepoint -1" "failed to find.*" \
	"8.25: tfind tracepoint rejects nonexistant tracepoint (-1)"

# 8.37 tfind tracepoint n where n no longer exists (but used to)
gdb_test "delete trace $tdp2" "" ""
gdb_tfind_test "8.37: tfind none" "none" "-1";
gdb_tfind_test "8.37: tfind deleted tracepoint" \
	"tracepoint $tdp2" \
	"\$tracepoint" "$tdp2";
gdb_test "print \$trace_line" "$testline2" \
	"8.37: tfind deleted tracepoint (line $testline2)"

# 8.13 tfind tracepoint <no arg>
## check $tracepoint same before and after, $trace_frame changed

gdb_tfind_test "8.13: tfind none" "none" "-1";
gdb_tfind_test "8.13: tracepoint $tdp1" "tracepoint $tdp1" \
	"\$tracepoint" "$tdp1";
gdb_test "print \$trace_line" "$baseline" \
	"8.13: tfind tracepoint $tdp1 (line $baseline)"
gdb_test "set \$save_frame = \$trace_frame" "" ""
gdb_tfind_test "8.13: tracepoint <no arg>" "tracepoint" \
	"\$tracepoint" "$tdp1";
gdb_test "printf \"x \%d x\\n\", \$trace_frame == \$save_frame" \
	"x 0 x" \
	"8.13: tracepoint <no arg>, tracepoint number unchanged"

# 1.12 set tracepoint in prologue
#
# tdp1 was set at *gdb_recursion_test (ie. the hard address of the
# function, before the prologue).  Test to see that it succeeded.
# Current pc should be equal to the address of the function.

gdb_test "printf \"x \%d x\\n\", \$pc == gdb_recursion_test" \
	"x 1 x" \
	"1.12: set tracepoint in prologue"

# 8.14 tfind pc x
## check pc == x, $trace_frame != -1
gdb_tfind_test "8.14: tfind 3" "3" "3"
gdb_test "print \$trace_line" "$testline4" \
	"8.14: tfind 3 (line $testline4)"

gdb_test "set \$test_pc = \$pc" "" ""
gdb_tfind_test "8.14: tfind none" "none" "-1"
gdb_tfind_test "8.14: tfind pc" "pc \$test_pc" "\$trace_frame != -1" "1";
gdb_test "print \$trace_line" "$testline4" \
	"8.14: tfind pc x (line $testline4)"
gdb_test "printf \"x \%d x\\n\", \$pc == \$test_pc" \
	"x 1 x" \
	"8.14: tfind pc x"

# 8.15 tfind pc <no arg>
## check pc same before and after, $trace_frame changed
gdb_tfind_test "8.15: tfind 3" "3" "3"
gdb_test "print \$trace_line" "$testline4" \
	"8.15: tfind 3 (line $testline4)"
gdb_test "set \$test_pc = \$pc" "" ""
gdb_tfind_test "8.15: tfind pc" "pc" "\$pc == \$test_pc" "1"
gdb_test "print \$trace_line" "$testline4" \
	"8.15: tfind pc (line $testline4)"
gdb_test "printf \"x \%d x\\n\", \$trace_frame != 3" "x 1 x" \
	"8.15: trace frame didn't change"

# 8.26 tfind pc invalid x
## check error, pc != x (trace_frame unchanged?)
gdb_tfind_test "8.26: tfind start" "start" "0"
gdb_test "tfind pc  0" "failed to find.*" "8.26: tfind pc zero"
gdb_test "tfind pc -1" "failed to find.*" "8.26: tfind pc -1"

# 8.16 tfind line n
## check #trace_frame != -1, $trace_line == n
gdb_tfind_test "8.16: tfind none" "none" "-1"
gdb_tfind_test "8.16: tfind line $testline3" \
	"line $testline3" \
	"\$trace_line == $testline3" "1"

# 8.17 tfind line <no arg> (# 8.19, 8.20)
## check $trace_line changed, no error, pc changed, frame changed, tdp changed
gdb_tfind_test "8.17: tfind none" "none" "-1"
gdb_tfind_test "8.17: tfind line $testline3" "line $testline3" "\$trace_line == $testline3" "1"
gdb_tfind_test "8.17: tfind line <no arg>" "line" "\$trace_line != $testline3" "1"

# 8.36 tfind and disassembly
gdb_tfind_test "8.36: tfind start" "start" "0"
set timeout 60
send_gdb "disassemble gdb_c_test\n"
# look for disassembly of function label
gdb_expect {
    -re "<gdb_c_test>:.*$gdb_prompt $"      { pass "8.36: trace disassembly" }
    -re ".*$gdb_prompt $"                   { fail "8.36: trace disassembly" }
    timeout                       { fail "8.36: trace disassembly (timeout)" }
}

gdb_test "tfind line 0" \
	"out of range.*|failed to find.*" \
	"8.18: tfind line 0";
gdb_test "tfind line 32767" \
	"out of range.*|failed to find.*" \
	"8.27: tfind line 32767";
gdb_test "tfind line NoSuChFiLe.c:$baseline" \
	"No source file named.*" \
	"8.27: tfind line in bad source file";

# 8.32 tfind invalid subcommand (tfind foo) 
## check error
gdb_test "tfind NoSuChOpTiOn 21" \
	"No symbol.*|\[Ww\]arning.*|\[Ee\]rror.*" \
	"8.32: tfind with bad subcommand"

# 8.38 test help tfind
gdb_test "help tfind"       "Select a trace frame.*"      \
	"8.38: help tfind"
gdb_test "help tfind pc"    "Select a trace frame by PC.*" \
	"8.38: help tfind PC"
gdb_test "help tfind end"   "Synonym for 'none'.*"        \
	"8.38: help tfind end"
gdb_test "help tfind none"  "De-select any trace frame.*" \
	"8.38: help tfind none"
gdb_test "help tfind line"  "Select a trace frame by source line.*" \
	"8.38: help tfind line"
gdb_test "help tfind start" "Select the first trace frame.*" \
	"8.38: help tfind start"
gdb_test "help tfind range" "Select a trace frame whose PC is in.*" \
	"8.38: help tfind range"
gdb_test "help tfind trace" "Select a trace frame by tracepoint number.*" \
	"8.38: help tfind tracepoint"

# Finished!
gdb_tfind_test "8.17: tfind none" "none" "-1"
