Author: emaste Date: Fri Jul 31 09:24:32 2015 New Revision: 243748 URL: http://llvm.org/viewvc/llvm-project?rev=243748&view=rev Log: Report original thread ID for FreeBSD core files
On 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. For Linux I've left the original behaviour of using sequential TIDs (0, 1, 2...) as I don't yet have code to obtain it. Differential Revision: http://reviews.llvm.org/D11652 Modified: lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.cpp lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.h Modified: lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp?rev=243748&r1=243747&r2=243748&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp (original) +++ lldb/trunk/source/Plugins/Process/elf-core/ProcessElfCore.cpp Fri Jul 31 09:24:32 2015 @@ -258,7 +258,7 @@ ProcessElfCore::UpdateThreadList (Thread 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 @@ ParseFreeBSDPrStatus(ThreadData &thread_ 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; @@ -543,6 +543,8 @@ ProcessElfCore::ParseThreadContextsFromN header_size = ELFLinuxPrStatus::GetSize(arch); len = note_data.GetByteSize() - header_size; thread_data->gpregset = DataExtractor(note_data, header_size, len); + // FIXME: Obtain actual tid on Linux + thread_data->tid = m_thread_data.size(); break; case NT_FPREGSET: thread_data->fpregset = note_data; Modified: lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.cpp?rev=243748&r1=243747&r2=243748&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.cpp (original) +++ lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.cpp Fri Jul 31 09:24:32 2015 @@ -37,9 +37,8 @@ using namespace lldb_private; //---------------------------------------------------------------------- // 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), Modified: lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.h?rev=243748&r1=243747&r2=243748&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.h (original) +++ lldb/trunk/source/Plugins/Process/elf-core/ThreadElfCore.h Fri Jul 31 09:24:32 2015 @@ -112,6 +112,7 @@ struct ThreadData lldb_private::DataExtractor gpregset; lldb_private::DataExtractor fpregset; lldb_private::DataExtractor vregset; + lldb::tid_t tid; int signo; std::string name; }; @@ -119,8 +120,7 @@ struct ThreadData 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 (); _______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits