diff options
Diffstat (limited to 'lldb/source/Plugins/Process')
4 files changed, 45 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp index fe617987baa..ee5c35be028 100644 --- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp +++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp @@ -1098,6 +1098,7 @@ ProcessMonitor::Launch(LaunchArgs *args) lldb::pid_t pid; lldb::ThreadSP inferior; + POSIXThread *thread; Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS)); // Propagate the environment if one is not supplied. @@ -1232,6 +1233,10 @@ ProcessMonitor::Launch(LaunchArgs *args) // FIXME: should we be letting UpdateThreadList handle this? // FIXME: by using pids instead of tids, we can only support one thread. inferior.reset(new POSIXThread(process, pid)); + + thread = static_cast<POSIXThread*>(inferior.get()); + thread->SetName(Host::GetThreadName(pid, pid).c_str()); + if (log) log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64, __FUNCTION__, pid); process.GetThreadList().AddThread(inferior); @@ -1292,6 +1297,7 @@ ProcessMonitor::Attach(AttachArgs *args) ProcessMonitor *monitor = args->m_monitor; ProcessLinux &process = monitor->GetProcess(); lldb::ThreadSP inferior; + POSIXThread *thread; Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS)); // Use a map to keep track of the threads which we have attached/need to attach. @@ -1357,6 +1363,10 @@ ProcessMonitor::Attach(AttachArgs *args) // Update the process thread list with the attached thread. inferior.reset(new POSIXThread(process, tid)); + + thread = static_cast<POSIXThread*>(inferior.get()); + thread->SetName(Host::GetThreadName(pid, tid).c_str()); + if (log) log->Printf ("ProcessMonitor::%s() adding tid = %" PRIu64, __FUNCTION__, tid); process.GetThreadList().AddThread(inferior); diff --git a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp index 09f0525c63a..e55ba265d89 100644 --- a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp +++ b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp @@ -41,7 +41,9 @@ using namespace lldb_private; POSIXThread::POSIXThread(Process &process, lldb::tid_t tid) : Thread(process, tid), - m_frame_ap() + m_frame_ap (), + m_breakpoint (), + m_thread_name () { Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD)); if (log && log->GetMask().Test(POSIX_LOG_VERBOSE)) @@ -104,6 +106,23 @@ POSIXThread::GetInfo() return NULL; } +void +POSIXThread::SetName (const char *name) +{ + if (name && name[0]) + m_thread_name.assign (name); + else + m_thread_name.clear(); +} + +const char * +POSIXThread::GetName () +{ + if (m_thread_name.empty()) + return NULL; + return m_thread_name.c_str(); +} + lldb::RegisterContextSP POSIXThread::GetRegisterContext() { diff --git a/lldb/source/Plugins/Process/POSIX/POSIXThread.h b/lldb/source/Plugins/Process/POSIX/POSIXThread.h index d0c081fcf4f..59b02a75f06 100644 --- a/lldb/source/Plugins/Process/POSIX/POSIXThread.h +++ b/lldb/source/Plugins/Process/POSIX/POSIXThread.h @@ -13,6 +13,7 @@ // C Includes // C++ Includes #include <memory> +#include <string> // Other libraries and framework includes #include "lldb/Target/Thread.h" @@ -46,6 +47,12 @@ public: const char * GetInfo(); + void + SetName (const char *name); + + const char * + GetName (); + virtual lldb::RegisterContextSP GetRegisterContext(); @@ -100,6 +107,8 @@ private: lldb::BreakpointSiteSP m_breakpoint; + std::string m_thread_name; + ProcessMonitor & GetMonitor(); diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp index e09bfcaf418..d55609a7b87 100644 --- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp +++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp @@ -491,8 +491,13 @@ ProcessPOSIX::RefreshStateAfterStop() { if (log) log->Printf ("ProcessPOSIX::%s() adding thread, tid = %" PRIi64, __FUNCTION__, message.GetChildTID()); + lldb::tid_t child_tid = message.GetChildTID(); ThreadSP thread_sp; - thread_sp.reset(new POSIXThread(*this, message.GetChildTID())); + thread_sp.reset(new POSIXThread(*this, child_tid)); + + POSIXThread *thread = static_cast<POSIXThread*>(thread_sp.get()); + thread->SetName(Host::GetThreadName(GetID(), child_tid).c_str()); + m_thread_list.AddThread(thread_sp); } |