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