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

