# Copyright 2011-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/>.

load_lib "trace-support.exp";

if {[skip_shlib_tests]} {
    return 0
}

set testfile "strace"
set srcfile $testfile.c
set binfile $objdir/$subdir/$testfile
set executable $testfile

set libipa $objdir/../gdbserver/libinproctrace.so

set lib_opts debug

if [get_compiler_info ${binfile}] {
    return -1
}

set additional_flags [list debug shlib=$libipa shlib_load "additional_flags=-lust -lurcu-bp" ]

if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $additional_flags] != ""} {
    untested "UST library or headers are not installed"
    return -1
}

proc strace_info_marker { } { with_test_prefix "info_marker" {
    global executable
    global gdb_prompt

    # Restart with a fresh gdb.
    clean_restart $executable
    if ![runto_main] {
	fail "Can't run to main"
	return -1
    }

    # List the markers in program.  They should be disabled.
    gdb_test "info static-tracepoint-markers" \
	".*ust/bar\[\t \]+n\[\t \]+.*ust/bar2\[\t \]+n\[\t \]+.*"

    # List all the thread.  It is expected to get three threads without
    # any errors.
    gdb_test_multiple "info threads 3 2 1" "info threads" {
	-re "3\[ \t\]+Thread .*2\[ \t\]+Thread .*1\[ \t\]+Thread .*${gdb_prompt} $" {
	    pass "info threads"
	}
    }
}}

proc strace_probe_marker { } { with_test_prefix "probe_marker" {
    global executable
    global expect_out
    global gdb_prompt
    global hex

    # Restart with a fresh gdb.
    clean_restart $executable
    if ![runto_main] {
	fail "Can't run to main"
	return -1
    }

    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
    gdb_test "strace -m ust/bar2" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
    # Two trace markers should be enabled.
    gdb_test "info static-tracepoint-markers" "ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*"

    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"

    gdb_test_no_output "tstart"
    gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
    gdb_test_no_output "tstop"

    gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
    gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
    gdb_test "tfind" "Target failed to find requested trace frame\\..*"
}}

proc strace_trace_on_same_addr { type } { with_test_prefix "trace_same_addr $type" {
    global executable
    global expect_out
    global gdb_prompt
    global hex

    # Restart with a fresh gdb.
    clean_restart $executable
    if ![runto_main] {
	fail "Can't run to main"
	return -1
    }

    set marker_bar_addr ""
    set marker_bar2_addr ""

    # List the markers in program.  They should be disabled.
    gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
	-re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
	    set ignore ""

	    regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
		"$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr

	    pass "info static-tracepoint-markers 1"
	}
	-re ".*${gdb_prompt} $" {
	    fail "info static-tracepoint-markers 1"
	}
    }

    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
    gdb_test "strace -m ust/bar2" "Static tracepoint \[0-9\]+ at ${hex}: file.*"
    # Two trace markers should be enabled.
    gdb_test "info static-tracepoint-markers" \
	"ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+y\[\t \]+$hex.*" \
	"info static-tracepoint-markers 2"

    # Set breapoints or tracepoints.
    set test "${type} on marker bar"
    gdb_test_multiple "${type} *${marker_bar_addr}" $test {
	-re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*\r\n$gdb_prompt $" {
	    pass $test
	}
	-re ".*\r\n$gdb_prompt $" {
	    if [string equal $type "ftrace"] {
		# The instruction may be not long enough to set a fast tracepoint.
		# Skip the rest of this test.
		return -1;
	    } else {
		fail $test
	    }
	}
    }
    set test "${type} on marker bar2"
    gdb_test_multiple "${type} *${marker_bar2_addr}" $test {
	-re "\(Fast trace|Trace|Break\)point \[0-9\]+ at ${hex}: file.*" {
	    pass $test
	}
	-re ".*\r\n$gdb_prompt $" {
	    if [string equal $type "ftrace"] {
		# The instruction may be not long enough to set a fast tracepoint.
		# Skip the rest of this test.
		return -1;
	    } else {
		fail $test
	    }
	}
    }

    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"

    if [string equal $type "break"] {
	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to bar"
	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to bar2"
	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
    } else {

	gdb_test_no_output "tstart"
	gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
	gdb_test_no_output "tstop"

	gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
	gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
	gdb_test "tfind" "Found trace frame 2, tracepoint .*" "tfind frame 2"
	gdb_test "tfind" "Found trace frame 3, tracepoint .*" "tfind frame 3"
	gdb_test "tfind" "Target failed to find requested trace frame\\..*"
    }
}}

proc strace_trace_on_diff_addr { } { with_test_prefix "trace_diff_addr" {

    global executable
    global expect_out
    global gdb_prompt
    global hex

    # Restart with a fresh gdb.
    clean_restart $executable
    if ![runto_main] {
	fail "Can't run to main"
	return -1
    }

    set marker_bar_addr ""
    set marker_bar2_addr ""

    # List the markers in program.  They should be disabled.
    gdb_test_multiple "info static-tracepoint-markers" "info static-tracepoint-markers 1" {
	-re ".*ust/bar\[\t \]+n.*${gdb_prompt} $" {
	    set ignore ""

	    regexp "ust/bar\[\t \]+n\[\t \]+($hex) .*ust/bar2\[\t \]+n\[\t \]+($hex) " \
		"$expect_out(0,string)" ignore marker_bar_addr marker_bar2_addr

	    pass "info static-tracepoint-markers 1"
	}
	-re ".*${gdb_prompt} $" {
	    fail "info static-tracepoint-markers 1"
	}
    }

    gdb_test "strace -m ust/bar" "Static tracepoint \[0-9\]+ at ${hex}: file.*"

    gdb_test "info static-tracepoint-markers" \
	"ust/bar\[\t \]+y\[\t \]+$hex .*ust/bar2\[\t \]+n\[\t \]+$hex.*" \
	"info static-tracepoint-markers 2"


    # Set common tracepoint.
    gdb_test "trace *${marker_bar2_addr}" "Tracepoint \[0-9\]+ at ${hex}: file.*"

    gdb_test "break end" "Breakpoint \[0-9\]+ at.*"

    gdb_test_no_output "tstart"
    gdb_test "continue" "Continuing\\.\[ \r\n\]+Breakpoint.*" "continue to end"
    gdb_test_no_output "tstop"

    gdb_test "tfind" "Found trace frame 0, tracepoint .*" "tfind frame 0"
    gdb_test "tfind" "Found trace frame 1, tracepoint .*" "tfind frame 1"
    gdb_test "tfind" "Target failed to find requested trace frame\\..*"
}}

clean_restart $executable

if ![runto_main] {
    fail "Can't run to main to check for trace support"
    return -1
}

# Run it on native x86/x86_64 linux.
if { ![is_remote target]
     && ([istarget "x86_64-*-linux*"] || [istarget "i\[34567\]86-*-linux*"]) } {
    strace_info_marker
    return
}

if { ![gdb_target_supports_trace] } then {
    unsupported "Current target does not support trace"
    return -1;
}

gdb_load_shlibs $libipa

strace_info_marker
strace_probe_marker

strace_trace_on_same_addr "trace"
strace_trace_on_same_addr "ftrace"
strace_trace_on_same_addr "break"
strace_trace_on_diff_addr
