blob: fe58980c01c1d993722351b38b2562b9b110a230 [file] [log] [blame]
Jason Molenda5e8dce42013-12-13 00:29:16 +00001//===-- QueueItem.cpp -------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Target/Queue.h"
Jason Molenda2fd83352014-02-05 05:44:54 +000011#include "lldb/Target/Process.h"
Jason Molenda5e8dce42013-12-13 00:29:16 +000012#include "lldb/Target/QueueItem.h"
Jason Molenda2fd83352014-02-05 05:44:54 +000013#include "lldb/Target/SystemRuntime.h"
Jason Molenda5e8dce42013-12-13 00:29:16 +000014
15using namespace lldb;
16using namespace lldb_private;
17
Kate Stoneb9c1b512016-09-06 20:57:50 +000018QueueItem::QueueItem(QueueSP queue_sp, ProcessSP process_sp,
19 lldb::addr_t item_ref, lldb_private::Address address)
20 : m_queue_wp(), m_process_wp(), m_item_ref(item_ref), m_address(address),
21 m_have_fetched_entire_item(false), m_kind(eQueueItemKindUnknown),
22 m_item_that_enqueued_this_ref(LLDB_INVALID_ADDRESS),
23 m_enqueueing_thread_id(LLDB_INVALID_THREAD_ID),
24 m_enqueueing_queue_id(LLDB_INVALID_QUEUE_ID),
25 m_target_queue_id(LLDB_INVALID_QUEUE_ID), m_stop_id(0), m_backtrace(),
26 m_thread_label(), m_queue_label(), m_target_queue_label() {
27 m_queue_wp = queue_sp;
28 m_process_wp = process_sp;
Jason Molenda5e8dce42013-12-13 00:29:16 +000029}
30
Kate Stoneb9c1b512016-09-06 20:57:50 +000031QueueItem::~QueueItem() {}
32
33QueueItemKind QueueItem::GetKind() {
34 FetchEntireItem();
35 return m_kind;
Jason Molenda5e8dce42013-12-13 00:29:16 +000036}
37
Kate Stoneb9c1b512016-09-06 20:57:50 +000038void QueueItem::SetKind(QueueItemKind item_kind) { m_kind = item_kind; }
Jason Molenda5e8dce42013-12-13 00:29:16 +000039
Kate Stoneb9c1b512016-09-06 20:57:50 +000040Address &QueueItem::GetAddress() { return m_address; }
Jason Molenda5e8dce42013-12-13 00:29:16 +000041
Kate Stoneb9c1b512016-09-06 20:57:50 +000042void QueueItem::SetAddress(Address addr) { m_address = addr; }
Jason Molenda5e8dce42013-12-13 00:29:16 +000043
Kate Stoneb9c1b512016-09-06 20:57:50 +000044ThreadSP QueueItem::GetExtendedBacktraceThread(ConstString type) {
45 FetchEntireItem();
46 ThreadSP return_thread;
47 QueueSP queue_sp = m_queue_wp.lock();
48 if (queue_sp) {
49 ProcessSP process_sp = queue_sp->GetProcess();
50 if (process_sp && process_sp->GetSystemRuntime()) {
51 return_thread =
52 process_sp->GetSystemRuntime()->GetExtendedBacktraceForQueueItem(
53 this->shared_from_this(), type);
Jason Molenda2fd83352014-02-05 05:44:54 +000054 }
Kate Stoneb9c1b512016-09-06 20:57:50 +000055 }
56 return return_thread;
Jason Molenda5e8dce42013-12-13 00:29:16 +000057}
Jason Molendaa8ff5432014-03-06 06:31:18 +000058
Kate Stoneb9c1b512016-09-06 20:57:50 +000059lldb::addr_t QueueItem::GetItemThatEnqueuedThis() {
60 FetchEntireItem();
61 return m_item_that_enqueued_this_ref;
Jason Molendae32cd192014-03-10 08:42:03 +000062}
63
Kate Stoneb9c1b512016-09-06 20:57:50 +000064lldb::tid_t QueueItem::GetEnqueueingThreadID() {
65 FetchEntireItem();
66 return m_enqueueing_thread_id;
Jason Molendae32cd192014-03-10 08:42:03 +000067}
68
Kate Stoneb9c1b512016-09-06 20:57:50 +000069lldb::queue_id_t QueueItem::GetEnqueueingQueueID() {
70 FetchEntireItem();
71 return m_enqueueing_queue_id;
Jason Molendae32cd192014-03-10 08:42:03 +000072}
73
Kate Stoneb9c1b512016-09-06 20:57:50 +000074uint32_t QueueItem::GetStopID() {
75 FetchEntireItem();
76 return m_stop_id;
Jason Molendae32cd192014-03-10 08:42:03 +000077}
78
Kate Stoneb9c1b512016-09-06 20:57:50 +000079std::vector<lldb::addr_t> &QueueItem::GetEnqueueingBacktrace() {
80 FetchEntireItem();
81 return m_backtrace;
Jason Molendae32cd192014-03-10 08:42:03 +000082}
83
Kate Stoneb9c1b512016-09-06 20:57:50 +000084std::string QueueItem::GetThreadLabel() {
85 FetchEntireItem();
86 return m_thread_label;
Jason Molendae32cd192014-03-10 08:42:03 +000087}
88
Kate Stoneb9c1b512016-09-06 20:57:50 +000089std::string QueueItem::GetQueueLabel() {
90 FetchEntireItem();
91 return m_queue_label;
Jason Molendae32cd192014-03-10 08:42:03 +000092}
93
Kate Stoneb9c1b512016-09-06 20:57:50 +000094ProcessSP QueueItem::GetProcessSP() { return m_process_wp.lock(); }
95
96void QueueItem::FetchEntireItem() {
97 if (m_have_fetched_entire_item == true)
98 return;
99 ProcessSP process_sp = m_process_wp.lock();
100 if (process_sp) {
101 SystemRuntime *runtime = process_sp->GetSystemRuntime();
102 if (runtime) {
103 runtime->CompleteQueueItem(this, m_item_ref);
104 m_have_fetched_entire_item = true;
Jason Molendaa8ff5432014-03-06 06:31:18 +0000105 }
Kate Stoneb9c1b512016-09-06 20:57:50 +0000106 }
Jason Molendaa8ff5432014-03-06 06:31:18 +0000107}