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