#   Copyright 1998, 2007, 2008, 2009, 2010 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 [istarget "x86_64-*"] then {
    set fpreg "rbp"
    set spreg "rsp"
    set pcreg "rip"
} elseif [istarget "i?86-*"] then {
    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 " 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"
	}
    }
}

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"
