#   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/packetlen
if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	  executable {debug nowarnings}] != "" } {
    untested packetlen.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;

}

# If testing on a remote host, download the source file.
# remote_download host $srcdir/$subdir/$srcfile

#
# Test collecting a whole bunch of stuff at a single tracepoint.
# The test is whether this crashes GDB.
#

gdb_delete_tracepoints
gdb_test "trace gdb_c_test" ".*" ""
gdb_trace_setactions "setup collect actions" \
	"" \
	"collect parm\[0\], parm\[1\], parm\[2\], parm\[3\]" "^$" \
	"collect parm\[4\], parm\[5\], parm\[6\], parm\[7\]" "^$" \
	"collect p, local_reg, local_static, local_static_sizeof" "^$" \
	"collect local_long, stack_ptr, end_of_stack" "^$" \
	"collect gdb_char_test, gdb_short_test, gdb_long_test" "^$" \
	"collect gdb_arr_test, gdb_struct1_test, gdb_struct2_test" "^$" \
	"collect gdb_structp_test, gdb_structpp_test, gdb_union1_test" "^$" \
	"end" ""

gdb_test_no_output "tstart" "survive the long packet send"
gdb_test "break end" ".*" ""
gdb_test "continue" \
    "Continuing.*Breakpoint $decimal, end.*" \
    "run trace experiment"

gdb_test_no_output "tstop" "confirm: survived the long packet send"

