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 09/08/11 15:32, Yao Qi wrote:
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?



single_step_to_signal_handler_p.patch



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
+}
+

Would this be better if it followed the pattern of the skip_hw_breakpoint_tests and skip_hw_watchpoint_tests family of functions in gdb.exp?


So I would rename the function to skip_hw_single_step_tests[1], and test for the existence of gdb,no_hardware_watchpoints in the board info.

[1] Although for the use you are putting it to this is possibly a confusing name.

Thanks,

Matt


-- Matthew Gretton-Dann Principal Engineer, PD Software - Tools, ARM Ltd


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