From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24174 invoked by alias); 7 May 2007 00:49:16 -0000 Received: (qmail 23935 invoked by uid 22791); 7 May 2007 00:49:15 -0000 X-Spam-Check-By: sourceware.org Received: from return.false.org (HELO return.false.org) (66.207.162.98) by sourceware.org (qpsmtpd/0.31) with ESMTP; Mon, 07 May 2007 00:49:12 +0000 Received: from return.false.org (localhost [127.0.0.1]) by return.false.org (Postfix) with ESMTP id CC31F4B267 for ; Sun, 6 May 2007 19:49:09 -0500 (CDT) Received: from caradoc.them.org (dsl093-172-095.pit1.dsl.speakeasy.net [66.93.172.95]) by return.false.org (Postfix) with ESMTP id 94F834B262 for ; Sun, 6 May 2007 19:49:09 -0500 (CDT) Received: from drow by caradoc.them.org with local (Exim 4.67) (envelope-from ) id 1HkrPZ-0001rF-8p for gdb-patches@sourceware.org; Sun, 06 May 2007 20:49:09 -0400 Date: Mon, 07 May 2007 00:49:00 -0000 From: Daniel Jacobowitz To: gdb-patches@sourceware.org Subject: [commit] Reduce target_thread_alive calls on GNU/Linux Message-ID: <20070507004909.GA23607@caradoc.them.org> Mail-Followup-To: gdb-patches@sourceware.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.15 (2007-04-09) X-IsSubscribed: yes 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 X-SW-Source: 2007-05/txt/msg00077.txt.bz2 I discussed this FIXME with Mark Kettenis way back in October 2001. The issue it's describing no longer exists, whatever it was - that's trivially easy to see by following the indirect function call into linux_nat_xfer_partial, which handles either LWPs or non-LWPs the same, so we don't need to distinguish them here. This chops the number of ptrace operations for a memory read down quite a bit. Tested x86_64-linux and committed. -- Daniel Jacobowitz CodeSourcery 2007-05-06 Daniel Jacobowitz * linux-thread-db.c: Update some FIXME comments. (thread_db_xfer_partial): Delete. (init_thread_db_ops): Do not set to_xfer_partial. Index: gdb/linux-thread-db.c =================================================================== RCS file: /cvs/src/src/gdb/linux-thread-db.c,v retrieving revision 1.26 diff -u -p -r1.26 linux-thread-db.c --- gdb/linux-thread-db.c 5 Feb 2007 20:02:51 -0000 1.26 +++ gdb/linux-thread-db.c 6 May 2007 15:31:41 -0000 @@ -52,11 +52,6 @@ /* If we're running on GNU/Linux, we must explicitly attach to any new threads. */ -/* FIXME: There is certainly some room for improvements: - - Cache LWP ids. - - Bypass libthread_db when fetching or storing registers for - threads bound to a LWP. */ - /* This module's target vector. */ static struct target_ops thread_db_ops; @@ -486,9 +481,9 @@ enable_thread_event_reporting (void) td_event_addset (&events, TD_CREATE); #ifdef HAVE_GNU_LIBC_VERSION_H - /* FIXME: kettenis/2000-04-23: The event reporting facility is - broken for TD_DEATH events in glibc 2.1.3, so don't enable it for - now. */ + /* The event reporting facility is broken for TD_DEATH events in + glibc 2.1.3, so don't enable it we have glibc but a lower + version. */ libc_version = gnu_get_libc_version (); if (sscanf (libc_version, "%d.%d", &libc_major, &libc_minor) == 2 && (libc_major > 2 || (libc_major == 2 && libc_minor > 1))) @@ -926,31 +921,6 @@ thread_db_wait (ptid_t ptid, struct targ return ptid; } -static LONGEST -thread_db_xfer_partial (struct target_ops *ops, enum target_object object, - const char *annex, gdb_byte *readbuf, - const gdb_byte *writebuf, ULONGEST offset, LONGEST len) -{ - struct cleanup *old_chain = save_inferior_ptid (); - LONGEST xfer; - - if (is_thread (inferior_ptid)) - { - /* FIXME: This seems to be necessary to make sure breakpoints - are removed. */ - if (!target_thread_alive (inferior_ptid)) - inferior_ptid = pid_to_ptid (GET_PID (inferior_ptid)); - else - inferior_ptid = lwp_from_thread (inferior_ptid); - } - - xfer = target_beneath->to_xfer_partial (ops, object, annex, - readbuf, writebuf, offset, len); - - do_cleanups (old_chain); - return xfer; -} - static void thread_db_kill (void) { @@ -1146,7 +1116,6 @@ init_thread_db_ops (void) thread_db_ops.to_detach = thread_db_detach; thread_db_ops.to_resume = thread_db_resume; thread_db_ops.to_wait = thread_db_wait; - thread_db_ops.to_xfer_partial = thread_db_xfer_partial; thread_db_ops.to_kill = thread_db_kill; thread_db_ops.to_create_inferior = thread_db_create_inferior; thread_db_ops.to_post_startup_inferior = thread_db_post_startup_inferior;