blob: 0dc48437a6681b9c08d2e7da5a17c6b73ec19702 [file] [log] [blame]
Andrew Walbran3d2c1972020-04-07 12:24:26 +01001//===-- SBThreadPlan.h ------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
Olivier Deprezf4ef2d02021-04-20 13:36:24 +02009#ifndef LLDB_API_SBTHREADPLAN_H
10#define LLDB_API_SBTHREADPLAN_H
Andrew Walbran3d2c1972020-04-07 12:24:26 +010011
12#include "lldb/API/SBDefines.h"
13
14#include <stdio.h>
15
16namespace lldb {
17
18class LLDB_API SBThreadPlan {
19
20 friend class lldb_private::ThreadPlan;
21
22public:
23 SBThreadPlan();
24
25 SBThreadPlan(const lldb::SBThreadPlan &threadPlan);
26
27 SBThreadPlan(const lldb::ThreadPlanSP &lldb_object_sp);
28
29 SBThreadPlan(lldb::SBThread &thread, const char *class_name);
30
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020031 SBThreadPlan(lldb::SBThread &thread, const char *class_name,
32 lldb::SBStructuredData &args_data);
33
Andrew Walbran3d2c1972020-04-07 12:24:26 +010034 ~SBThreadPlan();
35
36 explicit operator bool() const;
37
38 bool IsValid() const;
39
40 void Clear();
41
42 lldb::StopReason GetStopReason();
43
44 /// Get the number of words associated with the stop reason.
45 /// See also GetStopReasonDataAtIndex().
46 size_t GetStopReasonDataCount();
47
48 /// Get information associated with a stop reason.
49 ///
50 /// Breakpoint stop reasons will have data that consists of pairs of
51 /// breakpoint IDs followed by the breakpoint location IDs (they always come
52 /// in pairs).
53 ///
54 /// Stop Reason Count Data Type
55 /// ======================== ===== =========================================
56 /// eStopReasonNone 0
57 /// eStopReasonTrace 0
58 /// eStopReasonBreakpoint N duple: {breakpoint id, location id}
59 /// eStopReasonWatchpoint 1 watchpoint id
60 /// eStopReasonSignal 1 unix signal number
61 /// eStopReasonException N exception data
62 /// eStopReasonExec 0
63 /// eStopReasonPlanComplete 0
64 uint64_t GetStopReasonDataAtIndex(uint32_t idx);
65
66 SBThread GetThread() const;
67
68 const lldb::SBThreadPlan &operator=(const lldb::SBThreadPlan &rhs);
69
70 bool GetDescription(lldb::SBStream &description) const;
71
72 void SetPlanComplete(bool success);
73
74 bool IsPlanComplete();
75
76 bool IsPlanStale();
77
78 bool IsValid();
79
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020080 bool GetStopOthers();
81
82 void SetStopOthers(bool stop_others);
83
Andrew Walbran3d2c1972020-04-07 12:24:26 +010084 // This section allows an SBThreadPlan to push another of the common types of
85 // plans...
86 SBThreadPlan QueueThreadPlanForStepOverRange(SBAddress &start_address,
87 lldb::addr_t range_size);
88 SBThreadPlan QueueThreadPlanForStepOverRange(SBAddress &start_address,
89 lldb::addr_t range_size,
90 SBError &error);
91
92 SBThreadPlan QueueThreadPlanForStepInRange(SBAddress &start_address,
93 lldb::addr_t range_size);
94 SBThreadPlan QueueThreadPlanForStepInRange(SBAddress &start_address,
95 lldb::addr_t range_size,
96 SBError &error);
97
98 SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
99 bool first_insn = false);
100 SBThreadPlan QueueThreadPlanForStepOut(uint32_t frame_idx_to_step_to,
101 bool first_insn, SBError &error);
102
103 SBThreadPlan QueueThreadPlanForRunToAddress(SBAddress address);
104 SBThreadPlan QueueThreadPlanForRunToAddress(SBAddress address,
105 SBError &error);
106
107 SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name);
108 SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name,
109 SBError &error);
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200110 SBThreadPlan QueueThreadPlanForStepScripted(const char *script_class_name,
111 lldb::SBStructuredData &args_data,
112 SBError &error);
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100113
114private:
115 friend class SBBreakpoint;
116 friend class SBBreakpointLocation;
117 friend class SBFrame;
118 friend class SBProcess;
119 friend class SBDebugger;
120 friend class SBValue;
121 friend class lldb_private::QueueImpl;
122 friend class SBQueueItem;
123
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200124 lldb::ThreadPlanSP GetSP() const { return m_opaque_wp.lock(); }
125 lldb_private::ThreadPlan *get() const { return GetSP().get(); }
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100126 void SetThreadPlan(const lldb::ThreadPlanSP &lldb_object_sp);
127
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200128 lldb::ThreadPlanWP m_opaque_wp;
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100129};
130
131} // namespace lldb
132
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200133#endif // LLDB_API_SBTHREADPLAN_H