From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30589 invoked by alias); 29 Apr 2006 23:14:42 -0000 Received: (qmail 30581 invoked by uid 22791); 29 Apr 2006 23:14:41 -0000 X-Spam-Check-By: sourceware.org Received: from sibelius.xs4all.nl (HELO sibelius.xs4all.nl) (82.92.89.47) by sourceware.org (qpsmtpd/0.31) with ESMTP; Sat, 29 Apr 2006 23:14:38 +0000 Received: from elgar.sibelius.xs4all.nl (root@elgar.sibelius.xs4all.nl [192.168.0.2]) by sibelius.xs4all.nl (8.13.4/8.13.4) with ESMTP id k3TNE4Dv013092; Sun, 30 Apr 2006 01:14:04 +0200 (CEST) Received: from elgar.sibelius.xs4all.nl (kettenis@localhost.sibelius.xs4all.nl [127.0.0.1]) by elgar.sibelius.xs4all.nl (8.13.6/8.13.6) with ESMTP id k3TNE3vZ031753; Sun, 30 Apr 2006 01:14:03 +0200 (CEST) Received: (from kettenis@localhost) by elgar.sibelius.xs4all.nl (8.13.6/8.13.6/Submit) id k3TNE3uH012648; Sun, 30 Apr 2006 01:14:03 +0200 (CEST) Date: Sun, 30 Apr 2006 03:20:00 -0000 Message-Id: <200604292314.k3TNE3uH012648@elgar.sibelius.xs4all.nl> From: Mark Kettenis To: drow@false.org, gdb-patches@sourceware.org In-reply-to: <200604252154.k3PLscQe005675@elgar.sibelius.xs4all.nl> (message from Mark Kettenis on Tue, 25 Apr 2006 23:54:38 +0200 (CEST)) Subject: Re: single-step breakpoints References: <200604252039.k3PKdaZ5020227@elgar.sibelius.xs4all.nl> <20060425210200.GA1153@nevyn.them.org> <200604252154.k3PLscQe005675@elgar.sibelius.xs4all.nl> Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2006-04/txt/msg00398.txt.bz2 > Date: Tue, 25 Apr 2006 23:54:38 +0200 (CEST) > From: Mark Kettenis > > > Date: Tue, 25 Apr 2006 17:02:00 -0400 > > From: Daniel Jacobowitz > > > > On Tue, Apr 25, 2006 at 10:39:36PM +0200, Mark Kettenis wrote: > > > Hi Daniel, > > > > > > There a slight problem with insert_single_step_breakpoint() and > > > remove_single_step_breakpoints(). On OpenBSD, inserting a breakpoint > > > into the kernel-provided signal trampoline, may fail. Unfortunately, > > > the caller of insert_single_step_breakpoint() never notices this, and > > > calls remove_single_step_breakpoints() to remove the breakpoints. > > > Unfortunately that makes us hit the gdb_assert() in there. > > > > > > This patch makes us avoid this while still making an attempt to catch > > > misuse of the interface. > > > > Hmm - this is also true on some GNU/Linux targets, although none that > > use software single step (yet - though I think I know how to trigger it > > on ARM, some kernel fixes would also be needed). > > > > My question is, is there something more useful we could be doing? > > If the single step breakpoint fails, then continuing will make us lose > > control. Maybe it should be an error(). > > That may not be such a bad idea. But we'll need to adjust > gdb.base/sigbpt.exp since it will end up in an infinite loop trying to > step the target. > > I'll look a bit more into it later this week. Need to get some sleep now. Yes, erroring out is defenitely a better approach than warn and have things run away. Here's a patch and some adjustments to the testsuite to prevent the tests from going into an infinite loop. ok? Index: ChangeLog from Mark Kettenis * breakpoint.c (insert_single_step_breakpoint): Make a failure to insert a single-step breakpoint an error instead of a warning. * breakpoint.c (remove_single_step_breakpoints): Bail out early if no breakpoints are inserted. Index: breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.225 diff -u -p -r1.225 breakpoint.c --- breakpoint.c 18 Apr 2006 19:20:06 -0000 1.225 +++ breakpoint.c 29 Apr 2006 23:11:12 -0000 @@ -7717,7 +7717,7 @@ insert_single_step_breakpoint (CORE_ADDR *bpt_p = deprecated_insert_raw_breakpoint (next_pc); if (*bpt_p == NULL) - warning (_("Could not insert single-step breakpoint at 0x%s"), + error (_("Could not insert single-step breakpoint at 0x%s"), paddr_nz (next_pc)); } Index: testsuite/ChangeLog from Mark Kettenis * gdb.base/sigbpt.exp (stepi_out): FAIL when inserting a single-step breakpoint fails; make this a KFAIL on sparc*-*-openbsd*. * gdb.base/siginfo.exp: Likewise. * gdb.base/sigstep.exp (advance, advancei): Likewise. Index: testsuite/gdb.base/sigbpt.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/sigbpt.exp,v retrieving revision 1.5 diff -u -p -r1.5 sigbpt.exp --- testsuite/gdb.base/sigbpt.exp 27 Apr 2005 16:35:14 -0000 1.5 +++ testsuite/gdb.base/sigbpt.exp 29 Apr 2006 23:11:21 -0000 @@ -166,6 +166,10 @@ proc stepi_out { name args } { # trampoline, and back to the instruction that faulted. set test "${name}; stepi out of handler" gdb_test_multiple "stepi" "$test" { + -re "Could not insert single-step breakpoint.*$gdb_prompt $" { + setup_kfail "sparc*-*-openbsd*" gdb/1736 + fail "$test (could not insert single-step breakpoint)" + } -re "keeper.*$gdb_prompt $" { send_gdb "stepi\n" exp_continue Index: testsuite/gdb.base/siginfo.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/siginfo.exp,v retrieving revision 1.2 diff -u -p -r1.2 siginfo.exp --- testsuite/gdb.base/siginfo.exp 23 Apr 2004 16:44:25 -0000 1.2 +++ testsuite/gdb.base/siginfo.exp 29 Apr 2006 23:11:21 -0000 @@ -75,6 +75,10 @@ gdb_expect_list "backtrace for nexti" ". # Check that GDB can step the inferior back to main set test "step out of handler" gdb_test_multiple "step" "${test}" { + -re "Could not insert single-step breakpoint.*$gdb_prompt $" { + setup_kfail sparc*-*-openbsd* gdb/1736 + fail "$test (could not insert single-step breakpoint)" + } -re "done = 1;.*${gdb_prompt} $" { send_gdb "$i\n" exp_continue Index: testsuite/gdb.base/sigstep.exp =================================================================== RCS file: /cvs/src/src/gdb/testsuite/gdb.base/sigstep.exp,v retrieving revision 1.10 diff -u -p -r1.10 sigstep.exp --- testsuite/gdb.base/sigstep.exp 18 Jul 2005 19:23:54 -0000 1.10 +++ testsuite/gdb.base/sigstep.exp 29 Apr 2006 23:11:22 -0000 @@ -79,6 +79,10 @@ proc advance { i } { set test "$prefix; leave handler" gdb_test_multiple "$i" "${test}" { + -re "Could not insert single-step breakpoint.*$gdb_prompt $" { + setup_kfail "sparc*-*-openbsd*" gdb/1736 + fail "$test (could not insert single-step breakpoint)" + } -re "done = 1;.*${gdb_prompt} $" { send_gdb "$i\n" exp_continue -continue_timer @@ -122,6 +126,10 @@ proc advancei { i } { fail "$test (could not set breakpoint)" return } + -re "Could not insert single-step breakpoint.*$gdb_prompt $" { + setup_kfail "sparc*-*-openbsd*" gdb/1736 + fail "$test (could not insert single-step breakpoint)" + } -re "done = 1;.*${gdb_prompt} $" { send_gdb "$i\n" exp_continue -continue_timer