diff options
author | emaste <emaste@FreeBSD.org> | 2014-11-25 21:00:58 +0000 |
---|---|---|
committer | emaste <emaste@FreeBSD.org> | 2014-11-25 21:00:58 +0000 |
commit | 01ee1789d6aa7294e5966a97f8d29387f6f81699 (patch) | |
tree | c94307da318be46e5aeea1a325c1e91749506e4f /source/API/SBQueueItem.cpp | |
parent | 788502c6f6261e2d84ef85d1052b41a6c5be31b3 (diff) | |
download | FreeBSD-src-01ee1789d6aa7294e5966a97f8d29387f6f81699.zip FreeBSD-src-01ee1789d6aa7294e5966a97f8d29387f6f81699.tar.gz |
Import LLDB as of upstream SVN r216948 (git 50f7fe44)
This corresponds with the branchpoint for the 3.5 release.
A number of files not required for the FreeBSD build have been removed.
Sponsored by: DARPA, AFRL
Diffstat (limited to 'source/API/SBQueueItem.cpp')
-rw-r--r-- | source/API/SBQueueItem.cpp | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/source/API/SBQueueItem.cpp b/source/API/SBQueueItem.cpp index 481d51e..6a1aa7b 100644 --- a/source/API/SBQueueItem.cpp +++ b/source/API/SBQueueItem.cpp @@ -14,6 +14,8 @@ #include "lldb/API/SBQueueItem.h" #include "lldb/API/SBThread.h" #include "lldb/Core/Address.h" +#include "lldb/Core/Log.h" +#include "lldb/Target/Process.h" #include "lldb/Target/QueueItem.h" #include "lldb/Target/Thread.h" @@ -44,13 +46,23 @@ SBQueueItem::~SBQueueItem() bool SBQueueItem::IsValid() const { - return m_queue_item_sp.get() != NULL; + bool is_valid = m_queue_item_sp.get() != NULL; + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + log->Printf("SBQueueItem(%p)::IsValid() == %s", + static_cast<void*>(m_queue_item_sp.get()), + is_valid ? "true" : "false"); + return is_valid; } void SBQueueItem::Clear () { + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); + if (log) + log->Printf("SBQueueItem(%p)::Clear()", + static_cast<void*>(m_queue_item_sp.get())); m_queue_item_sp.reset(); } @@ -66,10 +78,15 @@ lldb::QueueItemKind SBQueueItem::GetKind () const { QueueItemKind result = eQueueItemKindUnknown; + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (m_queue_item_sp) { result = m_queue_item_sp->GetKind (); } + if (log) + log->Printf("SBQueueItem(%p)::GetKind() == %d", + static_cast<void*>(m_queue_item_sp.get()), + static_cast<int>(result)); return result; } @@ -86,10 +103,21 @@ SBAddress SBQueueItem::GetAddress () const { SBAddress result; + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (m_queue_item_sp) { result.SetAddress (&m_queue_item_sp->GetAddress()); } + if (log) + { + StreamString sstr; + const Address *addr = result.get(); + if (addr) + addr->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4); + log->Printf ("SBQueueItem(%p)::GetAddress() == SBAddress(%p): %s", + static_cast<void*>(m_queue_item_sp.get()), + static_cast<void*>(result.get()), sstr.GetData()); + } return result; } @@ -106,14 +134,34 @@ SBThread SBQueueItem::GetExtendedBacktraceThread (const char *type) { SBThread result; + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); if (m_queue_item_sp) { - ThreadSP thread_sp; - ConstString type_const (type); - thread_sp = m_queue_item_sp->GetExtendedBacktraceThread (type_const); - if (thread_sp) + ProcessSP process_sp = m_queue_item_sp->GetProcessSP(); + Process::StopLocker stop_locker; + if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock())) { - result.SetThread (thread_sp); + ThreadSP thread_sp; + ConstString type_const (type); + thread_sp = m_queue_item_sp->GetExtendedBacktraceThread (type_const); + if (thread_sp) + { + // Save this in the Process' ExtendedThreadList so a strong pointer retains the + // object + process_sp->GetExtendedThreadList().AddThread (thread_sp); + result.SetThread (thread_sp); + if (log) + { + const char *queue_name = thread_sp->GetQueueName(); + if (queue_name == NULL) + queue_name = ""; + log->Printf ("SBQueueItem(%p)::GetExtendedBacktraceThread() = new extended Thread created (%p) with queue_id 0x%" PRIx64 " queue name '%s'", + static_cast<void*>(m_queue_item_sp.get()), + static_cast<void*>(thread_sp.get()), + static_cast<uint64_t>(thread_sp->GetQueueID()), + queue_name); + } + } } } return result; |