summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/Process')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp10
-rw-r--r--lldb/source/Plugins/Process/POSIX/POSIXThread.cpp21
-rw-r--r--lldb/source/Plugins/Process/POSIX/POSIXThread.h9
-rw-r--r--lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp7
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);
}
OpenPOWER on IntegriCloud