From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 86141 invoked by alias); 6 Jul 2015 16:15:19 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 86125 invoked by uid 89); 6 Jul 2015 16:15:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 06 Jul 2015 16:15:17 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id 9037696A5; Mon, 6 Jul 2015 16:15:16 +0000 (UTC) Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t66GFEGh004255; Mon, 6 Jul 2015 12:15:15 -0400 Message-ID: <559AA992.2020004@redhat.com> Date: Mon, 06 Jul 2015 16:15:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Luis Machado , gdb-patches@sourceware.org Subject: Re: [PATCH] Fix problems with finishing a dummy function call on simulators. References: <1433862056-18237-1-git-send-email-lgustavo@codesourcery.com> <55772797.802@redhat.com> <55805F52.20805@codesourcery.com> <55816AD5.6020605@redhat.com> <55817569.7060704@codesourcery.com> <5581798B.5080207@redhat.com> <5581D5A9.3070706@codesourcery.com> <559A998E.6010500@redhat.com> <559A9FCE.5070908@codesourcery.com> In-Reply-To: <559A9FCE.5070908@codesourcery.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-07/txt/msg00125.txt.bz2 On 07/06/2015 04:33 PM, Luis Machado wrote: > I'll take a look at it. I suppose this will block the branching? I think so, or at least the release. Broken infcalls seems pretty nasty. > Then again, simply reverting this will still have bad results with some > simulators. True. Might be the fix is simple though. I'm seeing this: (gdb) PASS: gdb.base/shlib-call.exp: step out of shr2 to main (stopped in shr2 epilogue) step main () at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.base/shmain.c:37 37 g = mainshr1(g); (gdb) PASS: gdb.base/shlib-call.exp: step out of shr2 epilogue to main print mainshr1(1) Program received signal SIGSEGV, Segmentation fault. mainshr1 (g=1) at /home/pedro/gdb/mygit/build/../src/gdb/testsuite/gdb.base/shmain.c:29 29 } The program being debugged was signaled while in a function called from GDB. GDB remains in the frame where the signal was received. To change this behavior use "set unwindonsignal on". Evaluation of the expression containing the function (mainshr1) will be abandoned. When the function is done executing, GDB will silently stop. (gdb) FAIL: gdb.base/shlib-call.exp: print mainshr1(1) step The SIGSEGV look scary until one remembers that the dummy breakpoints are placed on the stack, which is non-executable. gdb translates those SIGSEGVs back to SIGTRAPs, provided it knows there's a breakpoint at that address. Looking a bit at breakpoint.c, I notice that a few ->permanent checks seem to have been left behind, and as result we don't actually remove from the target the breakpoints that were placed on top of the permanent breakpoints? This seems to fix the FAILs here, but I didn't run full regression testing. Could you take this, test it on qemu, and and finish it off? --- >From 9cbd03b61441072c71d2076c1deb6766fecf25d2 Mon Sep 17 00:00:00 2001 From: Pedro Alves Date: Mon, 6 Jul 2015 17:04:05 +0100 Subject: [PATCH] remove left behind permanent breakpoint special casing --- gdb/breakpoint.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 1481112..af0d167 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -3892,10 +3892,6 @@ remove_breakpoint_1 (struct bp_location *bl, insertion_state_t is) /* BL is never in moribund_locations by our callers. */ gdb_assert (bl->owner != NULL); - if (bl->permanent) - /* Permanent breakpoints cannot be inserted or removed. */ - return 0; - /* The type of none suggests that owner is actually deleted. This should not ever happen. */ gdb_assert (bl->owner->type != bp_none); @@ -4042,10 +4038,6 @@ remove_breakpoint (struct bp_location *bl, insertion_state_t is) /* BL is never in moribund_locations by our callers. */ gdb_assert (bl->owner != NULL); - if (bl->permanent) - /* Permanent breakpoints cannot be inserted or removed. */ - return 0; - /* The type of none suggests that owner is actually deleted. This should not ever happen. */ gdb_assert (bl->owner->type != bp_none); @@ -4068,8 +4060,7 @@ mark_breakpoints_out (void) struct bp_location *bl, **blp_tmp; ALL_BP_LOCATIONS (bl, blp_tmp) - if (bl->pspace == current_program_space - && !bl->permanent) + if (bl->pspace == current_program_space) bl->inserted = 0; } -- 1.9.3