From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25137 invoked by alias); 7 Jun 2004 13:09:51 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 25124 invoked from network); 7 Jun 2004 13:09:49 -0000 Received: from unknown (HELO miranda.se.axis.com) (193.13.178.2) by sourceware.org with SMTP; 7 Jun 2004 13:09:49 -0000 Received: from axis.com (ironmadien.se.axis.com [10.84.130.1]) by miranda.se.axis.com (8.12.9/8.12.9/Debian-5local0.1) with ESMTP id i57D9kdB011025; Mon, 7 Jun 2004 15:09:46 +0200 Message-ID: <40C46919.2060802@axis.com> Date: Mon, 07 Jun 2004 13:09:00 -0000 From: Orjan Friberg Organization: Axis Communications User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040113 MIME-Version: 1.0 To: Andrew Cagney CC: gdb-patches@sources.redhat.com Subject: Re: STEP_SKIPS_DELAY question, sort of References: <40AE38D0.7010204@axis.com> <40AE659A.90207@gnu.org> <40B1BD1B.4090300@axis.com> <40B23BB2.6070001@gnu.org> <40B33399.3090803@axis.com> <40B3B742.50007@gnu.org> <40B465E7.7050702@axis.com> <40C45B95.9050309@axis.com> <40C46290.9000402@axis.com> In-Reply-To: <40C46290.9000402@axis.com> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-06/txt/msg00117.txt.bz2 Orjan Friberg wrote: > > Gah. Please ignore the previous patch (and sorry); what I posted only > works when doing a continue when stopped at the branch instruction. > Doing a step (which leaves us in the delay slot) followed by another > step (or continue for that matter) prematurely inserts the breakpoint. Ok, second try (still concept patch though): the change in proceed is needed for when we resume from the delay slot - in that case we need to single-step again before re-inserting the breakpoint (similar to the MIPS case). The change in handle_inferior_event (and I'll happily agree it's far more questionable) is needed for when we resume at the branch instruction itself. Comments? Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.156 diff -u -p -r1.156 infrun.c --- infrun.c 11 May 2004 23:30:31 -0000 1.156 +++ infrun.c 7 Jun 2004 12:59:10 -0000 @@ -748,6 +748,14 @@ proceed (CORE_ADDR addr, enum target_sig && breakpoint_here_p (read_pc () + 4) && STEP_SKIPS_DELAY (read_pc ())) oneproc = 1; + + /* If we stepped into a delay slot, and the preceding instruction + will be re-executed when resuming, step again before re-inserting + the breakpoint. */ + if (STEP_SKIPS_IN_DELAY_P + && breakpoint_here_p (read_pc () - 2) + && STEP_SKIPS_IN_DELAY (read_pc ())) + oneproc = 1; } else { @@ -1975,7 +1983,17 @@ handle_inferior_event (struct execution_ /* Don't even think about breakpoints if just proceeded over a breakpoint. */ if (stop_signal == TARGET_SIGNAL_TRAP && trap_expected) - bpstat_clear (&stop_bpstat); + { + bpstat_clear (&stop_bpstat); + + /* If we stepped into a delay slot, and the preceding instruction + will be re-executed when resuming, step again before re-inserting + the breakpoint. */ + if (STEP_SKIPS_IN_DELAY_P + && breakpoint_here_p (read_pc () - 2) + && STEP_SKIPS_IN_DELAY (read_pc ())) + ecs->another_trap = 1; + } else { /* See if there is a breakpoint at the current PC. */ -- Orjan Friberg Axis Communications