From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30314 invoked by alias); 16 May 2013 20:30:33 -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 30275 invoked by uid 89); 16 May 2013 20:30:27 -0000 X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 Received: from mailrelay012.isp.belgacom.be (HELO mailrelay012.isp.belgacom.be) (195.238.6.179) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 16 May 2013 20:30:25 +0000 X-Belgacom-Dynamic: yes X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AjgDAPFAlVFtgPhO/2dsb2JhbAANToM+gzy+DwMBgRODEwEBAQMBIwRSBQsLDgoCAiYCAlcGEwmHfaljcpFbgSaNGiwzB4JCgRMDoVOCBYgy Received: from 78.248-128-109.adsl-dyn.isp.belgacom.be (HELO [192.168.1.6]) ([109.128.248.78]) by relay.skynet.be with ESMTP; 16 May 2013 22:30:20 +0200 Subject: Re: RFA: fix gdb_assert caused by 'catch signal ...' and fork From: Philippe Waroquiers To: Pedro Alves Cc: gdb-patches@sourceware.org In-Reply-To: <518D2C4F.8070102@redhat.com> References: <1368136582.30058.7.camel@soleil> <518D2C4F.8070102@redhat.com> Content-Type: text/plain; charset="UTF-8" Date: Thu, 16 May 2013 20:30:00 -0000 Message-ID: <1368736234.2225.30.camel@soleil> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-05/txt/msg00652.txt.bz2 On Fri, 2013-05-10 at 18:20 +0100, Pedro Alves wrote: > Hi Philippe, > > (Please mark newer posts/revisions of patches in new threads > with v2, v3, etc. in the subject line.) Hello, Sorry for the slow update after the fast review. Here is an updated v3 patch, fixing the review comments. > Write only "2013" when we only have a single year. > But, if the file is based on another existing file, we should > preserve the existing file's copyright years in the new file. These files were based on a previous files, so restored 2012-2013. > > + (void) wait(NULL); > Missing space before parens. (do you really need the cast?) space added. I added the cast to explicitely show that the return value is ignored. I might instead not ignore it if you think this is needed/better. I also added a comment in breakpoint.c, to explain why the bp_loc_other locations are not removed. Ok to apply ? Philippe Index: gdb/ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/ChangeLog,v retrieving revision 1.15563 diff -u -p -r1.15563 ChangeLog --- gdb/ChangeLog 16 May 2013 07:39:42 -0000 1.15563 +++ gdb/ChangeLog 16 May 2013 20:19:10 -0000 @@ -1,3 +1,8 @@ +2013-05-16 Philippe Waroquiers + + * breakpoints.c (detach_breakpoints): Do not + detach breakpoints locations with loc_type bp_loc_other. + 2013-05-16 Joel Brobecker * dwarf2read.c (set_cu_language): Add DW_LANG_UPC handling. Index: gdb/breakpoint.c =================================================================== RCS file: /cvs/src/src/gdb/breakpoint.c,v retrieving revision 1.761 diff -u -p -r1.761 breakpoint.c --- gdb/breakpoint.c 7 May 2013 17:04:28 -0000 1.761 +++ gdb/breakpoint.c 16 May 2013 20:19:11 -0000 @@ -3537,6 +3537,15 @@ detach_breakpoints (ptid_t ptid) if (bl->pspace != inf->pspace) continue; + /* This function must physically remove breakpoints locations + from the specified ptid, without modifying the breakpoint + package's state. Locations of type bp_loc_other are only + maintained at GDB side. So, there is no need to remove + these bp_loc_other locations. Moreover, removing these + would modify the breakpoint package's state. */ + if (bl->loc_type == bp_loc_other) + continue; + if (bl->inserted) val |= remove_breakpoint_1 (bl, mark_inserted); } Index: gdb/testsuite/ChangeLog =================================================================== RCS file: /cvs/src/src/gdb/testsuite/ChangeLog,v retrieving revision 1.3661 diff -u -p -r1.3661 ChangeLog --- gdb/testsuite/ChangeLog 16 May 2013 10:13:33 -0000 1.3661 +++ gdb/testsuite/ChangeLog 16 May 2013 20:19:14 -0000 @@ -1,3 +1,8 @@ +2013-05-16 Philippe Waroquiers + + * gdb.base/catch-signal-fork.exp: New file. + * gdb.base/catch-signal-fork.c: New file. + 2013-05-16 Pedro Alves * gdb.ada/complete.exp (test_gdb_no_completion): Fix typo in Index: gdb/testsuite/gdb.base/catch-signal-fork.c =================================================================== RCS file: gdb/testsuite/gdb.base/catch-signal-fork.c diff -N gdb/testsuite/gdb.base/catch-signal-fork.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.base/catch-signal-fork.c 16 May 2013 20:19:14 -0000 @@ -0,0 +1,58 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2012-2013 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ +#include +#include +#include + +void +do_nothing (void) +{ +} + +void +handle (int sig) +{ + do_nothing (); /* handle marker */ +} + +int +main () +{ + int i; + signal (SIGHUP, handle); + + raise (SIGHUP); /* first HUP */ + + signal (SIGCHLD, handle); + for (i = 0; i < 3; i++) /* fork loop */ + { + switch (fork()) + { + case -1: + perror ("fork"); + exit (1); + case 0: + exit (0); + } + (void) wait (NULL); + } + + raise (SIGHUP); /* second HUP */ + + raise (SIGHUP); /* third HUP */ +} + Index: gdb/testsuite/gdb.base/catch-signal-fork.exp =================================================================== RCS file: gdb/testsuite/gdb.base/catch-signal-fork.exp diff -N gdb/testsuite/gdb.base/catch-signal-fork.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb/testsuite/gdb.base/catch-signal-fork.exp 16 May 2013 20:19:14 -0000 @@ -0,0 +1,43 @@ +# Copyright 2012-2013 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +if [target_info exists gdb,nosignals] { + verbose "Skipping catch-signal-fork.exp because of nosignals." + continue +} + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +# Test "catch signal SIGHUP" +gdb_test "catch signal SIGHUP" "Catchpoint .*" +gdb_breakpoint ${srcfile}:[gdb_get_line_number "first HUP"] +gdb_breakpoint ${srcfile}:[gdb_get_line_number "fork loop"] + +gdb_continue_to_breakpoint "first HUP" +gdb_test "continue" "Catchpoint .*" + +# Test interaction with fork. +# This used to cause a gdb_assert in the code detaching the +# breakpoints for the child. +gdb_continue_to_breakpoint "fork loop" +gdb_test "continue" "Catchpoint .* SIGHUP.*" "got SIGHUP after fork"