From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6813 invoked by alias); 11 Jan 2004 21:03:50 -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 6799 invoked from network); 11 Jan 2004 21:03:49 -0000 Received: from unknown (HELO localhost.redhat.com) (65.49.3.48) by sources.redhat.com with SMTP; 11 Jan 2004 21:03:49 -0000 Received: from gnu.org (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id A90D02B8F; Sun, 11 Jan 2004 16:03:32 -0500 (EST) Message-ID: <4001BA24.6090005@gnu.org> Date: Sun, 11 Jan 2004 21:03:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 MIME-Version: 1.0 To: Kevin Buettner Cc: gdb-patches@sources.redhat.com Subject: Re: [RFC] infrun.c: Fix infinite loop caused by breakpoint adjustment References: <1031218195400.ZM17244@localhost.localdomain> Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit X-SW-Source: 2004-01/txt/msg00296.txt.bz2 > Any comments on the patch below? Can this paragraph (or something like it) should be included in the code change? That way the reader will better understand exactly what goes wrong and for which architecture. > It fixes an infinite loop caused by attempting to run to a location > to which it's architecturally impossible to set a breakpoint at. (It's > quite easy to reproduce this problem on FR-V. Just step into some > library code which has been compiled with optimization.) enjoy, Andrew > Since it touches infrun.c, and since a lot of developers are on > holiday at this time of year, I'll wait until January 15 to commit it. > Hopefully, that'll give everyone who'd like to comment on this patch > a chance to look at it. > > Kevin > > * infrun.c (step_into_function): Account for possible breakpoint > adjustment when computing ``stop_func_start''. > > Index: infrun.c > =================================================================== > RCS file: /cvs/src/src/gdb/infrun.c,v > retrieving revision 1.122 > diff -u -p -r1.122 infrun.c > --- infrun.c 25 Nov 2003 16:01:36 -0000 1.122 > +++ infrun.c 18 Dec 2003 19:34:53 -0000 > @@ -2762,6 +2762,18 @@ step_into_function (struct execution_con > && ecs->sal.end < ecs->stop_func_end) > ecs->stop_func_start = ecs->sal.end; > > + /* Architectures which require breakpoint adjustment might not be able > + to place a breakpoint at the computed address. If so, the test > + ``ecs->stop_func_start == stop_pc'' will never succeed. Adjust > + ecs->stop_func_start to an address at which a breakpoint may be > + legitimately placed. */ > + if (gdbarch_adjust_breakpoint_address_p (current_gdbarch)) > + { > + ecs->stop_func_start > + = gdbarch_adjust_breakpoint_address (current_gdbarch, > + ecs->stop_func_start); > + } > + > if (ecs->stop_func_start == stop_pc) > { > /* We are already there: stop now. */ > >