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

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.*(4\.2.* in func4.*4\.3.* \<PENDING\>\[\t \]+set_tracepoint|4\.2.* \<PENDING\>\[\t \]+set_tracepoint\r\n4\.3.* in func4).*" \
        "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.
    gdb_test "info trace" \
	"Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+\(|fast \)tracepoint\[ \]+keep y.*PENDING.*set_tracepoint.*" \
	"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.*(1\.2.* in func4.*1\.3.* \<PENDING\>\[\t \]+set_tracepoint|1\.2.* \<PENDING\>\[\t \]+set_tracepoint\r\n1\.3.* in func4).*" \
	"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"
