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]

[binutils-gdb] Fix assertion failure in linux-thread-db


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

commit e0fd7c47bd01e0a6eecf5dec4a4be958f8b3bbc8
Author: Ulrich Weigand <ulrich.weigand@de.ibm.com>
Date:   Thu Aug 27 19:12:49 2015 +0200

    Fix assertion failure in linux-thread-db
    
    Since we are no longer using thread events by default in linux-thread-db,
    the find_new_threads_once routine contains an assertion that it should
    never be called on a live inferior unless using thread events:
      gdb_assert (!target_has_execution || thread_db_use_events ());
    
    However, there is a code path from thread_db_get_thread_local_address
    that will in fact call find_new_threads_once in some scenarios.  In
    particular, this is currently always triggered when starting up any
    Cell/B.E. combined exeuctable.
    
    To fix this, this patch removes the call to thread_db_find_new_threads_1
    when the current thread was not yet detected.  In its place, we now just
    call thread_from_lwp to detect this one thread if necessary.
    
    ChangeLog:
    
    	* linux-thread-db.c (thread_db_get_thread_local_address): If the
    	thread was not yet discovered, use thread_from_lwp instead of
    	calling thread_db_find_new_threads_1.

Diff:
---
 gdb/ChangeLog         |  6 ++++++
 gdb/linux-thread-db.c | 11 +++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index b572271..8319083 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2015-08-08  Ulrich Weigand  <uweigand@de.ibm.com>
+
+	* linux-thread-db.c (thread_db_get_thread_local_address): If the
+	thread was not yet discovered, use thread_from_lwp instead of
+	calling thread_db_find_new_threads_1.
+
 2015-08-27  Simon Marchi  <simon.marchi@ericsson.com>
 
 	* m88k-tdep.c (m88k_analyze_prologue): Fix inverted allocation
diff --git a/gdb/linux-thread-db.c b/gdb/linux-thread-db.c
index d6bf56f..855629b 100644
--- a/gdb/linux-thread-db.c
+++ b/gdb/linux-thread-db.c
@@ -1849,13 +1849,16 @@ thread_db_get_thread_local_address (struct target_ops *ops,
   struct thread_info *thread_info;
   struct target_ops *beneath;
 
-  /* If we have not discovered any threads yet, check now.  */
-  if (!have_threads (ptid))
-    thread_db_find_new_threads_1 (ptid);
-
   /* Find the matching thread.  */
   thread_info = find_thread_ptid (ptid);
 
+  /* We may not have discovered the thread yet.  */
+  if (thread_info != NULL && thread_info->priv == NULL)
+    {
+      thread_from_lwp (ptid);
+      thread_info = find_thread_ptid (ptid);
+    }
+
   if (thread_info != NULL && thread_info->priv != NULL)
     {
       td_err_e err;


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