LLDB mainline
lldb-private-enumerations.h
Go to the documentation of this file.
1//===-- lldb-private-enumerations.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
9#ifndef LLDB_LLDB_PRIVATE_ENUMERATIONS_H
10#define LLDB_LLDB_PRIVATE_ENUMERATIONS_H
11
13#include "llvm/ADT/BitmaskEnum.h"
14#include "llvm/ADT/StringRef.h"
15#include "llvm/Support/FormatProviders.h"
16#include "llvm/Support/raw_ostream.h"
17
18namespace lldb_private {
19
20// Thread Step Types
23 eStepTypeTrace, ///< Single step one instruction.
24 eStepTypeTraceOver, ///< Single step one instruction, stepping over.
25 eStepTypeInto, ///< Single step into a specified context.
26 eStepTypeOver, ///< Single step over a specified context.
27 eStepTypeOut, ///< Single step out a specified context.
28 eStepTypeScripted ///< A step type implemented by the script interpreter.
29};
30
31// Address Types
34 eAddressTypeFile, ///< Address is an address as found in an object or symbol
35 /// file
36 eAddressTypeLoad, ///< Address is an address as in the current target inferior
37 /// process
38 eAddressTypeHost ///< Address is an address in the process that is running
39 /// this code
40};
41
42// Address Class
43//
44// A way of classifying an address used for disassembling and setting
45// breakpoints. Many object files can track exactly what parts of their object
46// files are code, data and other information. This is of course above and
47// beyond just looking at the section types. For example, code might contain PC
48// relative data and the object file might be able to tell us that an address
49// in code is data.
59
60// Votes - Need a tri-state, yes, no, no opinion...
61enum Vote { eVoteNo = -1, eVoteNoOpinion = 0, eVoteYes = 1 };
62
71
72/// Settable state variable types.
73///
74
75// typedef enum SettableVariableType
76//{
77// eSetVarTypeInt,
78// eSetVarTypeBoolean,
79// eSetVarTypeString,
80// eSetVarTypeArray,
81// eSetVarTypeDictionary,
82// eSetVarTypeEnum,
83// eSetVarTypeNone
84//} SettableVariableType;
85
96
98 eArgRepeatPlain, // Exactly one occurrence
99 eArgRepeatOptional, // At most one occurrence, but it's optional
100 eArgRepeatPlus, // One or more occurrences
101 eArgRepeatStar, // Zero or more occurrences
102 eArgRepeatRange, // Repetition of same argument, from 1 to n
103 eArgRepeatPairPlain, // A pair of arguments that must always go together
104 // ([arg-type arg-value]), occurs exactly once
105 eArgRepeatPairOptional, // A pair that occurs at most once (optional)
106 eArgRepeatPairPlus, // One or more occurrences of a pair
107 eArgRepeatPairStar, // Zero or more occurrences of a pair
108 eArgRepeatPairRange, // A pair that repeats from 1 to n
109 eArgRepeatPairRangeOptional // A pair that repeats from 1 to n, but is
110 // optional
111};
112
119
120// LazyBool is for boolean values that need to be calculated lazily. Values
121// start off set to eLazyBoolCalculate, and then they can be calculated once
122// and set to eLazyBoolNo or eLazyBoolYes.
124
125/// Instruction types
127 eInstructionTypeAny, // Support for any instructions at all (at least one)
128 eInstructionTypePrologueEpilogue, // All prologue and epilogue instructions
129 // that push and pop register values and
130 // modify sp/fp
131 eInstructionTypePCModifying, // Any instruction that modifies the program
132 // counter/instruction pointer
133 eInstructionTypeAll // All instructions of any kind
134
135};
136
137/// Format category entry types
144
145/// Expression execution policies
152
153// Synchronicity behavior of scripted commands
160
161// Verbosity mode of "po" output
164 // description string, if
165 // any
167 // output
168};
169
170// Loading modules from memory
172 eMemoryModuleLoadLevelMinimal, // Load sections only
173 eMemoryModuleLoadLevelPartial, // Load function bounds but no symbols
174 eMemoryModuleLoadLevelComplete, // Load sections and all symbols
175};
176
177// Behavior on fork/vfork
179 eFollowParent, // Follow parent process
180 eFollowChild, // Follow child process
181};
182
183// Result enums for when reading multiple lines from IOHandlers
184enum class LineStatus {
185 Success, // The line that was just edited if good and should be added to the
186 // lines
187 Status, // There is an error with the current line and it needs to be
188 // re-edited
189 // before it can be accepted
190 Done // Lines are complete
191};
192
193// Boolean result of running a Type Validator
194enum class TypeValidatorResult : bool { Success = true, Failure = false };
195
196// Enumerations that can be used to specify scopes types when looking up types.
197enum class CompilerContextKind : uint16_t {
200 Module = 1 << 1,
201 Namespace = 1 << 2,
203 Union = 1 << 5,
204 Function = 1 << 6,
205 Variable = 1 << 7,
206 Enum = 1 << 8,
207 Typedef = 1 << 9,
208 Builtin = 1 << 10,
209
210 Any = 1 << 15,
211 /// Match any type.
213 /// Math any declaration context.
216};
218
219// Enumerations that can be used to specify the kind of metric we're looking at
220// when collecting stats.
228
229// Enumeration that can be used to specify a log handler.
237
243
244/// Useful for callbacks whose return type indicates
245/// whether to continue iteration or short-circuit.
246enum class IterationAction {
249};
250
251/// Specifies the type of PCs when creating a `HistoryThread`.
252/// - `Returns` - Usually, when LLDB unwinds the stack or we retrieve a stack
253/// trace via `backtrace()` we are collecting return addresses (except for the
254/// topmost frame which is the actual PC). LLDB then maps these return
255/// addresses back to call addresses to give accurate source line annotations.
256/// - `ReturnsNoZerothFrame` - Some trace providers (e.g., libsanitizers traces)
257/// collect return addresses but prune the topmost frames, so we should skip
258/// the special treatment of frame 0.
259/// - `Calls` - Other trace providers (e.g., ASan compiler-rt runtime) already
260/// perform this mapping, so we need to prevent LLDB from doing it again.
261enum class HistoryPCType {
262 Returns, ///< PCs are return addresses, except for topmost frame.
263 ReturnsNoZerothFrame, ///< All PCs are return addresses.
264 Calls ///< PCs are call addresses.
265};
266
268 switch (K) {
270 return "Number of expr evaluation successes";
272 return "Number of expr evaluation failures";
274 return "Number of frame var successes";
276 return "Number of frame var failures";
278 return "";
279 }
280 llvm_unreachable("Statistic not registered!");
281}
282
283} // namespace lldb_private
284
285namespace llvm {
286template <> struct format_provider<lldb_private::Vote> {
287 static void format(const lldb_private::Vote &V, llvm::raw_ostream &Stream,
288 StringRef Style) {
289 switch (V) {
291 Stream << "no";
292 return;
294 Stream << "no opinion";
295 return;
297 Stream << "yes";
298 return;
299 }
300 Stream << "invalid";
301 }
302};
303}
304
309
314
315/// The hardware and native stub capabilities for a given target,
316/// for translating a user's watchpoint request into hardware
317/// capable watchpoint resources.
318FLAGS_ENUM(WatchpointHardwareFeature){
319 /// lldb will fall back to a default that assumes the target
320 /// can watch up to pointer-size power-of-2 regions, aligned to
321 /// power-of-2.
322 eWatchpointHardwareFeatureUnknown = (1u << 0),
323
324 /// Intel systems can watch 1, 2, 4, or 8 bytes (in 64-bit targets),
325 /// aligned naturally.
326 eWatchpointHardwareX86 = (1u << 1),
327
328 /// ARM systems with Byte Address Select watchpoints
329 /// can watch any consecutive series of bytes up to the
330 /// size of a pointer (4 or 8 bytes), at a pointer-size
331 /// alignment.
332 eWatchpointHardwareArmBAS = (1u << 2),
333
334 /// ARM systems with MASK watchpoints can watch any power-of-2
335 /// sized region from 8 bytes to 2 gigabytes, aligned to that
336 /// same power-of-2 alignment.
337 eWatchpointHardwareArmMASK = (1u << 3),
338};
339LLDB_MARK_AS_BITMASK_ENUM(WatchpointHardwareFeature)
340
341#endif // LLDB_LLDB_PRIVATE_ENUMERATIONS_H
A class that describes a function.
Definition Function.h:400
A class that describes an executable image and its associated object and symbol files.
Definition Module.h:90
An error handling class.
Definition Status.h:118
#define LLDB_MARK_AS_BITMASK_ENUM(Enum)
#define FLAGS_ENUM(Name)
@ DoNoSelectMostRelevantFrame
@ SelectMostRelevantFrame
A class that represents a running process on the host machine.
@ AnyDeclContext
Math any declaration context.
HistoryPCType
Specifies the type of PCs when creating a HistoryThread.
@ Returns
PCs are return addresses, except for topmost frame.
@ ReturnsNoZerothFrame
All PCs are return addresses.
ExecutionPolicy
Expression execution policies.
std::string GetStatDescription(lldb_private::StatisticKind K)
InstructionType
Instruction types.
IterationAction
Useful for callbacks whose return type indicates whether to continue iteration or short-circuit.
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
VarSetOperationType
Settable state variable types.
@ eAddressTypeFile
Address is an address as found in an object or symbol file.
@ eAddressTypeLoad
Address is an address as in the current target inferior process.
@ eAddressTypeHost
Address is an address in the process that is running this code.
FormatCategoryItem
Format category entry types.
@ eStepTypeTraceOver
Single step one instruction, stepping over.
@ eStepTypeOut
Single step out a specified context.
@ eStepTypeScripted
A step type implemented by the script interpreter.
@ eStepTypeInto
Single step into a specified context.
@ eStepTypeOver
Single step over a specified context.
@ eStepTypeTrace
Single step one instruction.
static void format(const lldb_private::Vote &V, llvm::raw_ostream &Stream, StringRef Style)