summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2014-03-10 08:42:03 +0000
committerJason Molenda <jmolenda@apple.com>2014-03-10 08:42:03 +0000
commite32cd191f0a57353ea767bf5c0dcf5ec4885b48c (patch)
treea2d2010a718b871ae5047ae4737d7e49c6c23f6b /lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
parent6c25ca87a0a8295963e40da716a3a516f4baa325 (diff)
downloadbcm5719-llvm-e32cd191f0a57353ea767bf5c0dcf5ec4885b48c.tar.gz
bcm5719-llvm-e32cd191f0a57353ea767bf5c0dcf5ec4885b48c.zip
Correctly add the QueueID to a pending block's extended thread backtrace thread.
Seed the QueueItem objects with the item_refs and addresses when they are fetched in one batch. If additional information is needed from the QueueItem, fetch it lazily one pending item per function call. <rdar://problem/16270007>, <rdar://problem/16032150> llvm-svn: 203449
Diffstat (limited to 'lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp')
-rw-r--r--lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp68
1 files changed, 34 insertions, 34 deletions
diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
index 53b9c83cce1..408de4e0554 100644
--- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
+++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp
@@ -620,42 +620,42 @@ SystemRuntimeMacOSX::PopulatePendingItemsForQueue (Queue *queue)
PendingItemsForQueue pending_item_refs = GetPendingItemRefsForQueue (queue->GetLibdispatchQueueAddress());
for (ItemRefAndCodeAddress pending_item : pending_item_refs.item_refs_and_code_addresses)
{
- AppleGetItemInfoHandler::GetItemInfoReturnInfo ret;
- ThreadSP cur_thread_sp (m_process->GetThreadList().GetSelectedThread());
- Error error;
- ret = m_get_item_info_handler.GetItemInfo (*cur_thread_sp.get(), pending_item.item_ref, m_page_to_free, m_page_to_free_size, error);
- m_page_to_free = LLDB_INVALID_ADDRESS;
- m_page_to_free_size = 0;
- if (ret.item_buffer_ptr != 0 && ret.item_buffer_ptr != LLDB_INVALID_ADDRESS && ret.item_buffer_size > 0)
- {
- DataBufferHeap data (ret.item_buffer_size, 0);
- if (m_process->ReadMemory (ret.item_buffer_ptr, data.GetBytes(), ret.item_buffer_size, error) && error.Success())
- {
- DataExtractor extractor (data.GetBytes(), data.GetByteSize(), m_process->GetByteOrder(), m_process->GetAddressByteSize());
- ItemInfo item = ExtractItemInfoFromBuffer (extractor);
- QueueItemSP queue_item_sp (new QueueItem (queue->shared_from_this(), pending_item.item_ref));
- queue_item_sp->SetItemThatEnqueuedThis (item.item_that_enqueued_this);
+ Address addr;
+ m_process->GetTarget().ResolveLoadAddress (pending_item.code_address, addr);
+ QueueItemSP queue_item_sp (new QueueItem (queue->shared_from_this(), m_process->shared_from_this(), pending_item.item_ref, addr));
+ queue->PushPendingQueueItem (queue_item_sp);
+ }
+ }
+}
- Address addr;
- if (!m_process->GetTarget().ResolveLoadAddress (item.function_or_block, addr, item.stop_id))
- {
- m_process->GetTarget().ResolveLoadAddress (item.function_or_block, addr);
- }
- queue_item_sp->SetAddress (addr);
- queue_item_sp->SetEnqueueingThreadID (item.enqueuing_thread_id);
- queue_item_sp->SetTargetQueueID (item.enqueuing_thread_id);
- queue_item_sp->SetStopID (item.stop_id);
- queue_item_sp->SetEnqueueingBacktrace (item.enqueuing_callstack);
- queue_item_sp->SetThreadLabel (item.enqueuing_thread_label);
- queue_item_sp->SetQueueLabel (item.enqueuing_queue_label);
- queue_item_sp->SetTargetQueueLabel (item.target_queue_label);
-
- queue->PushPendingQueueItem (queue_item_sp);
- }
- m_page_to_free = ret.item_buffer_ptr;
- m_page_to_free_size = ret.item_buffer_size;
- }
+void
+SystemRuntimeMacOSX::CompleteQueueItem (QueueItem *queue_item, addr_t item_ref)
+{
+ AppleGetItemInfoHandler::GetItemInfoReturnInfo ret;
+
+ ThreadSP cur_thread_sp (m_process->GetThreadList().GetSelectedThread());
+ Error error;
+ ret = m_get_item_info_handler.GetItemInfo (*cur_thread_sp.get(), item_ref, m_page_to_free, m_page_to_free_size, error);
+ m_page_to_free = LLDB_INVALID_ADDRESS;
+ m_page_to_free_size = 0;
+ if (ret.item_buffer_ptr != 0 && ret.item_buffer_ptr != LLDB_INVALID_ADDRESS && ret.item_buffer_size > 0)
+ {
+ DataBufferHeap data (ret.item_buffer_size, 0);
+ if (m_process->ReadMemory (ret.item_buffer_ptr, data.GetBytes(), ret.item_buffer_size, error) && error.Success())
+ {
+ DataExtractor extractor (data.GetBytes(), data.GetByteSize(), m_process->GetByteOrder(), m_process->GetAddressByteSize());
+ ItemInfo item = ExtractItemInfoFromBuffer (extractor);
+ queue_item->SetItemThatEnqueuedThis (item.item_that_enqueued_this);
+ queue_item->SetEnqueueingThreadID (item.enqueuing_thread_id);
+ queue_item->SetEnqueueingQueueID (item.enqueuing_queue_serialnum);
+ queue_item->SetStopID (item.stop_id);
+ queue_item->SetEnqueueingBacktrace (item.enqueuing_callstack);
+ queue_item->SetThreadLabel (item.enqueuing_thread_label);
+ queue_item->SetQueueLabel (item.enqueuing_queue_label);
+ queue_item->SetTargetQueueLabel (item.target_queue_label);
}
+ m_page_to_free = ret.item_buffer_ptr;
+ m_page_to_free_size = ret.item_buffer_size;
}
}
OpenPOWER on IntegriCloud