From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31135 invoked by alias); 6 Apr 2004 16:21:57 -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 31117 invoked from network); 6 Apr 2004 16:21:51 -0000 Received: from unknown (HELO takamaka.act-europe.fr) (142.179.108.108) by sources.redhat.com with SMTP; 6 Apr 2004 16:21:51 -0000 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id 4E6CF47D62; Tue, 6 Apr 2004 09:21:50 -0700 (PDT) Date: Tue, 06 Apr 2004 16:21:00 -0000 From: Joel Brobecker To: Andrew Cagney Cc: gdb-patches@sources.redhat.com Subject: Re: [patch/rfc] Use frame_type for sigtramp test in infrun.c Message-ID: <20040406162150.GT871@gnat.com> References: <200403292338.BAA16799@faui1d.informatik.uni-erlangen.de> <406DD226.1080104@gnu.org> <20040403000855.GF871@gnat.com> <406E0CEA.7040906@gnu.org> <20040406014818.GN871@gnat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="DEueqSqTbz/jWVG1" Content-Disposition: inline In-Reply-To: <20040406014818.GN871@gnat.com> User-Agent: Mutt/1.4i X-SW-Source: 2004-04/txt/msg00145.txt.bz2 --DEueqSqTbz/jWVG1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-length: 205 > 2004-04-05 Joel Brobecker > > * infrun.c (handle_inferior_event): Rely on frame IDs to detect > function calls. Sorry Andrew, here is the patch (sigh). -- Joel --DEueqSqTbz/jWVG1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="infrun.c.diff" Content-length: 1554 Index: infrun.c =================================================================== RCS file: /cvs/src/src/gdb/infrun.c,v retrieving revision 1.145 diff -u -p -r1.145 infrun.c --- infrun.c 2 Apr 2004 22:38:43 -0000 1.145 +++ infrun.c 6 Apr 2004 00:11:59 -0000 @@ -2464,6 +2464,18 @@ process_event_stop_test: return; } + if (step_over_calls == STEP_OVER_UNDEBUGGABLE + && ecs->stop_func_name == NULL) + { + /* There is no symbol, not even a minimal symbol, corresponding + to the address where we just stopped. So we just stepped + inside undebuggable code. Since we want to step over this + kind of code, we keep going until the inferior returns from + the current function. */ + handle_step_into_function (ecs); + return; + } + /* We can't update step_sp every time through the loop, because reading the stack pointer would slow down stepping too much. But we can update it every time we leave the step range. */ @@ -2542,11 +2554,8 @@ process_event_stop_test: return; } - if (((stop_pc == ecs->stop_func_start /* Quick test */ - || in_prologue (stop_pc, ecs->stop_func_start)) - && !IN_SOLIB_RETURN_TRAMPOLINE (stop_pc, ecs->stop_func_name)) - || IN_SOLIB_CALL_TRAMPOLINE (stop_pc, ecs->stop_func_name) - || ecs->stop_func_name == 0) + if (frame_id_eq (get_frame_id (get_prev_frame (get_current_frame ())), + step_frame_id)) { /* It's a subroutine call. */ handle_step_into_function (ecs); --DEueqSqTbz/jWVG1--