This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

gdb and binutils branch master updated. 44ee4a526db6160b302417127e736b73fc00ee87


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "gdb and binutils".

The branch, master has been updated
       via  44ee4a526db6160b302417127e736b73fc00ee87 (commit)
       via  ab970af19746364a4f236bebc238ebb036adc898 (commit)
       via  e8032dde10b743253125d7defb5f5503b21c1d26 (commit)
       via  6dc54d9124e8ef9ef3611e0ef3eefef5dcd87ee4 (commit)
      from  36728e82bd9bb5b472eb569dc11b8f2296d5e3df (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=44ee4a526db6160b302417127e736b73fc00ee87

commit 44ee4a526db6160b302417127e736b73fc00ee87
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Oct 15 22:48:35 2014 +0100

    DEC threads: Simplify updating the thread list
    
    Seems to me that we can simplify DEC thread's
    target_update_thread_list implementation, avoiding the need to build
    the array of GDB threads.
    
    I have no way to test this, but then again support for Tru64 is about
    to be removed.
    
    Pushing anyway to have the last version in git be the cleanest one
    should start from, if this file turns out to be resurrected in the
    future.
    
    gdb/
    2014-10-15  Pedro Alves  <palves@redhat.com>
    
    	* dec-thread.c (dec_thread_count_gdb_threads)
    	(dec_thread_add_gdb_thread): Delete.
    	(dec_thread_update_thread_list): Delete.
    	(dec_thread_find_new_threads): Rename to ...
    	(dec_thread_update_thread_list): ... this.  Delete GDB-size
    	threads that are no longer found in dec_thread_list.
    	(resync_thread_list): Delete.
    	(dec_thread_wait): Call dec_thread_update_thread_list instead of
    	resync_thread_list.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=ab970af19746364a4f236bebc238ebb036adc898

commit ab970af19746364a4f236bebc238ebb036adc898
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Oct 15 22:44:00 2014 +0100

    remote: get rid of all the T packets when syncing the thread list
    
    This commit avoids the prune_threads call in the remote target's
    target_update_thread_list's implementation, eliminating all the "thread
    alive" RSP traffic (one packet per thread) whenever we fetch the
    thread list.
    
    IOW, this:
    
     Sending packet: $Tp2141.2150#82...Packet received: OK
     Sending packet: $Tp2141.214f#b7...Packet received: OK
     Sending packet: $Tp2141.2141#82...Packet received: OK
     ... more T packets; it's one per previously known live thread ...
     Sending packet: $qXfer:threads:read::0,fff#03...Packet received: l<threads>\n<thread id="p2141.2141" core="2"/>\n<thread id="p2141.214f" core="1"/>\n<thread id="p2141.2150" core="2"/>\n</threads>\n
    
    Becomes:
    
     Sending packet: $qXfer:threads:read::0,fff#03...Packet received: l<threads>\n<thread id="p2141.2141" core="2"/>\n<thread id="p2141.214f" core="1"/>\n<thread id="p2141.2150" core="2"/>\n</threads>\n
    
    Tested on x86_64 Fedora 20, native gdbserver:
      - tests the qXfer:threads:read method.
    
    Tested on x86_64 Fedora 20, native gdbserver with qXfer:threads:read
    force-disabled in gdbserver:
      - So that GDB falls back to the qfThreadInfo/qsThreadInfo method.
    
    And also manually smoked tested force disabling both
    qXfer:threads:read and qfThreadInfo/qsThreadInfo in gdbserver.
    
    gdb/
    2014-10-15  Pedro Alves  <palves@redhat.com>
    
    	* gdbthread.h (ALL_NON_EXITED_THREADS_SAFE): New macro.
    	* remote.c (remote_update_thread_list): Skip calling prune_threads
    	if any thread listing method is supported, and instead walk over
    	the set of remote threads listed, deleting those that are not
    	found in GDB's thread list.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=e8032dde10b743253125d7defb5f5503b21c1d26

commit e8032dde10b743253125d7defb5f5503b21c1d26
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Oct 15 22:44:00 2014 +0100

    Push pruning old threads down to the target
    
    When GDB wants to sync the thread list with the target's (e.g., due to
    "info threads"), it calls update_thread_list:
    
     update_thread_list (void)
     {
       prune_threads ();
       target_find_new_threads ();
       update_threads_executing ();
     }
    
    And then prune_threads does:
    
     prune_threads (void)
     {
       struct thread_info *tp, *next;
    
       for (tp = thread_list; tp; tp = next)
         {
           next = tp->next;
           if (!thread_alive (tp))
    	 delete_thread (tp->ptid);
         }
     }
    
    Calling thread_live on each thread one by one is expensive.
    
    E.g., on Linux, it ends up doing kill(SIG0) once for each thread.  Not
    a big deal, but still a bunch of syscalls...
    
    With the remote target, it's cumbersome.  That thread_alive call ends
    up generating one T packet per thread:
    
     Sending packet: $Tp2141.2150#82...Packet received: OK
     Sending packet: $Tp2141.214f#b7...Packet received: OK
     Sending packet: $Tp2141.2141#82...Packet received: OK
     Sending packet: $qXfer:threads:read::0,fff#03...Packet received: l<threads>\n<thread id="p2141.2141" core="2"/>\n<thread id="p2141.214f" core="1"/>\n<thread id="p2141.2150" core="2"/>\n</threads>\n
    
    That seems a bit silly when target_find_new_threads method
    implementations will always fetch the whole current set of target
    threads, and then add those that are not in GDB's thread list, to
    GDB's thread list.
    
    This patch thus pushes down the responsibility of pruning dead threads
    to the target_find_new_threads method instead, so a target may
    implement pruning dead threads however it wants.
    
    Once we do that, target_find_new_threads becomes a misnomer, so the
    patch renames it to target_update_thread_list.
    
    The patch doesn't attempt to do any optimization to any target yet.
    It simply exports prune_threads, and makes all implementations of
    target_update_thread_list call that.  It's meant to be a no-op.
    
    gdb/
    2014-10-15  Pedro Alves  <palves@redhat.com>
    
    	* ada-tasks.c (print_ada_task_info, task_command_1): Adjust.
    	* bsd-uthread.c (bsd_uthread_find_new_threads): Rename to ...
    	(bsd_uthread_update_thread_list): ... this.  Call prune_threads.
    	(bsd_uthread_target): Adjust.
    	* corelow.c (core_open): Adjust.
    	* dec-thread.c (dec_thread_find_new_threads): Update comment.
    	(dec_thread_update_thread_list): New function.
    	(init_dec_thread_ops): Adjust.
    	* gdbthread.h (prune_threads): New declaration.
    	* linux-thread-db.c (thread_db_find_new_threads): Rename to ...
    	(thread_db_update_thread_list): ... this.  Call prune_threads.
    	(init_thread_db_ops): Adjust.
    	* nto-procfs.c (procfs_find_new_threads): Rename to ...
    	(procfs_update_thread_list): ... this.  Call prune_threads.
    	(procfs_attach, procfs_create_inferior, init_procfs_targets):
    	Adjust.
    	* obsd-nat.c (obsd_find_new_threads): Rename to ...
    	(obsd_update_thread_list): ... this.  Call prune_threads.
    	(obsd_add_target): Adjust.
    	* procfs.c (procfs_target): Adjust.
    	(procfs_notice_thread): Update comment.
    	(procfs_find_new_threads): Rename to ...
    	(procfs_update_thread_list): ... this.  Call prune_threads.
    	* ravenscar-thread.c (ravenscar_update_inferior_ptid): Update
    	comment.
    	(ravenscar_wait): Adjust.
    	(ravenscar_find_new_threads): Rename to ...
    	(ravenscar_update_thread_list): ... this.  Call prune_threads.
    	(init_ravenscar_thread_ops): Adjust.
    	* record-btrace.c (record_btrace_find_new_threads): Rename to ...
    	(record_btrace_update_thread_list): ... this.  Adjust comment.
    	(init_record_btrace_ops): Adjust.
    	* remote.c (remote_threads_info): Rename to ...
    	(remote_update_thread_list): ... this.  Call prune_threads.
    	(remote_start_remote, extended_remote_attach_1, init_remote_ops):
    	Adjust.
    	* sol-thread.c (check_for_thread_db): Adjust.
    	(sol_find_new_threads_callback): Rename to ...
    	(sol_update_thread_list_callback): ... this.
    	(sol_find_new_threads): Rename to ...
    	(sol_update_thread_list): ... this.  Call prune_threads.  Adjust.
    	(sol_get_ada_task_ptid, init_sol_thread_ops): Adjust.
    	* target-delegates.c: Regenerate.
    	* target.c (target_find_new_threads): Rename to ...
    	(target_update_thread_list): ... this.
    	* target.h (struct target_ops): Rename to_find_new_threads field
    	to to_update_thread_list.
    	(target_find_new_threads): Rename to ...
    	(target_update_thread_list): ... this.
    	* thread.c (prune_threads): Make extern.
    	(update_thread_list): Adjust.

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6dc54d9124e8ef9ef3611e0ef3eefef5dcd87ee4

commit 6dc54d9124e8ef9ef3611e0ef3eefef5dcd87ee4
Author: Pedro Alves <palves@redhat.com>
Date:   Wed Oct 15 22:43:59 2014 +0100

    Merge remote thread listing methods
    
    We have three methods to list the current remote thread list:
    
    1. The qXfer:threads:read method (the preferred one nowadays), builds a
    remote thread list while parsing the XML, and then after the XML
    parsing is done, goes over the built list and adds threads GDB doesn't
    know about yet to GDB's list.
    
    2. If the qXfer method isn't available, we fallback to using the
    qfThreadInfo/qsThreadInfo packets.  When we do this, we adds threads
    to GDB's list immediately as we parse the qfThreadInfo/qsThreadInfo
    packet replies.
    
    3. And then if the previous method isn't available either, we try the
    old deprecated qL packet.  This path is already looking somewhat
    broken for not using remote_notice_new_inferior to add threads to
    GDB's list.
    
    This patch makes all variants work in two passes, like the qXfer
    method, and then makes all variants share the code path that adds
    threads to GDB's list.
    
    Tested on x86_64 Fedora 20 with native gdbserver.
    
    gdb/
    2014-10-15  Pedro Alves  <palves@redhat.com>
    
    	* remote.c (remote_get_threadlist, remote_threadlist_iterator):
    	Add describing comment.  Return -1 if the qL packet is not
    	supported.
    	(struct thread_item, thread_item_t): Move higher up in
    	the file.  Add comments.
    	(struct threads_parsing_context): Move higher up in
    	the file, add comments, and remote to ...
    	(struct threads_listing_context): ... this.
    	(remote_newthread_step): Don't add the thread to GDB's thread
    	database here.  Instead push it to the thread_listing_context
    	list.
    	(remote_find_new_threads): Rename to ...
    	(remote_get_threads_with_ql): ... this.  Add target_ops and
    	targets_listing_context parameters.  Pass down context.
    	(start_thread): Adjust.
    	(clear_threads_parsing_context): Rename to ...
    	(clear_threads_listing_context): ... this.
    	(remote_get_threads_with_qxfer): New, with parts salvaged from old
    	remote_threads_info.
    	(remote_get_threads_with_qthreadinfo): Ditto.
    	(remote_threads_info): Reimplement.

-----------------------------------------------------------------------

Summary of changes:
 gdb/ChangeLog          |   98 ++++++++++++++
 gdb/ada-tasks.c        |    4 +-
 gdb/bsd-uthread.c      |    6 +-
 gdb/corelow.c          |    2 +-
 gdb/dec-thread.c       |   80 +++--------
 gdb/gdbthread.h        |   12 ++
 gdb/linux-thread-db.c  |    6 +-
 gdb/nto-procfs.c       |   10 +-
 gdb/obsd-nat.c         |    6 +-
 gdb/procfs.c           |   10 +-
 gdb/ravenscar-thread.c |   10 +-
 gdb/record-btrace.c    |   10 +-
 gdb/remote.c           |  339 ++++++++++++++++++++++++++++--------------------
 gdb/sol-thread.c       |   21 ++--
 gdb/target-delegates.c |   22 ++--
 gdb/target.c           |    4 +-
 gdb/target.h           |    6 +-
 gdb/thread.c           |    8 +-
 18 files changed, 399 insertions(+), 255 deletions(-)


hooks/post-receive
-- 
gdb and binutils


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]