11b54c88cSJim Ingham //===-- ThreadSpec.cpp ----------------------------------------------*- C++ -*-===// 21b54c88cSJim Ingham // 31b54c88cSJim Ingham // The LLVM Compiler Infrastructure 41b54c88cSJim Ingham // 51b54c88cSJim Ingham // This file is distributed under the University of Illinois Open Source 61b54c88cSJim Ingham // License. See LICENSE.TXT for details. 71b54c88cSJim Ingham // 81b54c88cSJim Ingham //===----------------------------------------------------------------------===// 91b54c88cSJim Ingham 101b54c88cSJim Ingham #include "lldb/Target/Thread.h" 111b54c88cSJim Ingham #include "lldb/Target/ThreadSpec.h" 121b54c88cSJim Ingham 131b54c88cSJim Ingham using namespace lldb; 141b54c88cSJim Ingham using namespace lldb_private; 151b54c88cSJim Ingham 161b54c88cSJim Ingham ThreadSpec::ThreadSpec() : 17*bdf4c6acSGreg Clayton m_index (UINT32_MAX), 181b54c88cSJim Ingham m_tid (LLDB_INVALID_THREAD_ID), 191b54c88cSJim Ingham m_name(), 201b54c88cSJim Ingham m_queue_name () 211b54c88cSJim Ingham { 221b54c88cSJim Ingham } 231b54c88cSJim Ingham 241b54c88cSJim Ingham ThreadSpec::ThreadSpec (const ThreadSpec &rhs) : 251b54c88cSJim Ingham m_index(rhs.m_index), 261b54c88cSJim Ingham m_tid(rhs.m_tid), 271b54c88cSJim Ingham m_name(rhs.m_name), 281b54c88cSJim Ingham m_queue_name(rhs.m_queue_name) 291b54c88cSJim Ingham { 301b54c88cSJim Ingham } 311b54c88cSJim Ingham 321b54c88cSJim Ingham const ThreadSpec & 331b54c88cSJim Ingham ThreadSpec::operator=(const ThreadSpec &rhs) 341b54c88cSJim Ingham { 351b54c88cSJim Ingham m_index = rhs.m_index; 361b54c88cSJim Ingham m_tid = rhs.m_tid; 371b54c88cSJim Ingham m_name = rhs.m_name; 381b54c88cSJim Ingham m_queue_name = rhs.m_queue_name; 391b54c88cSJim Ingham return *this; 401b54c88cSJim Ingham } 411b54c88cSJim Ingham 421b54c88cSJim Ingham const char * 431b54c88cSJim Ingham ThreadSpec::GetName () const 441b54c88cSJim Ingham { 451b54c88cSJim Ingham if (m_name.empty()) 461b54c88cSJim Ingham return NULL; 471b54c88cSJim Ingham else 481b54c88cSJim Ingham return m_name.c_str(); 491b54c88cSJim Ingham } 501b54c88cSJim Ingham 511b54c88cSJim Ingham const char * 521b54c88cSJim Ingham ThreadSpec::GetQueueName () const 531b54c88cSJim Ingham { 541b54c88cSJim Ingham if (m_queue_name.empty()) 551b54c88cSJim Ingham return NULL; 561b54c88cSJim Ingham else 571b54c88cSJim Ingham return m_queue_name.c_str(); 581b54c88cSJim Ingham } 590136309fSJim Ingham 600136309fSJim Ingham bool 610136309fSJim Ingham ThreadSpec::ThreadPassesBasicTests (Thread *thread) const 620136309fSJim Ingham { 630136309fSJim Ingham 640136309fSJim Ingham if (!HasSpecification()) 650136309fSJim Ingham return true; 660136309fSJim Ingham 670136309fSJim Ingham if (!TIDMatches(thread->GetID())) 680136309fSJim Ingham return false; 690136309fSJim Ingham 700136309fSJim Ingham if (!IndexMatches(thread->GetIndexID())) 710136309fSJim Ingham return false; 720136309fSJim Ingham 730136309fSJim Ingham if (!NameMatches (thread->GetName())) 740136309fSJim Ingham return false; 750136309fSJim Ingham 760136309fSJim Ingham if (!QueueNameMatches (thread->GetQueueName())) 770136309fSJim Ingham return false; 780136309fSJim Ingham 790136309fSJim Ingham return true; 800136309fSJim Ingham 810136309fSJim Ingham } 820136309fSJim Ingham 830136309fSJim Ingham bool 840136309fSJim Ingham ThreadSpec::HasSpecification() const 850136309fSJim Ingham { 86*bdf4c6acSGreg Clayton return (m_index != UINT32_MAX || m_tid != LLDB_INVALID_THREAD_ID || !m_name.empty() || !m_queue_name.empty()); 870136309fSJim Ingham } 880136309fSJim Ingham void 890136309fSJim Ingham ThreadSpec::GetDescription (Stream *s, lldb::DescriptionLevel level) const 900136309fSJim Ingham { 910136309fSJim Ingham if (!HasSpecification()) 920136309fSJim Ingham { 930136309fSJim Ingham if (level == eDescriptionLevelBrief) 940136309fSJim Ingham { 950136309fSJim Ingham s->PutCString("thread spec: no "); 960136309fSJim Ingham } 970136309fSJim Ingham } 980136309fSJim Ingham else 990136309fSJim Ingham { 1000136309fSJim Ingham if (level == eDescriptionLevelBrief) 1010136309fSJim Ingham { 1020136309fSJim Ingham s->PutCString("thread spec: yes "); 1030136309fSJim Ingham } 1040136309fSJim Ingham else 1050136309fSJim Ingham { 1060136309fSJim Ingham if (GetTID() != LLDB_INVALID_THREAD_ID) 1070136309fSJim Ingham s->Printf("tid: 0x%llx ", GetTID()); 1080136309fSJim Ingham 109*bdf4c6acSGreg Clayton if (GetIndex() != UINT32_MAX) 1100136309fSJim Ingham s->Printf("index: %d ", GetIndex()); 1110136309fSJim Ingham 1120136309fSJim Ingham const char *name = GetName(); 1130136309fSJim Ingham if (name) 1140136309fSJim Ingham s->Printf ("thread name: \"%s\" ", name); 1150136309fSJim Ingham 1160136309fSJim Ingham const char *queue_name = GetQueueName(); 1170136309fSJim Ingham if (queue_name) 1180136309fSJim Ingham s->Printf ("queue name: \"%s\" ", queue_name); 1190136309fSJim Ingham } 1200136309fSJim Ingham 1210136309fSJim Ingham } 1220136309fSJim Ingham } 123