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

}

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) } {
	    gdb_suppress_entire_file "failed to locate test source lines:
all tests in this module will fail."
	}
    }
    default {
	    gdb_suppress_entire_file "failed to locate test source lines (def):
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"
