From owner-freebsd-toolchain@FreeBSD.ORG Mon Apr 16 17:51:23 2012 Return-Path: Delivered-To: toolchain@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id AEB61106566B for ; Mon, 16 Apr 2012 17:51:23 +0000 (UTC) (envelope-from dmitrym@juniper.net) Received: from exprod7og116.obsmtp.com (exprod7og116.obsmtp.com [64.18.2.219]) by mx1.freebsd.org (Postfix) with ESMTP id 573348FC08 for ; Mon, 16 Apr 2012 17:51:23 +0000 (UTC) Received: from P-EMHUB01-HQ.jnpr.net ([66.129.224.36]) (using TLSv1) by exprod7ob116.postini.com ([64.18.6.12]) with SMTP ID DSNKT4xcFTO78UcIYuX0x0VWtEqMrSntYx7S@postini.com; Mon, 16 Apr 2012 10:51:23 PDT Received: from magenta.juniper.net (172.17.27.123) by P-EMHUB01-HQ.jnpr.net (172.24.192.33) with Microsoft SMTP Server (TLS) id 8.3.213.0; Mon, 16 Apr 2012 10:49:39 -0700 Received: from [172.24.26.191] (dmitrym-lnx.jnpr.net [172.24.26.191]) by magenta.juniper.net (8.11.3/8.11.3) with ESMTP id q3GHnd110736; Mon, 16 Apr 2012 10:49:39 -0700 (PDT) (envelope-from dmitrym@juniper.net) Message-ID: <4F8C5BAF.70507@juniper.net> Date: Mon, 16 Apr 2012 10:49:35 -0700 From: Dmitry Mikulin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:11.0) Gecko/20120329 Thunderbird/11.0.1 MIME-Version: 1.0 To: Konstantin Belousov References: <4F8737E9.6010300@juniper.net> <20120416045551.GZ2358@deviant.kiev.zoral.com.ua> In-Reply-To: <20120416045551.GZ2358@deviant.kiev.zoral.com.ua> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Cc: "toolchain@freebsd.org" Subject: Re: gdb support for follow-fork X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 16 Apr 2012 17:51:23 -0000 > Yes, could you, please, split the patch somewhat ? > It would be much easier to review if you were able to provide relatively > small pieces with descriptions. I don't think I can split it into independent functioning pieces, but I can group the changes logically and explain them in a bit more detail. I'll go by groups of files. 1. These files contain added initialization for a new fbsd target specific file fbsd-nat.c. The same change is applied to every supported target architecture. A call to _initialize_fbsdnat() is added and fbsd-nat.o is added to the make files. gnu/usr.bin/gdb/arch/arm/init.c gnu/usr.bin/gdb/arch/arm/Makefile gnu/usr.bin/gdb/arch/powerpc/init.c gnu/usr.bin/gdb/arch/powerpc/Makefile gnu/usr.bin/gdb/arch/sparc64/init.c gnu/usr.bin/gdb/arch/ia64/init.c gnu/usr.bin/gdb/arch/ia64/Makefile gnu/usr.bin/gdb/arch/mips/init.c gnu/usr.bin/gdb/arch/mips/Makefile gnu/usr.bin/gdb/arch/i386/init.c gnu/usr.bin/gdb/arch/i386/Makefile gnu/usr.bin/gdb/arch/powerpc64/init.c gnu/usr.bin/gdb/arch/powerpc64/Makefile gnu/usr.bin/gdb/arch/amd64/init.c gnu/usr.bin/gdb/arch/amd64/Makefile 2. Added target specific verions of follow_fork() and follow_exec() contrib/gdb/gdb/target.c contrib/gdb/gdb/target.h 3. Added an external interface to check if the thread list is empty. contrib/gdb/gdb/thread.c contrib/gdb/gdb/gdbthread.h 4. Added 2 new interfaces to clear step-resume breakpoint info; switched to target specific follow-fork. contrib/gdb/gdb/infrun.c 5. Fix for a problem re-loading binaries after fork-exec. contrib/gdb/gdb/objfiles.c 6. This is where the 'meat' of the implementation is. fbsd-nat.c is a new file which contains FreeBSD specific functions to handle follow-fork and follow-exec. fbsd_wait() is added to handle stops attributed to fork() and exec() and to translate those stops into target independent info that handle_inferior_event() can understand. fbsd_follow_fork() manages the switch-over from parent to child when gdb is to follow the child or manages a clean detach from the child when gdb is to follow the parent. fbsd_follow_exec() manages the switch-over from one symbol file to another when gdb is stopped after a successful exec() in the inferior. gnu/usr.bin/gdb/libgdb/fbsd-nat.c The changes here deal with the fact that thread state if a process gdb is tracing changes after fork() when we follow the child and exec(). gnu/usr.bin/gdb/libgdb/fbsd-threads.c