aboutsummaryrefslogtreecommitdiff
path: root/source/Target/ThreadSpec.cpp
diff options
context:
space:
mode:
authorEd Maste <emaste@FreeBSD.org>2013-08-23 17:46:38 +0000
committerEd Maste <emaste@FreeBSD.org>2013-08-23 17:46:38 +0000
commitf034231a6a1fd5d6395206c1651de8cd9402cca3 (patch)
treef561dabc721ad515599172c16da3a4400b7f4aec /source/Target/ThreadSpec.cpp
downloadsrc-f034231a6a1fd5d6395206c1651de8cd9402cca3.tar.gz
src-f034231a6a1fd5d6395206c1651de8cd9402cca3.zip
Import lldb as of SVN r188801
(A number of files not required for the FreeBSD build have been removed.) Sponsored by: DARPA, AFRL
Notes
Notes: svn path=/vendor/lldb/dist/; revision=254721
Diffstat (limited to 'source/Target/ThreadSpec.cpp')
-rw-r--r--source/Target/ThreadSpec.cpp158
1 files changed, 158 insertions, 0 deletions
diff --git a/source/Target/ThreadSpec.cpp b/source/Target/ThreadSpec.cpp
new file mode 100644
index 000000000000..cb54469ba901
--- /dev/null
+++ b/source/Target/ThreadSpec.cpp
@@ -0,0 +1,158 @@
+//===-- ThreadSpec.cpp ----------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Target/Thread.h"
+#include "lldb/Target/ThreadSpec.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+ThreadSpec::ThreadSpec() :
+ m_index (UINT32_MAX),
+ m_tid (LLDB_INVALID_THREAD_ID),
+ m_name(),
+ m_queue_name ()
+{
+}
+
+ThreadSpec::ThreadSpec (const ThreadSpec &rhs) :
+ m_index(rhs.m_index),
+ m_tid(rhs.m_tid),
+ m_name(rhs.m_name),
+ m_queue_name(rhs.m_queue_name)
+{
+}
+
+const ThreadSpec &
+ThreadSpec::operator=(const ThreadSpec &rhs)
+{
+ m_index = rhs.m_index;
+ m_tid = rhs.m_tid;
+ m_name = rhs.m_name;
+ m_queue_name = rhs.m_queue_name;
+ return *this;
+}
+
+const char *
+ThreadSpec::GetName () const
+{
+ if (m_name.empty())
+ return NULL;
+ else
+ return m_name.c_str();
+}
+
+const char *
+ThreadSpec::GetQueueName () const
+{
+ if (m_queue_name.empty())
+ return NULL;
+ else
+ return m_queue_name.c_str();
+}
+
+bool
+ThreadSpec::TIDMatches (Thread &thread) const
+{
+ if (m_tid == LLDB_INVALID_THREAD_ID)
+ return true;
+
+ lldb::tid_t thread_id = thread.GetID();
+ return TIDMatches (thread_id);
+}
+bool
+ThreadSpec::IndexMatches (Thread &thread) const
+{
+ if (m_index == UINT32_MAX)
+ return true;
+ uint32_t index = thread.GetIndexID();
+ return IndexMatches (index);
+}
+bool
+ThreadSpec::NameMatches (Thread &thread) const
+{
+ if (m_name.empty())
+ return true;
+
+ const char *name = thread.GetName();
+ return NameMatches (name);
+}
+bool
+ThreadSpec::QueueNameMatches (Thread &thread) const
+{
+ if (m_queue_name.empty())
+ return true;
+
+ const char *queue_name = thread.GetQueueName();
+ return QueueNameMatches (queue_name);
+}
+
+bool
+ThreadSpec::ThreadPassesBasicTests (Thread &thread) const
+{
+
+ if (!HasSpecification())
+ return true;
+
+ if (!TIDMatches(thread))
+ return false;
+
+ if (!IndexMatches(thread))
+ return false;
+
+ if (!NameMatches (thread))
+ return false;
+
+ if (!QueueNameMatches (thread))
+ return false;
+
+ return true;
+
+}
+
+bool
+ThreadSpec::HasSpecification() const
+{
+ return (m_index != UINT32_MAX || m_tid != LLDB_INVALID_THREAD_ID || !m_name.empty() || !m_queue_name.empty());
+}
+void
+ThreadSpec::GetDescription (Stream *s, lldb::DescriptionLevel level) const
+{
+ if (!HasSpecification())
+ {
+ if (level == eDescriptionLevelBrief)
+ {
+ s->PutCString("thread spec: no ");
+ }
+ }
+ else
+ {
+ if (level == eDescriptionLevelBrief)
+ {
+ s->PutCString("thread spec: yes ");
+ }
+ else
+ {
+ if (GetTID() != LLDB_INVALID_THREAD_ID)
+ s->Printf("tid: 0x%" PRIx64 " ", GetTID());
+
+ if (GetIndex() != UINT32_MAX)
+ s->Printf("index: %d ", GetIndex());
+
+ const char *name = GetName();
+ if (name)
+ s->Printf ("thread name: \"%s\" ", name);
+
+ const char *queue_name = GetQueueName();
+ if (queue_name)
+ s->Printf ("queue name: \"%s\" ", queue_name);
+ }
+
+ }
+}