# Copyright 2011-2013 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
}

standard_testfile
set libfile1 "change-loc-1"
set libfile2 "change-loc-2"
set executable $testfile
set libsrc1 $srcdir/$subdir/$libfile1.c
set libsrc2 $srcdir/$subdir/$libfile2.c
set lib_sl1 [standard_output_file $libfile1.sl]
set lib_sl2 [standard_output_file $libfile2.sl]

set lib_opts debug

if [get_compiler_info] {
    return -1
}

# Some targets have leading underscores on assembly symbols.
set additional_flags [list debug shlib=$lib_sl1 shlib_load [gdb_target_symbol_prefix_flags]]

if { [gdb_compile_shlib $libsrc1 $lib_sl1 $lib_opts] != ""
     || [gdb_compile_shlib $libsrc2 $lib_sl2 $lib_opts] != ""
     || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $additional_flags] != ""} {
    untested "Could not compile either $libsrc1 or $srcdir/$subdir/$srcfile."
    return -1
}

clean_restart $executable

gdb_load_shlibs $lib_sl1
gdb_load_shlibs $lib_sl2

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

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

if [is_amd64_regs_target] {
    set pcreg "rip"
} elseif [is_x86_like_target] {
    set pcreg "eip"
} else {
    set pcreg "pc"
}


# Set tracepoint during tracing experiment.

proc tracepoint_change_loc_1 { trace_type } {
    with_test_prefix "1 $trace_type" {
	global testfile
	global srcfile
	global pcreg
	global gdb_prompt

	clean_restart ${testfile}
	if ![runto_main] {
	    fail "Can't run to main"
	    return -1
	}
	gdb_test_no_output "delete break 1"

	# Set a tracepoint we'll never meet.  Just to avoid the
	# complain after type `tstart' later.
	gdb_test "next" ".*"
	gdb_test "trace main" \
	    "Tracepoint \[0-9\] at.* file .*$srcfile, line.*" \
	    "set tracepoint on main"

	gdb_test "break marker" \
	    "Breakpoint.*at.* file .*$srcfile, line.*" \
	    "breakpoint on marker"

	gdb_test_no_output "tstart"

	gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
	    "continue to marker 1"
	# Set a tracepoint during tracing.
	set test "set tracepoint on set_tracepoint"
	gdb_test_multiple "${trace_type} set_tracepoint" $test {
	    -re "Target returns error code .* too far .*$gdb_prompt $" {
		if [string equal $trace_type "ftrace"] {
		    # The target was unable to install the fast tracepoint
		    # (e.g., jump pad too far from tracepoint).
		    pass "$test (too far)"
		} else {
		    fail $test
		}
	    }
	    -re "\r\n$gdb_prompt $" {
		pass $test
	    }
	}

	gdb_trace_setactions "set action for tracepoint" "" \
	    "collect \$$pcreg" "^$"

	# tracepoint has two locations after shlib change-loc-1 is loaded.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*4\.1.* in func4.*4\.2.* in func4.*" \
	    "tracepoint with two locations"

	set test "continue to marker 2"
	gdb_test_multiple "continue" $test {
	    -re "Target returns error code .* too far .*$gdb_prompt $" {
		if [string equal $trace_type "ftrace"] {
		    # Expected if the target was unable to install the
		    # fast tracepoint (e.g., jump pad too far from
		    # tracepoint).
		    pass "$test (too far)"
		    # Skip the rest of the tests.
		    return
		} else {
		    fail "continue to marker 2"
		    fail $test
		}

	    }
	    -re ".*Breakpoint.*marker.*at.*$srcfile.*$gdb_prompt $" {
		pass "continue to marker 2"
	    }
	}

	# tracepoint has three locations after shlib change-loc-2 is
	# loaded.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*4\.1.* in func4.*4\.2.* in func4.*4\.3.* in func4 .*" \
	    "tracepoint with three locations"

	gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
	    "continue to marker 3"

	# shlib is unloaded, there are still three locations, but one
	# is pending.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*
4\.1.* in func4.*\tinstalled on target\r\n(4\.2.* in func4.*\tinstalled on target\r\n4\.3.* \<PENDING\>\[\t \]+set_tracepoint|4\.2.* \<PENDING\>\[\t \]+set_tracepoint.*4\.3.* in func4.*\tinstalled on target).*" \
	    "tracepoint with two locations (unload)"

	gdb_test_no_output "tstop"

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

# Set pending tracepoint.

proc tracepoint_change_loc_2 { trace_type } {
    with_test_prefix "2 $trace_type" {
	global srcdir
	global srcfile
	global subdir
	global pcreg
	global binfile
	global gdb_prompt

	gdb_exit
	gdb_start
	gdb_reinitialize_dir $srcdir/$subdir

	gdb_test_multiple "${trace_type} set_tracepoint" "set pending tracepoint" {
	    -re ".*Make \(|fast \)tracepoint pending.*y or \\\[n\\\]. $" {
		gdb_test "y" "\(Fast t|T\)racepoint.*set_tracepoint.*pending." "set pending tracepoint"
	    }
	}

	gdb_trace_setactions "set action for tracepoint" "" \
	    "collect \$$pcreg" "^$"

	# tracepoint has no location information now.  Make sure nothing
	# else is displayed.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*PENDING.*set_tracepoint\r\n\[\t \]+collect \\$$pcreg\r" \
	    "single pending tracepoint info (without symbols)"

	gdb_load ${binfile}
	# tracepoint has one location after executable is loaded.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*func4.*" \
	    "tracepoint with one location"

	set main_bp 0
	gdb_test_multiple "break main" "set breakpoint on main" {
	    -re "Breakpoint (\[0-9\]*) at .*, line.*$gdb_prompt $" {
		set main_bp $expect_out(1,string)
	    }
	}
	gdb_run_cmd

	gdb_test "" \
	    ".*Breakpoint.*main.*at.*$srcfile.*" \
	    "run to main"
	gdb_test_no_output "delete break $main_bp"

	# tracepoint has two locations after shlib change-loc-1 is loaded.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*1\.1.* in func4.*1\.2.* in func4.*" \
	    "tracepoint with two locations"

	gdb_test "break marker" "Breakpoint.*at.* file .*$srcfile, line.*" \
	    "breakpoint on marker"

	# tracepoint with two locations will be downloaded and installed.
	set test "tstart"
	gdb_test_multiple "tstart" $test {
	    -re "^tstart\r\n$gdb_prompt $" {
		pass "tstart"
	    }
	    -re "Target returns error code .* too far .*$gdb_prompt $" {
		if [string equal $trace_type "ftrace"] {
		    # The target was unable to install the fast tracepoint
		    # (e.g., jump pad too far from tracepoint).
		    pass "$test (too far)"
		    # Skip the rest of the tests.
		    return
		} else {
		    fail $test
		}
	    }
	}

	gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
	    "continue to marker 1"

	gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
	    "continue to marker 2"

	# tracepoint has three locations after shlib change-loc-2 is loaded.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*1\.1.* in func4.*1\.2.* in func4.*1\.3.* in func4 .*" \
	    "tracepoint with three locations"

	gdb_test "continue" ".*Breakpoint.*marker.*at.*$srcfile.*" \
	    "continue to marker 3"

	# shlib is unloaded, there are still three locations, but one is pending.
	gdb_test "info trace" \
	    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*\<MULTIPLE\>.*
1\.1.* in func4.*\tinstalled on target\r\n(1\.2.* in func4.*\tinstalled on target\r\n1\.3.* \<PENDING\>\[\t \]+set_tracepoint|1\.2.* \<PENDING\>\[\t \]+set_tracepoint\r\n1\.3.* in func4.*\tinstalled on target).*" \
	    "tracepoint with two locations (unload)"

	gdb_test_no_output "tstop"

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

tracepoint_change_loc_1 "trace"
tracepoint_change_loc_2 "trace"

# Re-compile test case with IPA.
set libipa [get_in_proc_agent]
gdb_load_shlibs $libipa

if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile executable \
	  [list debug nowarnings shlib=$libipa shlib=$lib_sl1 shlib_load] ] != "" } {
    untested change-loc.exp
    return -1
}

tracepoint_change_loc_1 "ftrace"
tracepoint_change_loc_2 "ftrace"
