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

standard_testfile ".S"

if { ![istarget "x86_64-*-*"] || ![is_lp64_target] } {
    verbose "Skipping $testfile.exp"
    return
}

if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
    return -1
}

# Helper procedure to go to probe NAME

proc goto_probe { name } {
    global decimal hex

    gdb_test "break -pstap $name" "Breakpoint $decimal at $hex"
    gdb_test "continue" "Breakpoint $decimal, main \\(\\) at .*\r\n.*STAP_PROBE1.*${name},.*\\)"
}

# Helper procedure to test the probe's argument

proc test_probe_value { value } {
    gdb_test "print \$_probe_argc" "= 1"
    gdb_test "print \$_probe_arg0" "= $value"
}

if { ![runto_main] } {
    return -1
}

# Name and expected value for each probe.
set probe_names_and_values {
    { "log_neg" "0" }
    { "minus" "-7" }
    { "bit_neg" "-23" }

    { "plus1" "4" }
    { "plus2" "135" }
    { "plus3" "171" }

    { "and" "128" }
    { "or" "12" }
}

foreach probe_info $probe_names_and_values {
    set name [lindex $probe_info 0]
    set value [lindex $probe_info 1]
    with_test_prefix $name {
	goto_probe $name
	test_probe_value $value
    }
}
