[commit] Reduce target_thread_alive calls on GNU/Linux
Daniel Jacobowitz
drow@false.org
Mon May 7 00:49:00 GMT 2007
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 <dan@codesourcery.com>
* 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;
More information about the Gdb-patches
mailing list