#   Copyright 1998, 2007, 2008, 2009, 2010, 2011
#   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
}


gdb_exit
gdb_start

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

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" ".*" ""

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

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

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"
	}
    }
}

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