From owner-freebsd-threads@FreeBSD.ORG Fri Jul 25 19:22:16 2008 Return-Path: Delivered-To: freebsd-threads@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8A8371065677 for ; Fri, 25 Jul 2008 19:22:16 +0000 (UTC) (envelope-from dixit@netapp.com) Received: from mx2.netapp.com (mx2.netapp.com [216.240.18.37]) by mx1.freebsd.org (Postfix) with ESMTP id 97CF18FC16 for ; Fri, 25 Jul 2008 19:22:16 +0000 (UTC) (envelope-from dixit@netapp.com) X-IronPort-AV: E=Sophos;i="4.31,253,1215414000"; d="scan'208";a="18183561" Received: from smtp1.corp.netapp.com ([10.57.156.124]) by mx2-out.netapp.com with ESMTP; 25 Jul 2008 11:53:52 -0700 Received: from dixit-lxp.nane.netapp.com (gpowelltp.nane.netapp.com [10.97.16.81] (may be forged)) by smtp1.corp.netapp.com (8.13.1/8.13.1/NTAP-1.6) with ESMTP id m6PIrpl5000922 for ; Fri, 25 Jul 2008 11:53:52 -0700 (PDT) Message-ID: <488A213F.70105@netapp.com> Date: Fri, 25 Jul 2008 14:53:51 -0400 From: "Dixit, Amol" User-Agent: Thunderbird 2.0.0.16 (X11/20080707) MIME-Version: 1.0 To: freebsd-threads@freebsd.org Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: libpthread and gdbserver X-BeenThere: freebsd-threads@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Threading on FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Jul 2008 19:22:16 -0000 Hi, I am attempting to port gdbserver to freebsd (initially only for x86 & libpthread) and I need some assistance with libpthread and libthread-db. (i) From the code looks like libpthread does not provide any 'thread creation event' symbol/address to be looked up by thread-db. I got around this by adding a dummy function call before _thread_create returned, and that new symbol can be used by thread-db to set thread-creation breakpoint (analogous to _thread_bp_create in libthr). (ii) Next hurdle is the race between thread-db and libpthread. Thread-db tries to access '_thread_list' which is maintained in libpthread and will eventually contain the 'initial thread' but this list is NULL when thread-db tries to access it early. There is a comment before _pthread_create() "It'd be nice to automatically have _libpthread_init called on program execution..." which will be helpful for thread-db. Currently I am stuck here as thread-db cannot enable threading early enough since libpthread is assigning 'initial thread' to '_thread_list' lazily. Am I on the right track on above issues? Any work going on in this area? Really appreciate any help on this project. Thanks, Amol