From ab254057b844245b5db8d8faa397c1f69f48c889 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Sun, 18 Sep 2011 02:36:27 +0000 Subject: [PATCH] gdb/testsuite/ * lib/gdb.exp (can_single_step_to_signal_handler): New. * gdb.base/kill-after-signal.exp: Call it. Skip if target doesn't support single step to signal handler. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/gdb.base/kill-after-signal.exp | 6 ++++++ gdb/testsuite/lib/gdb.exp | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e48d7c2..132351a 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2011-09-17 Yao Qi + * lib/gdb.exp (can_single_step_to_signal_handler): New. + * gdb.base/kill-after-signal.exp: Call it. Skip if target doesn't + support single step to signal handler. + +2011-09-17 Yao Qi + * gdb.base/disp-step-fork.c: New. * gdb.base/disp-step-syscall.exp: New. * gdb.base/disp-step-vfork.c: New. diff --git a/gdb/testsuite/gdb.base/kill-after-signal.exp b/gdb/testsuite/gdb.base/kill-after-signal.exp index eecad2e..8bb0659 100644 --- a/gdb/testsuite/gdb.base/kill-after-signal.exp +++ b/gdb/testsuite/gdb.base/kill-after-signal.exp @@ -14,6 +14,12 @@ # along with this program. If not, see . set testfile "kill-after-signal" + +if { ![can_single_step_to_signal_handler] } { + untested ${testfile}.exp + return +} + if [prepare_for_testing ${testfile}.exp ${testfile}] { return -1 } diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index b22e322..1476c19 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1527,6 +1527,22 @@ proc support_complex_tests {} { return $support_complex_tests_saved } +# Return 1 if target hardware or OS supports single stepping to signal +# handler, otherwise, return 0. + +proc can_single_step_to_signal_handler {} { + + # Targets don't have hardware single step. On these targets, when + # a signal is delivered during software single step, gdb is unable + # to determine the next instruction addresses, because start of signal + # handler is one of them. + if { [istarget "arm*-*-*"] || [istarget "mips*-*-*"] } { + return 0 + } + + return 1 +} + # Return 1 if target is ILP32. # This cannot be decided simply from looking at the target string, # as it might depend on externally passed compiler options like -m64. -- 2.7.4