This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [patch] Skip kill-after-signal.exp if hw single-step is not supported
- From: Yao Qi <yao at codesourcery dot com>
- To: Mark Kettenis <mark dot kettenis at xs4all dot nl>
- Cc: pedro at codesourcery dot com, gdb-patches at sourceware dot org
- Date: Tue, 09 Aug 2011 22:32:35 +0800
- Subject: Re: [patch] Skip kill-after-signal.exp if hw single-step is not supported
- References: <4E259815.8080001@codesourcery.com> <201107201605.43767.pedro@codesourcery.com> <201107232247.p6NMlwVx029216@glazunov.sibelius.xs4all.nl>
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.