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 915cb97476bfc507037a9cf2406fec8269c3efe9..654a2c6393eacdd25ccad230605e2f169041f393 100644 |
--- a/gdb/testsuite/gdb.base/disp-step-syscall.exp |
+++ b/gdb/testsuite/gdb.base/disp-step-syscall.exp |
@@ -1,6 +1,6 @@ |
# This testcase is part of GDB, the GNU debugger. |
-# Copyright 2011-2012 Free Software Foundation, Inc. |
+# Copyright 2011-2013 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 |
@@ -26,132 +26,136 @@ set syscall_insn "" |
if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } { |
set syscall_insn "\[ \t\](int|syscall|sysenter)\[ \t\]" |
+} elseif [istarget "arm*-*-linux*"] { |
+ set syscall_insn "\[ \t\](swi|svc)\[ \t\]" |
} else { |
return -1 |
} |
-proc disp_step_cross_syscall { syscall } { with_test_prefix "$syscall" { |
- global syscall_insn |
- global gdb_prompt |
+proc disp_step_cross_syscall { syscall } { |
+ with_test_prefix "$syscall" { |
+ global syscall_insn |
+ global gdb_prompt |
- set testfile "disp-step-$syscall" |
+ set testfile "disp-step-$syscall" |
- if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] { |
- untested ${testfile}.exp |
- return -1 |
- } |
+ if [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c {debug}] { |
+ untested ${testfile}.exp |
+ return -1 |
+ } |
- if { ![runto main] } then { |
- fail "run to main ($syscall)" |
- return |
- } |
+ if { ![runto main] } then { |
+ fail "run to main ($syscall)" |
+ return |
+ } |
- # Delete the breakpoint on main. |
- gdb_test_no_output "delete break 1" |
+ # Delete the breakpoint on main. |
+ gdb_test_no_output "delete break 1" |
- gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*" |
- gdb_test_no_output "set displaced-stepping off" |
+ gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*" |
+ gdb_test_no_output "set displaced-stepping off" |
- set syscall_bp 0 |
- gdb_test_multiple "break $syscall" "break $syscall" { |
- -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { |
- set syscall_bp $expect_out(1,string) |
- pass "break $syscall" |
+ set syscall_bp 0 |
+ gdb_test_multiple "break $syscall" "break $syscall" { |
+ -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { |
+ set syscall_bp $expect_out(1,string) |
+ pass "break $syscall" |
+ } |
} |
- } |
- gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
- "continue to $syscall (1st time)" |
- # Hit the breakpoint on $syscall for the first time. In this time, we will let PLT |
- # resolution done, and the number single steps we will do later will be |
- # reduced. |
+ gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
+ "continue to $syscall (1st time)" |
+ # Hit the breakpoint on $syscall for the first time. In this time, we will let PLT |
+ # resolution done, and the number single steps we will do later will be |
+ # reduced. |
- gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
- "continue to $syscall (2nd time)" |
- # Hit the breakpoint on $syscall for the second time. In this time, the address |
- # of syscall insn and next insn of syscall are recorded. |
+ gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
+ "continue to $syscall (2nd time)" |
+ # Hit the breakpoint on $syscall for the second time. In this time, the address |
+ # of syscall insn and next insn of syscall are recorded. |
- gdb_test "display/i \$pc" ".*" |
+ gdb_test "display/i \$pc" ".*" |
- # Single step until we see sysall insn or we reach the upper bound of loop |
- # iterations. |
- set see_syscall_insn 0 |
+ # Single step until we see sysall insn or we reach the upper bound of loop |
+ # iterations. |
+ set see_syscall_insn 0 |
- for {set i 0} {$i < 1000 && $see_syscall_insn == 0} {incr i} { |
- send_gdb "stepi\n" |
- gdb_expect { |
- -re ".*$syscall_insn.*$gdb_prompt $" { |
- set see_syscall_insn 1 |
+ for {set i 0} {$i < 1000 && $see_syscall_insn == 0} {incr i} { |
+ send_gdb "stepi\n" |
+ gdb_expect { |
+ -re ".*$syscall_insn.*$gdb_prompt $" { |
+ set see_syscall_insn 1 |
+ } |
+ -re ".*$gdb_prompt $" {} |
} |
- -re ".*$gdb_prompt $" {} |
} |
- } |
- if {$see_syscall_insn == 0} then { |
- fail "find syscall insn in $syscall" |
- return -1 |
- } |
+ if {$see_syscall_insn == 0} then { |
+ fail "find syscall insn in $syscall" |
+ return -1 |
+ } |
- set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"] |
- gdb_test "stepi" ".*" "stepi $syscall insn" |
- set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"] |
+ set syscall_insn_addr [get_hexadecimal_valueof "\$pc" "0"] |
+ gdb_test "stepi" ".*" "stepi $syscall insn" |
+ set syscall_insn_next_addr [get_hexadecimal_valueof "\$pc" "0"] |
- gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
- "continue to $syscall (3rd time)" |
+ gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, (.* in |__libc_|)$syscall \\(\\).*" \ |
+ "continue to $syscall (3rd time)" |
- # Hit the breakpoint on $syscall for the third time. In this time, we'll set |
- # breakpoint on the syscall insn we recorded previously, and single step over it. |
+ # Hit the breakpoint on $syscall for the third time. In this time, we'll set |
+ # breakpoint on the syscall insn we recorded previously, and single step over it. |
- set syscall_insn_bp 0 |
- gdb_test_multiple "break \*$syscall_insn_addr" "break on syscall insn" { |
- -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { |
- set syscall_insn_bp $expect_out(1,string) |
- pass "break on syscall insns" |
+ set syscall_insn_bp 0 |
+ gdb_test_multiple "break \*$syscall_insn_addr" "break on syscall insn" { |
+ -re "Breakpoint (\[0-9\]*) at .*$gdb_prompt $" { |
+ set syscall_insn_bp $expect_out(1,string) |
+ pass "break on syscall insns" |
+ } |
} |
- } |
- gdb_test_no_output "delete $syscall_bp" "delete break $syscall" |
+ gdb_test_no_output "delete $syscall_bp" "delete break $syscall" |
- gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, .*" \ |
- "continue to syscall insn $syscall" |
+ gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, .*" \ |
+ "continue to syscall insn $syscall" |
- gdb_test_no_output "set displaced-stepping on" |
+ gdb_test_no_output "set displaced-stepping on" |
- # Check the address of next instruction of 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 |
+ # Check the address of next instruction of syscall. |
+ if {$syscall == "vfork" && [is_remote target]} { |
+ setup_kfail server/13796 "*-*-*" |
} |
- -re "\\\[Inferior .* exited normally\\\].*\r\n$gdb_prompt $" { |
- fail $test |
- return |
+ 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 |
+ } |
} |
- -re "\r\n$gdb_prompt $" { |
+ |
+ 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 |
} |
- } |
- set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"] |
+ # Delete breakpoint syscall insns to avoid interference to other syscalls. |
+ gdb_test_no_output "delete $syscall_insn_bp" "delete break $syscall insn" |
- 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 |
+ gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \ |
+ "continue to marker ($syscall)" |
} |
- |
- # 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)" |
-}} |
+} |
disp_step_cross_syscall "fork" |
disp_step_cross_syscall "vfork" |