From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 27760 invoked by alias); 12 Mar 2002 02:47:06 -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 27643 invoked from network); 12 Mar 2002 02:47:00 -0000 Received: from unknown (HELO nevyn.them.org) (128.2.145.6) by sources.redhat.com with SMTP; 12 Mar 2002 02:47:00 -0000 Received: from drow by nevyn.them.org with local (Exim 3.35 #1 (Debian)) id 16kcJb-0000Pj-00; Mon, 11 Mar 2002 21:47:03 -0500 Date: Mon, 11 Mar 2002 18:47:00 -0000 From: Daniel Jacobowitz To: Kevin Buettner Cc: gdb-patches@sources.redhat.com Subject: Re: [PATCH RFA/RFC] Don't use lwp_from_thread() in thread_db_wait() Message-ID: <20020311214703.A462@nevyn.them.org> Mail-Followup-To: Kevin Buettner , gdb-patches@sources.redhat.com References: <1020311234554.ZM20650@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1020311234554.ZM20650@localhost.localdomain> User-Agent: Mutt/1.3.23i X-SW-Source: 2002-03/txt/msg00171.txt.bz2 On Mon, Mar 11, 2002 at 04:45:54PM -0700, Kevin Buettner wrote: > I'm seeing the following failure when I run the gdb testsuite on an > SMP machine (GNU/Linux/x86): > > FAIL: gdb.threads/pthreads.exp: continue to bkpt at common_routine in thread 2 Thank you for investigating this! I've been seeing it somewhat erratically for months, but not had any idea where to start. > thread_db_wait() wants to learn the lwp id of the thread that it > should wait for so that it can ask the lwp layer to wait on the lwp > corresponding to the thread in question. In order to do this, it > calls lwp_from_thread(). lwp_from_thread needs help from the > libthread_db.so to figure this out, so it calls td_ta_map_id2thr(). > BUT, this libthread_db function must interrogate the inferior > process's memory to look at the thread data structures. To do this, > it calls back into gdb, using ps_pdread() to fetch the memory in > question. Eventually, on Linux, ptrace() gets called to actually > fetch the memory. There's another solution that I see. At the top of thread-db is the comment: /* FIXME: There is certainly some room for improvements: - Cache LWP ids. This would be a tremendous performance win, and fix this problem. But that may be a slightly longer term solution. -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer