#   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 report.exp
    return -1
}
gdb_load $binfile
gdb_test "tstop"       ".*" ""
gdb_test "tfind none"  ".*" ""
runto_main
gdb_reinitialize_dir $srcdir/$subdir

if { ![gdb_target_supports_trace] } then {
    unsupported "Current target does not support trace"
    return 1

}

set cr "\[\r\n\]+"

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

#
# test general reporting of trace experiment results
#

set testline1 0
set testline2 0
set testline3 0
set testline4 0
set testline5 0
set testline6 0

set arg1 1
set arg2 2
set arg3 3
set arg4 4
set arg5 5
set arg6 6

set gdb_recursion_test_baseline [gdb_find_recursion_test_baseline $srcfile];
if { $gdb_recursion_test_baseline == -1 } {
    fail "Could not find gdb_recursion_test function"
    return;
}

set return_me 0

gdb_test_multiple "list $gdb_recursion_test_baseline, +12" "" {
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 1 " {
	set testline1 $expect_out(1,string)
	exp_continue
    }
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 2 " {
	set testline2 $expect_out(1,string)
	exp_continue
    }
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 3 " {
	set testline3 $expect_out(1,string)
	exp_continue
    }
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 4 " {
	set testline4 $expect_out(1,string)
	exp_continue
    }
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 5 " {
	set testline5 $expect_out(1,string)
	exp_continue
    }
    -re "\[\r\n\](\[0-9\]+)\[^\r\n\]+gdbtestline 6 " {
	set testline6 $expect_out(1,string)
	exp_continue
    }
    -re ".*$gdb_prompt $" {
	if { ($testline1 == 0) || ($testline2 == 0) || ($testline3 == 0) || ($testline4 == 0) || ($testline5 == 0) || ($testline6 == 0) } {
	    untested report.exp
	    set return_me 1
all tests in this module will fail."
	}
    }
    default {
	    untested report.exp
	    set return_me 1
all tests in this module will fail."
    } 
}

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

#
# Setup trace experiment.  This will involve:
#   1) a tracepoint where nothing is collected
#   2) a tracepoint where only regs are collected
#   3) a tracepoint where only args are collected
#   4) a tracepoint where only locals are collected
#   5) a tracepoint where some amount of stack memory is collected.
#   6) a tracepoint where some expressions are collected.
#

gdb_delete_tracepoints
set tdp1 [gdb_gettpnum $testline1]
set tdp2 [gdb_gettpnum $testline2]
set tdp3 [gdb_gettpnum $testline3]
set tdp4 [gdb_gettpnum $testline4]
set tdp5 [gdb_gettpnum $testline5]
set tdp6 [gdb_gettpnum $testline6]

if {    $tdp1 <= 0 || $tdp2 <= 0 || $tdp3 <= 0 || \
	$tdp4 <= 0 || $tdp5 <= 0 || $tdp6 <= 0 } then {
    fail "setting tracepoints failed"
    return;
}

gdb_trace_setactions "9.x: setup TP to collect regs" \
	"$tdp2" \
	"collect \$regs" "^$"


gdb_trace_setactions "9.x: setup TP to collect args" \
	"$tdp3" \
	"collect \$args" "^$"

gdb_trace_setactions "9.x: setup TP to collect locals" \
	"$tdp4" \
	"collect \$locs" "^$"

if [is_amd64_regs_target] {
    set fpreg "rbp"
    set spreg "rsp"
    set pcreg "rip"
} elseif [is_x86_like_target] {
    set fpreg "ebp"
    set spreg "esp"
    set pcreg "eip"
} else {
    set fpreg "fp"
    set spreg "sp"
    set pcreg "pc"
}

gdb_trace_setactions "9.x: setup TP to collect stack memory" \
	"$tdp5" \
	"collect \$$fpreg, \*\(void \*\*\) \$$spreg @ 64" "^$"

gdb_trace_setactions "9.x: setup TP to collect expressions" \
	"$tdp6" \
	"collect gdb_char_test, gdb_short_test, gdb_long_test" "^$"

gdb_test "tstart" ".*" ""

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

gdb_test "tstop" ".*" ""

gdb_tfind_test "9.1: init: make sure not debugging any trace frame" \
    "none" "-1"

# 9.3 help tdump

gdb_test "help tdump" "Print everything collected at the current.*" \
	"9.3: help tdump"

# Check the collected trace data from different sources, such as live
# inferior and tfile.

proc use_collected_data { data_source } {
    with_test_prefix "${data_source}" {
	global tdp1 tdp2 tdp3 tdp4 tdp5 tdp6
	global testline1 testline2 testline3 testline4 testline5 testline6
	global pcreg fpreg spreg
	global srcfile srcdir subdir
	global arg1 arg3
	global decimal hex gdb_prompt
	#
	# 9.1 test the tdump command
	#

	set timeout 60

	gdb_tfind_test "9.1: find frame for TP $tdp1" "tracepoint $tdp1" \
	    "\$tracepoint" "$tdp1"

	# Nothing was collected at tdp1, so this tdump should be empty.
	gdb_test "tdump" \
	    "Data collected at tracepoint $tdp1, trace frame $decimal:" \
	    "9.1: tdump, nothing collected"

	gdb_tfind_test "9.1: find frame for TP $tdp2" "tracepoint $tdp2" \
	    "\$tracepoint" "$tdp2"

	# regs were collected at tdp2.
	# How to match for the output of "info registers" on an unknown architecture?
	# For now, assume that most architectures have a register called "pc".

	gdb_test "tdump" \
	    "\[\r\n\]$pcreg .*" \
	    "9.1: tdump, regs collected"

	gdb_tfind_test "9.1: find frame for TP $tdp3" "tracepoint $tdp3" \
	    "\$tracepoint" "$tdp3"

	# args were collected at tdp3
	gdb_test "tdump" \
	    "depth = 3.*q1 = 2.*q2 = 2.*q3 = 3.*q4 = 4.*q5 = 5.*q6 = 6" \
	    "9.1: tdump, args collected"

	gdb_tfind_test "9.1: find frame for TP $tdp4" "tracepoint $tdp4" \
	    "\$tracepoint" "$tdp4"

	# locals were collected at tdp4
	gdb_test "tdump" \
	    "q = 1" \
	    "9.1: tdump, locals collected"

	gdb_tfind_test "9.1: find frame for TP $tdp5" "tracepoint $tdp5" \
	    "\$tracepoint" "$tdp5"

	# stack was collected at tdp5, plus the frame pointer
	gdb_test "tdump" \
	    ".$fpreg = .*$spreg @ 64 = .*" \
	    "9.1: tdump, memrange collected"

	gdb_tfind_test "9.1: find frame for TP $tdp6" "tracepoint $tdp6" \
	    "\$tracepoint" "$tdp6"

	# globals were collected at tdp6
	gdb_test "tdump" \
	    "gdb_char_test = 1.*gdb_short_test = 2.*gdb_long_test = 3" \
	    "9.1: tdump, global variables collected"

	# 9.2 test tdump with arguments
	#     [no go, tdump doesn't have any arguments]

	set linecount1 0
	set linecount2 0
	set linecount3 0
	set linecount4 0
	set linecount5 0
	set linecount6 0

	gdb_tfind_test "11.x, 12.1: find start frame" "start" "0"

	#
	# 11.x test built-in trace variables $trace_frame, $trace_line etc.
	#

	gdb_test "printf \"x %d x\\n\", \$trace_frame" "x 0 x" \
	    "11.1: test \$trace_frame"

	gdb_test "printf \"x %d x\\n\", \$tracepoint" "x $tdp1 x" \
	    "11.2: test \$tracepoint"

	gdb_test "printf \"x %d x\\n\", \$trace_line" "x $testline1 x" \
	    "11.3: test \$trace_line"

	gdb_test_multiple "print \$trace_file" "11.4: test \$trace_file" {
	    -re "\\$\[0-9\]+ = \"$srcfile\"\[\r\n\]+$gdb_prompt $" {
		pass "11.4: test \$trace_file"
	    }
	    -re "\\$\[0-9\]+ = \"$srcdir/$subdir/$srcfile\"\[\r\n\]+$gdb_prompt $" {
		pass "11.4: test \$trace_file"
	    }
	}

	#gdb_test "print \$trace_file" "\"$srcdir/$subdir/$srcfile\"" \
	    #	"11.4: test \$trace_file"

	#
	# 12.x test report generation using arbitrary GDB commands, loops etc.
	#

	gdb_test_multiple "while \$trace_frame != -1\n  output \$trace_file\n  printf \", line \%d \(tracepoint #\%d\)\\n\", \$trace_line, \$tracepoint\n  tfind\n  end" "12.1: trace report #1" {
	    -re ">  end\r\n" {
		exp_continue
	    }
	    -re "^Found trace frame \[0-9\]+, tracepoint \[0-9\]+\r\n" {
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline1 .tracepoint .$tdp1\\)\r\n" {
		set linecount1 [expr $linecount1 + 1]
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline2 .tracepoint .$tdp2\\)\r\n" {
		set linecount2 [expr $linecount2 + 1]
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline3 .tracepoint .$tdp3\\)\r\n" {
		set linecount3 [expr $linecount3 + 1]
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline4 .tracepoint .$tdp4\\)\r\n" {
		set linecount4 [expr $linecount4 + 1]
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline5 .tracepoint .$tdp5\\)\r\n" {
		set linecount5 [expr $linecount5 + 1]
		exp_continue
	    }
	    -re "^\[^\r\n\]* line $testline6 .tracepoint .$tdp6\\)\r\n" {
		set linecount6 [expr $linecount6 + 1]
		exp_continue
	    }
	    -re "^No trace frame found\r\n$gdb_prompt $" {
		if { ($linecount1 < 4) || ($linecount2 < 4) || ($linecount3 < 4) || ($linecount4 < 4) || ($linecount5 < 4) || ($linecount6 < 4) } {
		    fail "12.1: trace report #1"
		} else {
		    pass "12.1: trace report #1"
		}
	    }
	}

	gdb_tfind_test "12.2: tfind end, selects no frame" "end" "-1"
	gdb_tfind_test "12.2: find first TDP #2 frame" "tracepoint $tdp2" \
	    "\$tracepoint" "$tdp2"

	set linecount2 0

	gdb_test_multiple "while \$trace_frame != -1\n printf \"tracepoint #\%d, FP 0x\%08x, SP 0x\%08x, PC 0x%08x\\n\", \$tracepoint, \$fp, \$sp, \$pc\n tfind tracepoint\n end" "12.2: trace report #2" {
	    -re "tracepoint #$tdp2, FP $hex, SP $hex, PC $hex" {
		set linecount2 [expr $linecount2 + 1]
		exp_continue
	    }
	    -re ".*$gdb_prompt $" {
		if { ($linecount2 < 4) } {
		    fail "12.2: trace report #2"
		} else {
		    pass "12.2: trace report #2"
		}
	    }
	}

	gdb_tfind_test "12.3: tfind end, selects no frame" "end" "-1"
	gdb_tfind_test "12.3: find first TDP #3 frame" "tracepoint $tdp3" \
	    "\$tracepoint" "$tdp3"

	set linecount3 0

	gdb_test_multiple "while \$trace_frame != -1\n printf \"TDP #\%d, frame \%d: depth = \%d, q1 = \%d\\n\", \$tracepoint, \$trace_frame, depth, q1\n tfind tracepoint\n end" "12.3: trace report #3" {
	    -re "TDP #$tdp3, frame $decimal: depth = $decimal, q1 = $decimal" {
		set linecount3 [expr $linecount3 + 1]
		exp_continue
	    }
	    -re ".*$gdb_prompt $" {
		if { ($linecount3 < 4) } {
		    fail "12.3: trace report #3"
		} else {
		    pass "12.3: trace report #3"
		}
	    }
	}

	gdb_tfind_test "12.4: tfind end, selects no frame" "end" "-1"
	gdb_tfind_test "12.4: find first TDP #6 frame" "tracepoint $tdp6" \
	    "\$tracepoint" "$tdp6"

	set linecount6 0

	gdb_test_multiple "while \$trace_frame != -1\n printf \"TDP #\%d, frame %d: char_test = \%d, long_test = \%d\\n\", \$tracepoint, \$trace_frame, gdb_char_test, gdb_long_test\n tfind tracepoint\n end" "12.4: trace report #4" {
	    -re "TDP #$tdp6, frame $decimal: char_test = $arg1, long_test = $arg3" {
		set linecount6 [expr $linecount6 + 1]
		exp_continue
	    }
	    -re ".*$gdb_prompt $" {
		if { ($linecount6 < 4) } {
		    fail "12.4: trace report #4"
		} else {
		    pass "12.4: trace report #4"
		}
	    }
	}
    }
}

use_collected_data "live"

# Finished!
gdb_tfind_test "finished: make sure not debugging any trace frame" \
    "none" "-1"

# Save trace frames to tfile.
gdb_test "tsave report.tf" "Trace data saved to file 'report.tf'.*"

# Change target to tfile.
set test "change to tfile target"
gdb_test_multiple "target tfile report.tf" "$test" {
    -re "A program is being debugged already.  Kill it. .y or n. " {
	send_gdb "y\n"
	exp_continue
    }
    -re "$gdb_prompt $" {
	pass "$test"
    }
}
# Test the collected trace frames from tfile.
use_collected_data "tfile"
