#   Copyright 1998, 2007-2012 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" ".*" ""

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