| Index: gdb/testsuite/gdb.base/disp-step-syscall.exp
|
| diff --git a/gdb/testsuite/gdb.base/disp-step-syscall.exp b/gdb/testsuite/gdb.base/disp-step-syscall.exp
|
| index 1f23399290680a103bce1810a41a7b317ffe03c3..915cb97476bfc507037a9cf2406fec8269c3efe9 100644
|
| --- a/gdb/testsuite/gdb.base/disp-step-syscall.exp
|
| +++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp
|
| @@ -25,15 +25,14 @@ set syscall_insn ""
|
| # Define the syscall instruction for each target.
|
|
|
| if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
|
| - set syscall_insn "(int|syscall|sysenter)"
|
| + set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]"
|
| } else {
|
| return -1
|
| }
|
|
|
| -proc disp_step_cross_syscall { syscall } {
|
| +proc disp_step_cross_syscall { syscall } { with_test_prefix "$syscall" {
|
| global syscall_insn
|
| global gdb_prompt
|
| - global pf_prefix
|
|
|
| set testfile "disp-step-$syscall"
|
|
|
| @@ -47,9 +46,6 @@ proc disp_step_cross_syscall { syscall } {
|
| return
|
| }
|
|
|
| - set old_pf_prefix $pf_prefix
|
| - lappend pf_prefix "$syscall:"
|
| -
|
| # Delete the breakpoint on main.
|
| gdb_test_no_output "delete break 1"
|
|
|
| @@ -94,7 +90,6 @@ proc disp_step_cross_syscall { syscall } {
|
|
|
| if {$see_syscall_insn == 0} then {
|
| fail "find syscall insn in $syscall"
|
| - set pf_prefix $old_pf_prefix
|
| return -1
|
| }
|
|
|
| @@ -123,16 +118,40 @@ proc disp_step_cross_syscall { syscall } {
|
| gdb_test_no_output "set displaced-stepping on"
|
|
|
| # Check the address of next instruction of syscall.
|
| - gdb_test "stepi" ".*$syscall_insn_next_addr.*" "single step over $syscall"
|
| + if {$syscall == "vfork" && [is_remote target]} {
|
| + setup_kfail server/13796 "*-*-*"
|
| + }
|
| + set test "single step over $syscall"
|
| + gdb_test_multiple "stepi" $test {
|
| + -re "Program terminated with signal SIGILL,.*\r\n$gdb_prompt $" {
|
| + fail $test
|
| + return
|
| + }
|
| + -re "\\\[Inferior .* exited normally\\\].*\r\n$gdb_prompt $" {
|
| + fail $test
|
| + return
|
| + }
|
| + -re "\r\n$gdb_prompt $" {
|
| + pass $test
|
| + }
|
| + }
|
| +
|
| + set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
|
| +
|
| + set test "single step over $syscall final pc"
|
| + if {$syscall_insn_next_addr != 0
|
| + && $syscall_insn_next_addr == $syscall_insn_next_addr_found} {
|
| + pass $test
|
| + } else {
|
| + fail $test
|
| + }
|
|
|
| # Delete breakpoint syscall insns to avoid interference to other syscalls.
|
| gdb_test_no_output "delete $syscall_insn_bp" "delete break $syscall insn"
|
|
|
| gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
|
| "continue to marker ($syscall)"
|
| -
|
| - set pf_prefix $old_pf_prefix
|
| -}
|
| +}}
|
|
|
| disp_step_cross_syscall "fork"
|
| disp_step_cross_syscall "vfork"
|
|
|