#   Copyright 1998, 2007, 2008, 2009 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";

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 $" {
	    untested report.exp
	    return -1
	    all tests in this module will fail.";
	}
	-re ".*$gdb_prompt $" { }
    }
} else {
    set testfile "actions"
    set srcfile ${testfile}.c
    set binfile $objdir/$subdir/report
    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

# 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 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;
}

send_gdb "list $gdb_recursion_test_baseline, +12\n"
gdb_expect {
    -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
	    return -1
all tests in this module will fail."
	}
    }
    default {
	    untested report.exp
	    return -1
all tests in this module will fail."
    } 
}

#
# 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" "^$"

gdb_trace_setactions "9.x: setup TP to collect stack memory" \
	"$tdp5" \
	"collect \$fp, \*\(void \*\*\) \$sp @ 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" "" ""

if [istarget "m68k-*-elf"] then {
    gdb_emclaptop_command "85,$arg1,$arg2,$arg3,$arg4,$arg5,$arg6"
    sleep 5
    
} else {
    gdb_test "break end" "" ""
    gdb_test "continue" \
	    "Continuing.*Breakpoint $decimal, end.*" \
	    "run trace experiment"
}

gdb_test "tstop" "" ""

#
# 9.1 test the tdump command
#

set timeout 60

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

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 every architecture has a register called "pc".
gdb_test "tdump" \
	"\[\r\n\]pc .*" \
	"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" \
	".fp = .*sp @ 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]

# 9.3 help tdump

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

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"

send_gdb "print \$trace_file\n"
gdb_expect {
    -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"
    }
    -re "$gdb_prompt $" {
	fail "11.4: test \$trace_file"
    }
    timeout {
	fail "11.4: test \$trace_file (timeout)"
    }
}

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

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

send_gdb "while \$trace_frame != -1\n  output \$trace_file\n  printf \", line \%d \(tracepoint #\%d\)\\n\", \$trace_line, \$tracepoint\n  tfind\n  end\n"
gdb_expect {
    -re " line $testline1 .tracepoint .$tdp1" {
	set linecount1 [expr $linecount1 + 1]
	exp_continue
    }
    -re " line $testline2 .tracepoint .$tdp2" {
	set linecount2 [expr $linecount2 + 1]
	exp_continue
    }
    -re " line $testline3 .tracepoint .$tdp3" {
	set linecount3 [expr $linecount3 + 1]
	exp_continue
    }
    -re " line $testline4 .tracepoint .$tdp4" {
	set linecount4 [expr $linecount4 + 1]
	exp_continue
    }
    -re " line $testline5 .tracepoint .$tdp5" {
	set linecount5 [expr $linecount5 + 1]
	exp_continue
    }
    -re " line $testline6 .tracepoint .$tdp6" {
	set linecount6 [expr $linecount6 + 1]
	exp_continue
    }
    -re ".*$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"
	}
    }
    timeout {
	fail "12.1: trace report #1 (timeout)"
    }
}

gdb_tfind_test "12.2: find first TDP #2 frame" "tracepoint $tdp2" \
	"\$tracepoint" "$tdp2"

set linecount2 0

send_gdb "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\n"
gdb_expect {
    -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"
	}
    }
    timeout {
	fail "12.2: trace report #2 (timeout)"
    }
}

gdb_tfind_test "12.3: find first TDP #3 frame" "tracepoint $tdp3" \
	"\$tracepoint" "$tdp3"

set linecount3 0

send_gdb "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\n"
gdb_expect {
    -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"
	}
    }
    timeout {
	fail "12.3: trace report #3 (timeout)"
    }
}

gdb_tfind_test "12.4: find first TDP #6 frame" "tracepoint $tdp6" \
	"\$tracepoint" "$tdp6"

set linecount6 0

send_gdb "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\n"
gdb_expect {
    -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"
	}
    }
    timeout {
	fail "12.4: trace report #4 (timeout)"
    }
}

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