#   Copyright 1998-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/>.

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

load_lib "trace-support.exp";


gdb_exit
gdb_start

standard_testfile actions.c

if { [gdb_compile "$srcdir/$subdir/$srcfile" "$binfile" \
	  executable {debug nowarnings}] != "" } {
    untested tfind.exp
    return -1
}
gdb_load $binfile
gdb_test "tstop"       ".*" ""
gdb_test "tfind none"  ".*" ""

# 6.2 test help tstart
gdb_test "help tstart" \
    "Start trace data collection\.\[\r\n\]+Usage: tstart \\\[ <notes> \.\.\. \\\]\[\r\n\]+Any arguments supplied are recorded with the trace as a note and\[\r\n\]+reported by tstatus \\(if the target supports trace notes\\)\." \
    "6.2: help tstart"
# 7.2 test help tstop
gdb_test "help tstop" \
    "Stop trace data collection\.\[\r\n\]+Usage: tstop \\\[ <notes> \.\.\. \\\]\[\r\n\]+Any arguments supplied are recorded with the trace as a stop reason and\[\r\n\]+reported by tstatus \\(if the target supports trace notes\\)\." \
    "7.2: help tstop"

# 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"   "De-select any trace frame.*" \
	"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"

runto_main
gdb_reinitialize_dir $srcdir/$subdir

if { ![gdb_target_supports_trace] } then {
    unsupported "Current target does not support 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

set return_me 1
gdb_test_multiple "tstart" "6.1: tstart" {
    -re "Trace can only be run on remote targets.*$gdb_prompt $" {
	fail "6.1: tstart (not connected to remote?)"
    }
    -re "Target does not support this command.*$gdb_prompt $" {
	fail "6.1: tstart (connected to wrong target?)"
    }
    -re "Target returns error code.*$gdb_prompt $" {
	fail "6.1: tstart (connected to wrong target?)"
    }
    -re "$gdb_prompt $" {
	pass "6.1: tstart"
	set return_me 0
    }
}

if { $return_me == 1 } then {
    return -1
}

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

gdb_test "break end" ".*" ""
gdb_test "continue" \
    "Continuing.*Breakpoint $decimal, end.*" \
    "run trace experiment"

# 7.1 test tstop command

set return_me 1
gdb_test_multiple "tstop" "7.1: tstop" {
    -re "Trace can only be run on remote targets.*$gdb_prompt $" {
	fail "7.1: tstop (not connected to remote?)"
    }
    -re "Target does not support this command.*$gdb_prompt $" {
	fail "7.1: tstop (connected to wrong target?)"
    }
    -re "Target returns error code.*$gdb_prompt $" {
	fail "7.1: tstop (connected to wrong target?)"
    }
    -re "$gdb_prompt $" {
	pass "7.1: tstop"
	set return_me 0
    }
}

if { $return_me == 1 } then {
    return -1
}

# test tstatus (when trace off)
gdb_test "tstatus" "Trace stopped by a tstop command.*" \
    "test tstatus off after tstop"

## 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_no_output "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_no_output "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_no_output "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_no_output "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
# look for disassembly of function label
gdb_test "disassemble gdb_c_test" \
    "<(\.\[0-9\]+|)>:.*End of assembler dump.*" \
    "8.36: trace disassembly"

gdb_test "tfind line 0" \
	"out of range.*|failed to find.*|No line 0 in .*" \
	"8.18: tfind line 0";
gdb_test "tfind line 32767" \
	"out of range.*|failed to find.*|No line 32767 in .*" \
	"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"

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