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

# This file is part of the gdb testsuite.

# Test i386 displaced stepping.


if { ![is_x86_like_target] } then {
    verbose "Skipping x86 displaced stepping tests."
    return
}

standard_testfile .S

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

gdb_test "set displaced-stepping on" ""
gdb_test "show displaced-stepping" ".* displaced stepping .* is on.*"

if ![runto_main] then {
    return 0
}

##########################################

# Test call/ret.

gdb_test "break test_call" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_call"
gdb_test "break test_call_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_call_end"

gdb_test "break test_ret" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_ret"
gdb_test "break test_ret_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_ret_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_call ().*" \
    "continue to test_call"
gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_call_end ().*" \
    "continue to test_call_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_ret ().*" \
    "continue to test_ret"
gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_ret_end ().*" \
    "continue to test_ret_end"

##########################################

# Absolute jump with leading prefixes.
# These don't occur in normal code, but gdb should still DTRT.

gdb_test "break test_prefixed_abs_jump" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_prefixed_abs_jump"
gdb_test "break test_prefixed_abs_jump_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_prefixed_abs_jump_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_prefixed_abs_jump ().*" \
    "continue to test_prefixed_abs_jump"
gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_prefixed_abs_jump_end ().*" \
    "continue to test_prefixed_abs_jump_end"

##########################################

# Test syscall.

gdb_test "break test_syscall" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_syscall"
gdb_test "break test_syscall_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_syscall_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_syscall ().*" \
    "continue to test_syscall"
gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_syscall_end ().*" \
    "continue to test_syscall_end"

##########################################

# Test prefixed syscall.
# These don't occur in normal code, but gdb should still DTRT.

gdb_test "break test_prefixed_syscall" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_prefixed_syscall"
gdb_test "break test_prefixed_syscall_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_prefixed_syscall_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_prefixed_syscall ().*" \
    "continue to test_prefixed_syscall"
gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_prefixed_syscall_end ().*" \
    "continue to test_prefixed_syscall_end"

##########################################

# int3 (with prefixes)
# These don't occur in normal code, but gdb should still DTRT.

gdb_test "break test_int3" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_int3"
gdb_test "break test_int3_end" \
    "Breakpoint.*at.* file .*$srcfile, line.*" \
    "break test_int3_end"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_int3 ().*" \
    "continue to test_int3"

gdb_test "continue" \
    "Continuing.*Breakpoint.*, test_int3_end ().*" \
    "continue to test_int3_end"

##########################################

# Done, run program to exit.

gdb_continue_to_end "i386-disp-step"
