diff options
author | Ed Maste <emaste@FreeBSD.org> | 2013-08-23 17:46:38 +0000 |
---|---|---|
committer | Ed Maste <emaste@FreeBSD.org> | 2013-08-23 17:46:38 +0000 |
commit | f034231a6a1fd5d6395206c1651de8cd9402cca3 (patch) | |
tree | f561dabc721ad515599172c16da3a4400b7f4aec /source/Target/ThreadSpec.cpp | |
download | src-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.cpp | 158 |
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); + } + + } +} |