# Copyright 1998 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

if [istarget "m68k-*-elf"] then {
    pass "Test not supported on this target"
    return;
}

load_lib "trace-support.exp"

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile "limits"
set srcfile ${testfile}.c
set binfile $objdir/$subdir/$testfile

if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	executable {debug additional_flags=-w}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

# Tests:
# 1) Meet and exceed artificial limit on number of tracepoints
# 2) Meet and exceed artificial limit on number of memranges
# 3) Meet and exceed artificial limit on bytes  of bytecode data
# [NOTE: number four is moved out into its own separate test module.]
# 4) Meet and exceed artificial limit on bytes  of trace buffer storage
#    (circular and non-circular modes).  However note that a more 
#    thorough test of the circular mode can be made separately.

set cr "\[\r\n\]+"

proc gdb_tracepoint_limit_test { } {
    global gdb_prompt
    global cr

    # Make sure we're in a sane starting state.
    gdb_test "tstop" "" ""
    gdb_test "tfind none" "" ""
    gdb_delete_tracepoints

    # Set three tracepoints
    gdb_test "trace foo" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "tracepoint limit test: set first tracepoint"

    gdb_test "trace bar" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "tracepoint limit test: set second tracepoint"

    gdb_test "trace baz" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "tracepoint limit test: set third tracepoint"

    # Set secret artificial tracepoint limit to four
    gdb_test "maint packet QTLimit:tp:4" \
	    "received: .OK." \
	    "tracepoint limit test: set limit to four"

    # Now sending three tracepoints should succeed.
    send_gdb "tstart\n"
    gdb_expect {
	-re "$cr$gdb_prompt" {
	    pass "tracepoint limit test: send fewer than limit"
	}
	default {
	    fail "tracepoint limit test: send fewer than limit"
	}
    }

    # Set secret artificial tracepoint limit to three
    gdb_test "maint packet QTLimit:tp:3" \
	    "received: .OK." \
	    "tracepoint limit test: set limit to three"

    # Now sending three tracepoints should still succeed.
    send_gdb "tstart\n"
    gdb_expect {
	-re "$cr$gdb_prompt" {
	    pass "tracepoint limit test: send equal to limit"
	}
	default {
	    fail "tracepoint limit test: send equal to limit"
	}
    }

    # Set secret artificial tracepoint limit to two
    gdb_test "maint packet QTLimit:tp:2" \
	    "received: .OK." \
	    "tracepoint limit test: set limit to two"

    # Now sending three tracepoints should fail.
    gdb_test "tstart" \
	    ".*\[Ee\]rror.*" \
	    "tracepoint limit test: send more than limit"

    # Clean up:
    gdb_test "tstop" "" ""
    gdb_test "maint packet QTLimit:tp:FFFFFFFF" "" ""
}

proc gdb_memrange_limit_test { } {
    global gdb_prompt
    global cr

    # Make sure we're in a sane starting state.
    gdb_test "tstop" "" ""
    gdb_test "tfind none" "" ""
    gdb_delete_tracepoints

    # Set three tracepoints, and make 'em collect memranges
    gdb_test "trace foo" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "memrange limit test: set first tracepoint"

    gdb_trace_setactions "memrange limit test: set first actions" \
	    "" \
	    "collect \$arg" "^$"

    gdb_test "trace bar" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "memrange limit test: set second tracepoint"

    gdb_trace_setactions "memrange limit test: set second actions" \
	    "" \
	    "collect \$arg" "^$"

    gdb_test "trace baz" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "memrange limit test: set third tracepoint"

    gdb_trace_setactions "memrange limit test: set third actions" \
	    "" \
	    "collect \$arg" "^$"

    # Set secret artificial memrange limit to four
    gdb_test "maint packet QTLimit:memrange:4" \
	    "received: .OK." \
	    "memrange limit test: set limit to four"

    # Now sending three memranges should still succeed.
    send_gdb "tstart\n"
    gdb_expect {
	-re "$cr$gdb_prompt" {
	    pass "memrange limit test: send fewer than limit"
	}
	default {
	    fail "memrange limit test: send fewer than limit"
	}
    }

    # Set secret artificial memrange limit to three
    gdb_test "maint packet QTLimit:memrange:3" \
	    "received: .OK." \
	    "memrange limit test: set limit to three"

    # Now sending three memranges should still succeed.
    send_gdb "tstart\n"
    gdb_expect {
	-re "$cr$gdb_prompt" {
	    pass "memrange limit test: send equal to limit"
	}
	default {
	    fail "memrange limit test: send equal to limit"
	}
    }

    # Set secret artificial memrange limit to two
    gdb_test "maint packet QTLimit:memrange:2" \
	    "received: .OK." \
	    "memrange limit test: set limit to two"

    # Now sending three memranges should fail.
    gdb_test "tstart" \
	    ".*\[Ee\]rror.*" \
	    "memrange limit test: send more than limit"

    # Clean up:
    gdb_test "tstop" "" ""
    gdb_test "maint packet QTLimit:memrange:FFFFFFFF" "" ""
}


proc gdb_bytecode_limit_test { } {
    global gdb_prompt
    global cr

    # Make sure we're in a sane starting state.
    gdb_test "tstop" "" ""
    gdb_test "tfind none" "" ""
    gdb_delete_tracepoints

    # Set three tracepoints
    gdb_test "trace foo" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "bytecode limit test: set first tracepoint"

    gdb_trace_setactions "bytecode limit test: set first actions" \
	    "" \
	    "collect x + n" "^$"

    gdb_test "trace bar" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "bytecode limit test: set second tracepoint"

    gdb_trace_setactions "bytecode limit test: set second actions" \
	    "" \
	    "collect y + n" "^$"

    gdb_test "trace baz" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "bytecode limit test: set third tracepoint"

    gdb_trace_setactions "bytecode limit test: set third actions" \
	    "" \
	    "collect z + n" "^$"

    # Set secret artificial bytecode limit to a large number
    gdb_test "maint packet QTLimit:bytecode:400" \
	    "received: .OK." \
	    "bytecode limit test: set limit to large"

    # Now sending three bytecodes should still succeed.
    send_gdb "tstart\n"
    gdb_expect {
	-re "$cr$gdb_prompt" {
	    pass "bytecode limit test: send fewer than limit"
	}
	default {
	    fail "bytecode limit test: send fewer than limit"
	}
    }

    # Set secret artificial bytecode limit to a small number
    gdb_test "maint packet QTLimit:bytecode:40" \
	    "received: .OK." \
	    "bytecode limit test: set limit to small"

    # Now sending three bytecodes should fail.
    gdb_test "tstart" \
	    ".*\[Ee\]rror.*" \
	    "bytecode limit test: send more than limit"


    # Clean up:
    gdb_test "tstop" "" ""
    gdb_test "maint packet QTLimit:bytecode:FFFFFFFF" "" ""
}

proc gdb_trace_limits_tests { } {
    global gdb_prompt

    # 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 supporst trace"
	return 1;
    }

    if [gdb_test "maint packet QTLimit:tp:ffffffff" \
	    "received: .OK." ""] then { 
	pass "This test cannot be run on this target"
	return 1;
    }

    if [gdb_test "maint packet QTLimit:memrange:ffffffff" \
	    "received: .OK." ""] then { 
	pass "This test cannot be run on this target"
	return 1;
    }

    if [gdb_test "maint packet QTLimit:bytecode:ffffffff" \
	    "received: .OK." ""] then { 
	pass "This test cannot be run on this target"
	return;
    }

    gdb_tracepoint_limit_test
    gdb_memrange_limit_test
    gdb_bytecode_limit_test
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $binfile
 
if [target_info exists gdb_stub] {
    gdb_step_for_stub;
}
# Body of test encased in a proc so we can return prematurely.
gdb_trace_limits_tests
