This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] Skip kill-after-signal.exp if hw single-step is not supported


On 07/24/2011 06:47 AM, Mark Kettenis wrote:
>> From: Pedro Alves <pedro@codesourcery.com>
>> Date: Wed, 20 Jul 2011 16:05:43 +0100
>>
>> Other archs !x86, and other kernels/stubs/servers !Linux that
>> can do hardware stepping.  If we're going to have a list, invert
>> the logic of the check, defaulting to running the test, and leaving
>> out archs were we know software stepping is used.  Some targets,
>> like x86/OpenBSD and MacOS, although can hardware step, can't step
>> into a handler.
> 
> Just FYI, it's putting breakpoints into the signal trampoline that is
> the issue, at least on OpenBSD.  Single-stepping should work fine on
> OpenBSD/i386 and OpenBSD/amd64 and all other architectures where it's
> done in hardware.

This is the 2nd version of the patch.  A new predicate,
single_step_to_signal_handler_p, is added in lib/gdb.exp.  In default,
it returns true, and return false on target "arm*-*-* and "mips*-*-*".

I don't find any other tests using "stepi" to step into signal handler,
so I only changed kill-after-signal.exp.

OK for mainline?

-- 
Yao (éå)
gdb/testsuite/

	* lib/gdb.exp (single_step_to_signal_handler_p): New.
	* gdb.base/kill-after-signal.exp: Skip if target supports single step
	to signal handler.

diff --git a/gdb/testsuite/gdb.base/kill-after-signal.exp b/gdb/testsuite/gdb.base/kill-after-signal.exp
index eecad2e..f7086fc 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 <http://www.gnu.org/licenses/>.
 
 set testfile "kill-after-signal"
+
+if { ![single_step_to_signal_handler_p] } {
+    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 ef5ad5c..b967a97 100644
--- a/gdb/testsuite/lib/gdb.exp
+++ b/gdb/testsuite/lib/gdb.exp
@@ -1527,6 +1527,21 @@ proc support_complex_tests {} {
     return $support_complex_tests_saved
 }
 
+# Return 1 if target hardware or OS supports single stepping to single handler,
+# otherwise, return 0.
+
+proc single_step_to_signal_handler_p {} {
+
+    # 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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]