[Lldb-commits] [PATCH] D11652: Report actual tids from FreeBSD core files

Ed Maste emaste at freebsd.org
Thu Jul 30 08:53:17 PDT 2015


emaste created this revision.
emaste added a subscriber: lldb-commits.

As noted in the thread "Question (bug?) about thread tids when lldb loads a core dump." on lldb-dev, lldb is not showing tids for core files.

For FreeBSD the tid is (somewhat unintuitively) found in the pr_pid field of the NT_PRSTATUS note. Collect it when parsing the note and store it in the thread data. I'm not sure how to obtain it on Linux. I'll update the patch if/when I find out -- this patch isn't committable as-is until then.


http://reviews.llvm.org/D11652

Files:
  source/Plugins/Process/elf-core/ProcessElfCore.cpp
  source/Plugins/Process/elf-core/ThreadElfCore.cpp
  source/Plugins/Process/elf-core/ThreadElfCore.h

Index: source/Plugins/Process/elf-core/ThreadElfCore.h
===================================================================
--- source/Plugins/Process/elf-core/ThreadElfCore.h
+++ source/Plugins/Process/elf-core/ThreadElfCore.h
@@ -112,15 +112,15 @@
     lldb_private::DataExtractor gpregset;
     lldb_private::DataExtractor fpregset;
     lldb_private::DataExtractor vregset;
+    lldb::tid_t tid;
     int signo;
     std::string name;
 };
 
 class ThreadElfCore : public lldb_private::Thread
 {
 public:
-    ThreadElfCore (lldb_private::Process &process, lldb::tid_t tid,
-                   const ThreadData &td);
+    ThreadElfCore (lldb_private::Process &process, const ThreadData &td);
 
     virtual
     ~ThreadElfCore ();
Index: source/Plugins/Process/elf-core/ThreadElfCore.cpp
===================================================================
--- source/Plugins/Process/elf-core/ThreadElfCore.cpp
+++ source/Plugins/Process/elf-core/ThreadElfCore.cpp
@@ -37,9 +37,8 @@
 //----------------------------------------------------------------------
 // Construct a Thread object with given data
 //----------------------------------------------------------------------
-ThreadElfCore::ThreadElfCore (Process &process, tid_t tid,
-                              const ThreadData &td) :
-    Thread(process, tid),
+ThreadElfCore::ThreadElfCore (Process &process, const ThreadData &td) :
+    Thread(process, td.tid),
     m_thread_name(td.name),
     m_thread_reg_ctx_sp (),
     m_signo(td.signo),
Index: source/Plugins/Process/elf-core/ProcessElfCore.cpp
===================================================================
--- source/Plugins/Process/elf-core/ProcessElfCore.cpp
+++ source/Plugins/Process/elf-core/ProcessElfCore.cpp
@@ -258,7 +258,7 @@
     for (lldb::tid_t tid = 0; tid < num_threads; ++tid)
     {
         const ThreadData &td = m_thread_data[tid];
-        lldb::ThreadSP thread_sp(new ThreadElfCore (*this, tid, td));
+        lldb::ThreadSP thread_sp(new ThreadElfCore (*this, td));
         new_thread_list.AddThread (thread_sp);
     }
     return new_thread_list.GetSize(false) > 0;
@@ -429,7 +429,7 @@
         offset += 16;
 
     thread_data.signo = data.GetU32(&offset); // pr_cursig
-    offset += 4;        // pr_pid
+    thread_data.tid = data.GetU32(&offset); // pr_pid
     if (lp64)
         offset += 4;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D11652.31033.patch
Type: text/x-patch
Size: 2351 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150730/70c2928d/attachment.bin>


More information about the lldb-commits mailing list