Coverage Report

Created: 2023-09-30 09:22

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/lldb-enumerations.h
Line
Count
Source (jump to first uncovered line)
1
//===-- lldb-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_ENUMERATIONS_H
10
#define LLDB_LLDB_ENUMERATIONS_H
11
12
#include <cstdint>
13
#include <type_traits>
14
15
#ifndef SWIG
16
// Macro to enable bitmask operations on an enum.  Without this, Enum | Enum
17
// gets promoted to an int, so you have to say Enum a = Enum(eFoo | eBar).  If
18
// you mark Enum with LLDB_MARK_AS_BITMASK_ENUM(Enum), however, you can simply
19
// write Enum a = eFoo | eBar.
20
// Unfortunately, swig<3.0 doesn't recognise the constexpr keyword, so remove
21
// this entire block, as it is not necessary for swig processing.
22
#define LLDB_MARK_AS_BITMASK_ENUM(Enum)                                        \
23
7.43M
  constexpr Enum operator|(Enum a, Enum b) {                                   \
24
7.43M
    return static_cast<Enum>(                                                  \
25
7.43M
        static_cast<std::underlying_type<Enum>::type>(a) |                     \
26
7.43M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
27
7.43M
  }                                                                            \
Unexecuted instantiation: lldb::operator|(lldb::TypeClass, lldb::TypeClass)
lldb::operator|(lldb::SymbolContextItem, lldb::SymbolContextItem)
Line
Count
Source
23
4.60M
  constexpr Enum operator|(Enum a, Enum b) {                                   \
24
4.60M
    return static_cast<Enum>(                                                  \
25
4.60M
        static_cast<std::underlying_type<Enum>::type>(a) |                     \
26
4.60M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
27
4.60M
  }                                                                            \
lldb::operator|(lldb::Permissions, lldb::Permissions)
Line
Count
Source
23
43.9k
  constexpr Enum operator|(Enum a, Enum b) {                                   \
24
43.9k
    return static_cast<Enum>(                                                  \
25
43.9k
        static_cast<std::underlying_type<Enum>::type>(a) |                     \
26
43.9k
        static_cast<std::underlying_type<Enum>::type>(b));                     \
27
43.9k
  }                                                                            \
lldb::operator|(lldb::FunctionNameType, lldb::FunctionNameType)
Line
Count
Source
23
2.78M
  constexpr Enum operator|(Enum a, Enum b) {                                   \
24
2.78M
    return static_cast<Enum>(                                                  \
25
2.78M
        static_cast<std::underlying_type<Enum>::type>(a) |                     \
26
2.78M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
27
2.78M
  }                                                                            \
28
31.6M
  constexpr Enum operator&(Enum a, Enum b) {                                   \
29
31.6M
    return static_cast<Enum>(                                                  \
30
31.6M
        static_cast<std::underlying_type<Enum>::type>(a) &                     \
31
31.6M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
32
31.6M
  }                                                                            \
Unexecuted instantiation: lldb::operator&(lldb::Permissions, lldb::Permissions)
lldb::operator&(lldb::SymbolContextItem, lldb::SymbolContextItem)
Line
Count
Source
28
19.6M
  constexpr Enum operator&(Enum a, Enum b) {                                   \
29
19.6M
    return static_cast<Enum>(                                                  \
30
19.6M
        static_cast<std::underlying_type<Enum>::type>(a) &                     \
31
19.6M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
32
19.6M
  }                                                                            \
lldb::operator&(lldb::FunctionNameType, lldb::FunctionNameType)
Line
Count
Source
28
11.9M
  constexpr Enum operator&(Enum a, Enum b) {                                   \
29
11.9M
    return static_cast<Enum>(                                                  \
30
11.9M
        static_cast<std::underlying_type<Enum>::type>(a) &                     \
31
11.9M
        static_cast<std::underlying_type<Enum>::type>(b));                     \
32
11.9M
  }                                                                            \
lldb::operator&(lldb::TypeClass, lldb::TypeClass)
Line
Count
Source
28
3
  constexpr Enum operator&(Enum a, Enum b) {                                   \
29
3
    return static_cast<Enum>(                                                  \
30
3
        static_cast<std::underlying_type<Enum>::type>(a) &                     \
31
3
        static_cast<std::underlying_type<Enum>::type>(b));                     \
32
3
  }                                                                            \
33
2.73k
  constexpr Enum operator~(Enum a) {                                           \
34
2.73k
    return static_cast<Enum>(                                                  \
35
2.73k
        ~static_cast<std::underlying_type<Enum>::type>(a));                    \
36
2.73k
  }                                                                            \
Unexecuted instantiation: lldb::operator~(lldb::Permissions)
Unexecuted instantiation: lldb::operator~(lldb::TypeClass)
lldb::operator~(lldb::SymbolContextItem)
Line
Count
Source
33
38
  constexpr Enum operator~(Enum a) {                                           \
34
38
    return static_cast<Enum>(                                                  \
35
38
        ~static_cast<std::underlying_type<Enum>::type>(a));                    \
36
38
  }                                                                            \
lldb::operator~(lldb::FunctionNameType)
Line
Count
Source
33
2.69k
  constexpr Enum operator~(Enum a) {                                           \
34
2.69k
    return static_cast<Enum>(                                                  \
35
2.69k
        ~static_cast<std::underlying_type<Enum>::type>(a));                    \
36
2.69k
  }                                                                            \
37
436k
  inline Enum &operator|=(Enum &a, Enum b) {                                   \
38
436k
    a = a | b;                                                                 \
39
436k
    return a;                                                                  \
40
436k
  }                                                                            \
Unexecuted instantiation: lldb::operator|=(lldb::TypeClass&, lldb::TypeClass)
lldb::operator|=(lldb::SymbolContextItem&, lldb::SymbolContextItem)
Line
Count
Source
37
423k
  inline Enum &operator|=(Enum &a, Enum b) {                                   \
38
423k
    a = a | b;                                                                 \
39
423k
    return a;                                                                  \
40
423k
  }                                                                            \
lldb::operator|=(lldb::Permissions&, lldb::Permissions)
Line
Count
Source
37
5.23k
  inline Enum &operator|=(Enum &a, Enum b) {                                   \
38
5.23k
    a = a | b;                                                                 \
39
5.23k
    return a;                                                                  \
40
5.23k
  }                                                                            \
lldb::operator|=(lldb::FunctionNameType&, lldb::FunctionNameType)
Line
Count
Source
37
8.31k
  inline Enum &operator|=(Enum &a, Enum b) {                                   \
38
8.31k
    a = a | b;                                                                 \
39
8.31k
    return a;                                                                  \
40
8.31k
  }                                                                            \
41
0
  inline Enum &operator&=(Enum &a, Enum b) {                                   \
42
0
    a = a & b;                                                                 \
43
0
    return a;                                                                  \
44
0
  }
Unexecuted instantiation: lldb::operator&=(lldb::SymbolContextItem&, lldb::SymbolContextItem)
Unexecuted instantiation: lldb::operator&=(lldb::Permissions&, lldb::Permissions)
Unexecuted instantiation: lldb::operator&=(lldb::FunctionNameType&, lldb::FunctionNameType)
Unexecuted instantiation: lldb::operator&=(lldb::TypeClass&, lldb::TypeClass)
45
#else
46
#define LLDB_MARK_AS_BITMASK_ENUM(Enum)
47
#endif
48
49
#ifndef SWIG
50
// With MSVC, the default type of an enum is always signed, even if one of the
51
// enumerator values is too large to fit into a signed integer but would
52
// otherwise fit into an unsigned integer.  As a result of this, all of LLDB's
53
// flag-style enumerations that specify something like eValueFoo = 1u << 31
54
// result in negative values.  This usually just results in a benign warning,
55
// but in a few places we actually do comparisons on the enum values, which
56
// would cause a real bug.  Furthermore, there's no way to silence only this
57
// warning, as it's part of -Wmicrosoft which also catches a whole slew of
58
// other useful issues.
59
//
60
// To make matters worse, early versions of SWIG don't recognize the syntax of
61
// specifying the underlying type of an enum (and Python doesn't care anyway)
62
// so we need a way to specify the underlying type when the enum is being used
63
// from C++ code, but just use a regular enum when swig is pre-processing.
64
#define FLAGS_ENUM(Name) enum Name : unsigned
65
#define FLAGS_ANONYMOUS_ENUM() enum : unsigned
66
#else
67
#define FLAGS_ENUM(Name) enum Name
68
#define FLAGS_ANONYMOUS_ENUM() enum
69
#endif
70
71
namespace lldb {
72
73
/// Process and Thread States.
74
enum StateType {
75
  eStateInvalid = 0,
76
  eStateUnloaded,  ///< Process is object is valid, but not currently loaded
77
  eStateConnected, ///< Process is connected to remote debug services, but not
78
                   /// launched or attached to anything yet
79
  eStateAttaching, ///< Process is currently trying to attach
80
  eStateLaunching, ///< Process is in the process of launching
81
  // The state changes eStateAttaching and eStateLaunching are both sent while
82
  // the private state thread is either not yet started or paused. For that
83
  // reason, they should only be signaled as public state changes, and not
84
  // private state changes.
85
  eStateStopped,   ///< Process or thread is stopped and can be examined.
86
  eStateRunning,   ///< Process or thread is running and can't be examined.
87
  eStateStepping,  ///< Process or thread is in the process of stepping and can
88
                   /// not be examined.
89
  eStateCrashed,   ///< Process or thread has crashed and can be examined.
90
  eStateDetached,  ///< Process has been detached and can't be examined.
91
  eStateExited,    ///< Process has exited and can't be examined.
92
  eStateSuspended, ///< Process or thread is in a suspended state as far
93
                   ///< as the debugger is concerned while other processes
94
                   ///< or threads get the chance to run.
95
  kLastStateType = eStateSuspended
96
};
97
98
/// Launch Flags.
99
FLAGS_ENUM(LaunchFlags){
100
    eLaunchFlagNone = 0u,
101
    eLaunchFlagExec = (1u << 0),  ///< Exec when launching and turn the calling
102
                                  /// process into a new process
103
    eLaunchFlagDebug = (1u << 1), ///< Stop as soon as the process launches to
104
                                  /// allow the process to be debugged
105
    eLaunchFlagStopAtEntry = (1u
106
                              << 2), ///< Stop at the program entry point
107
                                     /// instead of auto-continuing when
108
                                     /// launching or attaching at entry point
109
    eLaunchFlagDisableASLR =
110
        (1u << 3), ///< Disable Address Space Layout Randomization
111
    eLaunchFlagDisableSTDIO =
112
        (1u << 4), ///< Disable stdio for inferior process (e.g. for a GUI app)
113
    eLaunchFlagLaunchInTTY =
114
        (1u << 5), ///< Launch the process in a new TTY if supported by the host
115
    eLaunchFlagLaunchInShell =
116
        (1u << 6), ///< Launch the process inside a shell to get shell expansion
117
    eLaunchFlagLaunchInSeparateProcessGroup =
118
        (1u << 7), ///< Launch the process in a separate process group
119
                   ///< If you are going to hand the process off (e.g. to
120
                   ///< debugserver)
121
    eLaunchFlagDontSetExitStatus = (1u << 8),
122
    ///< set this flag so lldb & the handee don't race to set its exit status.
123
    eLaunchFlagDetachOnError = (1u << 9), ///< If set, then the client stub
124
                                          ///< should detach rather than killing
125
                                          ///< the debugee
126
                                          ///< if it loses connection with lldb.
127
    eLaunchFlagShellExpandArguments =
128
        (1u << 10), ///< Perform shell-style argument expansion
129
    eLaunchFlagCloseTTYOnExit = (1u << 11), ///< Close the open TTY on exit
130
    eLaunchFlagInheritTCCFromParent =
131
        (1u << 12), ///< Don't make the inferior responsible for its own TCC
132
                    ///< permissions but instead inherit them from its parent.
133
};
134
135
/// Thread Run Modes.
136
enum RunMode { eOnlyThisThread, eAllThreads, eOnlyDuringStepping };
137
138
/// Byte ordering definitions.
139
enum ByteOrder {
140
  eByteOrderInvalid = 0,
141
  eByteOrderBig = 1,
142
  eByteOrderPDP = 2,
143
  eByteOrderLittle = 4
144
};
145
146
/// Register encoding definitions.
147
enum Encoding {
148
  eEncodingInvalid = 0,
149
  eEncodingUint,    ///< unsigned integer
150
  eEncodingSint,    ///< signed integer
151
  eEncodingIEEE754, ///< float
152
  eEncodingVector   ///< vector registers
153
};
154
155
/// Display format definitions.
156
enum Format {
157
  eFormatDefault = 0,
158
  eFormatInvalid = 0,
159
  eFormatBoolean,
160
  eFormatBinary,
161
  eFormatBytes,
162
  eFormatBytesWithASCII,
163
  eFormatChar,
164
  eFormatCharPrintable, ///< Only printable characters, '.' if not printable
165
  eFormatComplex,       ///< Floating point complex type
166
  eFormatComplexFloat = eFormatComplex,
167
  eFormatCString, ///< NULL terminated C strings
168
  eFormatDecimal,
169
  eFormatEnum,
170
  eFormatHex,
171
  eFormatHexUppercase,
172
  eFormatFloat,
173
  eFormatOctal,
174
  eFormatOSType, ///< OS character codes encoded into an integer 'PICT' 'text'
175
                 ///< etc...
176
  eFormatUnicode16,
177
  eFormatUnicode32,
178
  eFormatUnsigned,
179
  eFormatPointer,
180
  eFormatVectorOfChar,
181
  eFormatVectorOfSInt8,
182
  eFormatVectorOfUInt8,
183
  eFormatVectorOfSInt16,
184
  eFormatVectorOfUInt16,
185
  eFormatVectorOfSInt32,
186
  eFormatVectorOfUInt32,
187
  eFormatVectorOfSInt64,
188
  eFormatVectorOfUInt64,
189
  eFormatVectorOfFloat16,
190
  eFormatVectorOfFloat32,
191
  eFormatVectorOfFloat64,
192
  eFormatVectorOfUInt128,
193
  eFormatComplexInteger, ///< Integer complex type
194
  eFormatCharArray,      ///< Print characters with no single quotes, used for
195
                         ///< character arrays that can contain non printable
196
                         ///< characters
197
  eFormatAddressInfo,    ///< Describe what an address points to (func + offset
198
                      ///< with file/line, symbol + offset, data, etc)
199
  eFormatHexFloat,    ///< ISO C99 hex float string
200
  eFormatInstruction, ///< Disassemble an opcode
201
  eFormatVoid,        ///< Do not print this
202
  eFormatUnicode8,
203
  kNumFormats
204
};
205
206
/// Description levels for "void GetDescription(Stream *, DescriptionLevel)"
207
/// calls.
208
enum DescriptionLevel {
209
  eDescriptionLevelBrief = 0,
210
  eDescriptionLevelFull,
211
  eDescriptionLevelVerbose,
212
  eDescriptionLevelInitial,
213
  kNumDescriptionLevels
214
};
215
216
/// Script interpreter types.
217
enum ScriptLanguage {
218
  eScriptLanguageNone = 0,
219
  eScriptLanguagePython,
220
  eScriptLanguageLua,
221
  eScriptLanguageUnknown,
222
  eScriptLanguageDefault = eScriptLanguagePython
223
};
224
225
/// Register numbering types.
226
// See RegisterContext::ConvertRegisterKindToRegisterNumber to convert any of
227
// these to the lldb internal register numbering scheme (eRegisterKindLLDB).
228
enum RegisterKind {
229
  eRegisterKindEHFrame = 0, ///< the register numbers seen in eh_frame
230
  eRegisterKindDWARF,       ///< the register numbers seen DWARF
231
  eRegisterKindGeneric, ///< insn ptr reg, stack ptr reg, etc not specific to
232
                        ///< any particular target
233
  eRegisterKindProcessPlugin, ///< num used by the process plugin - e.g. by the
234
                              ///< remote gdb-protocol stub program
235
  eRegisterKindLLDB,          ///< lldb's internal register numbers
236
  kNumRegisterKinds
237
};
238
239
/// Thread stop reasons.
240
enum StopReason {
241
  eStopReasonInvalid = 0,
242
  eStopReasonNone,
243
  eStopReasonTrace,
244
  eStopReasonBreakpoint,
245
  eStopReasonWatchpoint,
246
  eStopReasonSignal,
247
  eStopReasonException,
248
  eStopReasonExec, ///< Program was re-exec'ed
249
  eStopReasonPlanComplete,
250
  eStopReasonThreadExiting,
251
  eStopReasonInstrumentation,
252
  eStopReasonProcessorTrace,
253
  eStopReasonFork,
254
  eStopReasonVFork,
255
  eStopReasonVForkDone,
256
};
257
258
/// Command Return Status Types.
259
enum ReturnStatus {
260
  eReturnStatusInvalid,
261
  eReturnStatusSuccessFinishNoResult,
262
  eReturnStatusSuccessFinishResult,
263
  eReturnStatusSuccessContinuingNoResult,
264
  eReturnStatusSuccessContinuingResult,
265
  eReturnStatusStarted,
266
  eReturnStatusFailed,
267
  eReturnStatusQuit
268
};
269
270
/// The results of expression evaluation.
271
enum ExpressionResults {
272
  eExpressionCompleted = 0,
273
  eExpressionSetupError,
274
  eExpressionParseError,
275
  eExpressionDiscarded,
276
  eExpressionInterrupted,
277
  eExpressionHitBreakpoint,
278
  eExpressionTimedOut,
279
  eExpressionResultUnavailable,
280
  eExpressionStoppedForDebug,
281
  eExpressionThreadVanished
282
};
283
284
enum SearchDepth {
285
  eSearchDepthInvalid = 0,
286
  eSearchDepthTarget,
287
  eSearchDepthModule,
288
  eSearchDepthCompUnit,
289
  eSearchDepthFunction,
290
  eSearchDepthBlock,
291
  eSearchDepthAddress,
292
  kLastSearchDepthKind = eSearchDepthAddress
293
};
294
295
/// Connection Status Types.
296
enum ConnectionStatus {
297
  eConnectionStatusSuccess,        ///< Success
298
  eConnectionStatusEndOfFile,      ///< End-of-file encountered
299
  eConnectionStatusError,          ///< Check GetError() for details
300
  eConnectionStatusTimedOut,       ///< Request timed out
301
  eConnectionStatusNoConnection,   ///< No connection
302
  eConnectionStatusLostConnection, ///< Lost connection while connected to a
303
                                   ///< valid connection
304
  eConnectionStatusInterrupted ///< Interrupted read
305
};
306
307
enum ErrorType {
308
  eErrorTypeInvalid,
309
  eErrorTypeGeneric,    ///< Generic errors that can be any value.
310
  eErrorTypeMachKernel, ///< Mach kernel error codes.
311
  eErrorTypePOSIX,      ///< POSIX error codes.
312
  eErrorTypeExpression, ///< These are from the ExpressionResults enum.
313
  eErrorTypeWin32       ///< Standard Win32 error codes.
314
};
315
316
enum ValueType {
317
  eValueTypeInvalid = 0,
318
  eValueTypeVariableGlobal = 1,   ///< globals variable
319
  eValueTypeVariableStatic = 2,   ///< static variable
320
  eValueTypeVariableArgument = 3, ///< function argument variables
321
  eValueTypeVariableLocal = 4,    ///< function local variables
322
  eValueTypeRegister = 5,         ///< stack frame register value
323
  eValueTypeRegisterSet = 6, ///< A collection of stack frame register values
324
  eValueTypeConstResult = 7, ///< constant result variables
325
  eValueTypeVariableThreadLocal = 8 ///< thread local storage variable
326
};
327
328
/// Token size/granularities for Input Readers.
329
330
enum InputReaderGranularity {
331
  eInputReaderGranularityInvalid = 0,
332
  eInputReaderGranularityByte,
333
  eInputReaderGranularityWord,
334
  eInputReaderGranularityLine,
335
  eInputReaderGranularityAll
336
};
337
338
/// These mask bits allow a common interface for queries that can
339
/// limit the amount of information that gets parsed to only the
340
/// information that is requested. These bits also can indicate what
341
/// actually did get resolved during query function calls.
342
///
343
/// Each definition corresponds to a one of the member variables
344
/// in this class, and requests that that item be resolved, or
345
/// indicates that the member did get resolved.
346
FLAGS_ENUM(SymbolContextItem){
347
    /// Set when \a target is requested from a query, or was located
348
    /// in query results
349
    eSymbolContextTarget = (1u << 0),
350
    /// Set when \a module is requested from a query, or was located
351
    /// in query results
352
    eSymbolContextModule = (1u << 1),
353
    /// Set when \a comp_unit is requested from a query, or was
354
    /// located in query results
355
    eSymbolContextCompUnit = (1u << 2),
356
    /// Set when \a function is requested from a query, or was located
357
    /// in query results
358
    eSymbolContextFunction = (1u << 3),
359
    /// Set when the deepest \a block is requested from a query, or
360
    /// was located in query results
361
    eSymbolContextBlock = (1u << 4),
362
    /// Set when \a line_entry is requested from a query, or was
363
    /// located in query results
364
    eSymbolContextLineEntry = (1u << 5),
365
    /// Set when \a symbol is requested from a query, or was located
366
    /// in query results
367
    eSymbolContextSymbol = (1u << 6),
368
    /// Indicates to try and lookup everything up during a routine
369
    /// symbol context query.
370
    eSymbolContextEverything = ((eSymbolContextSymbol << 1) - 1u),
371
    /// Set when \a global or static variable is requested from a
372
    /// query, or was located in query results.
373
    /// eSymbolContextVariable is potentially expensive to lookup so
374
    /// it isn't included in eSymbolContextEverything which stops it
375
    /// from being used during frame PC lookups and many other
376
    /// potential address to symbol context lookups.
377
    eSymbolContextVariable = (1u << 7),
378
379
    // Keep this last and up-to-date for what the last enum value is.
380
    eSymbolContextLastItem = eSymbolContextVariable,
381
};
382
LLDB_MARK_AS_BITMASK_ENUM(SymbolContextItem)
383
384
FLAGS_ENUM(Permissions){ePermissionsWritable = (1u << 0),
385
                        ePermissionsReadable = (1u << 1),
386
                        ePermissionsExecutable = (1u << 2)};
387
LLDB_MARK_AS_BITMASK_ENUM(Permissions)
388
389
enum InputReaderAction {
390
  eInputReaderActivate, ///< reader is newly pushed onto the reader stack
391
  eInputReaderAsynchronousOutputWritten, ///< an async output event occurred;
392
                                         ///< the reader may want to do
393
                                         ///< something
394
  eInputReaderReactivate, ///< reader is on top of the stack again after another
395
                          ///< reader was popped off
396
  eInputReaderDeactivate, ///< another reader was pushed on the stack
397
  eInputReaderGotToken,   ///< reader got one of its tokens (granularity)
398
  eInputReaderInterrupt, ///< reader received an interrupt signal (probably from
399
                         ///< a control-c)
400
  eInputReaderEndOfFile, ///< reader received an EOF char (probably from a
401
                         ///< control-d)
402
  eInputReaderDone       ///< reader was just popped off the stack and is done
403
};
404
405
FLAGS_ENUM(BreakpointEventType){
406
    eBreakpointEventTypeInvalidType = (1u << 0),
407
    eBreakpointEventTypeAdded = (1u << 1),
408
    eBreakpointEventTypeRemoved = (1u << 2),
409
    eBreakpointEventTypeLocationsAdded = (1u << 3), ///< Locations added doesn't
410
                                                    ///< get sent when the
411
                                                    ///< breakpoint is created
412
    eBreakpointEventTypeLocationsRemoved = (1u << 4),
413
    eBreakpointEventTypeLocationsResolved = (1u << 5),
414
    eBreakpointEventTypeEnabled = (1u << 6),
415
    eBreakpointEventTypeDisabled = (1u << 7),
416
    eBreakpointEventTypeCommandChanged = (1u << 8),
417
    eBreakpointEventTypeConditionChanged = (1u << 9),
418
    eBreakpointEventTypeIgnoreChanged = (1u << 10),
419
    eBreakpointEventTypeThreadChanged = (1u << 11),
420
    eBreakpointEventTypeAutoContinueChanged = (1u << 12)};
421
422
FLAGS_ENUM(WatchpointEventType){
423
    eWatchpointEventTypeInvalidType = (1u << 0),
424
    eWatchpointEventTypeAdded = (1u << 1),
425
    eWatchpointEventTypeRemoved = (1u << 2),
426
    eWatchpointEventTypeEnabled = (1u << 6),
427
    eWatchpointEventTypeDisabled = (1u << 7),
428
    eWatchpointEventTypeCommandChanged = (1u << 8),
429
    eWatchpointEventTypeConditionChanged = (1u << 9),
430
    eWatchpointEventTypeIgnoreChanged = (1u << 10),
431
    eWatchpointEventTypeThreadChanged = (1u << 11),
432
    eWatchpointEventTypeTypeChanged = (1u << 12)};
433
434
enum WatchpointWriteType {
435
  /// Don't stop when the watched memory region is written to.
436
  eWatchpointWriteTypeDisabled,
437
  /// Stop on any write access to the memory region, even if
438
  /// the value doesn't change.  On some architectures, a write
439
  /// near the memory region may be falsely reported as a match,
440
  /// and notify this spurious stop as a watchpoint trap.
441
  eWatchpointWriteTypeAlways,
442
  /// Stop on a write to the memory region that changes its value.
443
  /// This is most likely the behavior a user expects, and is the
444
  /// behavior in gdb.  lldb can silently ignore writes near the
445
  /// watched memory region that are reported as accesses to lldb.
446
  eWatchpointWriteTypeOnModify
447
};
448
449
/// Programming language type.
450
///
451
/// These enumerations use the same language enumerations as the DWARF
452
/// specification for ease of use and consistency.
453
/// The enum -> string code is in Language.cpp, don't change this
454
/// table without updating that code as well.
455
///
456
/// This datatype is used in SBExpressionOptions::SetLanguage() which
457
/// makes this type API. Do not change its underlying storage type!
458
enum LanguageType {
459
  eLanguageTypeUnknown = 0x0000,        ///< Unknown or invalid language value.
460
  eLanguageTypeC89 = 0x0001,            ///< ISO C:1989.
461
  eLanguageTypeC = 0x0002,              ///< Non-standardized C, such as K&R.
462
  eLanguageTypeAda83 = 0x0003,          ///< ISO Ada:1983.
463
  eLanguageTypeC_plus_plus = 0x0004,    ///< ISO C++:1998.
464
  eLanguageTypeCobol74 = 0x0005,        ///< ISO Cobol:1974.
465
  eLanguageTypeCobol85 = 0x0006,        ///< ISO Cobol:1985.
466
  eLanguageTypeFortran77 = 0x0007,      ///< ISO Fortran 77.
467
  eLanguageTypeFortran90 = 0x0008,      ///< ISO Fortran 90.
468
  eLanguageTypePascal83 = 0x0009,       ///< ISO Pascal:1983.
469
  eLanguageTypeModula2 = 0x000a,        ///< ISO Modula-2:1996.
470
  eLanguageTypeJava = 0x000b,           ///< Java.
471
  eLanguageTypeC99 = 0x000c,            ///< ISO C:1999.
472
  eLanguageTypeAda95 = 0x000d,          ///< ISO Ada:1995.
473
  eLanguageTypeFortran95 = 0x000e,      ///< ISO Fortran 95.
474
  eLanguageTypePLI = 0x000f,            ///< ANSI PL/I:1976.
475
  eLanguageTypeObjC = 0x0010,           ///< Objective-C.
476
  eLanguageTypeObjC_plus_plus = 0x0011, ///< Objective-C++.
477
  eLanguageTypeUPC = 0x0012,            ///< Unified Parallel C.
478
  eLanguageTypeD = 0x0013,              ///< D.
479
  eLanguageTypePython = 0x0014,         ///< Python.
480
  // NOTE: The below are DWARF5 constants, subject to change upon
481
  // completion of the DWARF5 specification
482
  eLanguageTypeOpenCL = 0x0015,         ///< OpenCL.
483
  eLanguageTypeGo = 0x0016,             ///< Go.
484
  eLanguageTypeModula3 = 0x0017,        ///< Modula 3.
485
  eLanguageTypeHaskell = 0x0018,        ///< Haskell.
486
  eLanguageTypeC_plus_plus_03 = 0x0019, ///< ISO C++:2003.
487
  eLanguageTypeC_plus_plus_11 = 0x001a, ///< ISO C++:2011.
488
  eLanguageTypeOCaml = 0x001b,          ///< OCaml.
489
  eLanguageTypeRust = 0x001c,           ///< Rust.
490
  eLanguageTypeC11 = 0x001d,            ///< ISO C:2011.
491
  eLanguageTypeSwift = 0x001e,          ///< Swift.
492
  eLanguageTypeJulia = 0x001f,          ///< Julia.
493
  eLanguageTypeDylan = 0x0020,          ///< Dylan.
494
  eLanguageTypeC_plus_plus_14 = 0x0021, ///< ISO C++:2014.
495
  eLanguageTypeFortran03 = 0x0022,      ///< ISO Fortran 2003.
496
  eLanguageTypeFortran08 = 0x0023,      ///< ISO Fortran 2008.
497
  eLanguageTypeRenderScript = 0x0024,
498
  eLanguageTypeBLISS = 0x0025,
499
  eLanguageTypeKotlin = 0x0026,
500
  eLanguageTypeZig = 0x0027,
501
  eLanguageTypeCrystal = 0x0028,
502
  eLanguageTypeC_plus_plus_17 = 0x002a, ///< ISO C++:2017.
503
  eLanguageTypeC_plus_plus_20 = 0x002b, ///< ISO C++:2020.
504
  eLanguageTypeC17 = 0x002c,
505
  eLanguageTypeFortran18 = 0x002d,
506
  eLanguageTypeAda2005 = 0x002e,
507
  eLanguageTypeAda2012 = 0x002f,
508
  eLanguageTypeHIP = 0x0030,
509
  eLanguageTypeAssembly = 0x0031,
510
  eLanguageTypeC_sharp = 0x0032,
511
  eLanguageTypeMojo = 0x0033,
512
513
  // Vendor Extensions
514
  // Note: Language::GetNameForLanguageType
515
  // assumes these can be used as indexes into array language_names, and
516
  // Language::SetLanguageFromCString and Language::AsCString assume these can
517
  // be used as indexes into array g_languages.
518
  eLanguageTypeMipsAssembler, ///< Mips_Assembler.
519
  // Mojo will move to the common list of languages once the DWARF committee
520
  // creates a language code for it.
521
  eNumLanguageTypes
522
};
523
524
enum InstrumentationRuntimeType {
525
  eInstrumentationRuntimeTypeAddressSanitizer = 0x0000,
526
  eInstrumentationRuntimeTypeThreadSanitizer = 0x0001,
527
  eInstrumentationRuntimeTypeUndefinedBehaviorSanitizer = 0x0002,
528
  eInstrumentationRuntimeTypeMainThreadChecker = 0x0003,
529
  eInstrumentationRuntimeTypeSwiftRuntimeReporting = 0x0004,
530
  eNumInstrumentationRuntimeTypes
531
};
532
533
enum DynamicValueType {
534
  eNoDynamicValues = 0,
535
  eDynamicCanRunTarget = 1,
536
  eDynamicDontRunTarget = 2
537
};
538
539
enum StopShowColumn {
540
  eStopShowColumnAnsiOrCaret = 0,
541
  eStopShowColumnAnsi = 1,
542
  eStopShowColumnCaret = 2,
543
  eStopShowColumnNone = 3
544
};
545
546
enum AccessType {
547
  eAccessNone,
548
  eAccessPublic,
549
  eAccessPrivate,
550
  eAccessProtected,
551
  eAccessPackage
552
};
553
554
enum CommandArgumentType {
555
  eArgTypeAddress = 0,
556
  eArgTypeAddressOrExpression,
557
  eArgTypeAliasName,
558
  eArgTypeAliasOptions,
559
  eArgTypeArchitecture,
560
  eArgTypeBoolean,
561
  eArgTypeBreakpointID,
562
  eArgTypeBreakpointIDRange,
563
  eArgTypeBreakpointName,
564
  eArgTypeByteSize,
565
  eArgTypeClassName,
566
  eArgTypeCommandName,
567
  eArgTypeCount,
568
  eArgTypeDescriptionVerbosity,
569
  eArgTypeDirectoryName,
570
  eArgTypeDisassemblyFlavor,
571
  eArgTypeEndAddress,
572
  eArgTypeExpression,
573
  eArgTypeExpressionPath,
574
  eArgTypeExprFormat,
575
  eArgTypeFileLineColumn,
576
  eArgTypeFilename,
577
  eArgTypeFormat,
578
  eArgTypeFrameIndex,
579
  eArgTypeFullName,
580
  eArgTypeFunctionName,
581
  eArgTypeFunctionOrSymbol,
582
  eArgTypeGDBFormat,
583
  eArgTypeHelpText,
584
  eArgTypeIndex,
585
  eArgTypeLanguage,
586
  eArgTypeLineNum,
587
  eArgTypeLogCategory,
588
  eArgTypeLogChannel,
589
  eArgTypeMethod,
590
  eArgTypeName,
591
  eArgTypeNewPathPrefix,
592
  eArgTypeNumLines,
593
  eArgTypeNumberPerLine,
594
  eArgTypeOffset,
595
  eArgTypeOldPathPrefix,
596
  eArgTypeOneLiner,
597
  eArgTypePath,
598
  eArgTypePermissionsNumber,
599
  eArgTypePermissionsString,
600
  eArgTypePid,
601
  eArgTypePlugin,
602
  eArgTypeProcessName,
603
  eArgTypePythonClass,
604
  eArgTypePythonFunction,
605
  eArgTypePythonScript,
606
  eArgTypeQueueName,
607
  eArgTypeRegisterName,
608
  eArgTypeRegularExpression,
609
  eArgTypeRunArgs,
610
  eArgTypeRunMode,
611
  eArgTypeScriptedCommandSynchronicity,
612
  eArgTypeScriptLang,
613
  eArgTypeSearchWord,
614
  eArgTypeSelector,
615
  eArgTypeSettingIndex,
616
  eArgTypeSettingKey,
617
  eArgTypeSettingPrefix,
618
  eArgTypeSettingVariableName,
619
  eArgTypeShlibName,
620
  eArgTypeSourceFile,
621
  eArgTypeSortOrder,
622
  eArgTypeStartAddress,
623
  eArgTypeSummaryString,
624
  eArgTypeSymbol,
625
  eArgTypeThreadID,
626
  eArgTypeThreadIndex,
627
  eArgTypeThreadName,
628
  eArgTypeTypeName,
629
  eArgTypeUnsignedInteger,
630
  eArgTypeUnixSignal,
631
  eArgTypeVarName,
632
  eArgTypeValue,
633
  eArgTypeWidth,
634
  eArgTypeNone,
635
  eArgTypePlatform,
636
  eArgTypeWatchpointID,
637
  eArgTypeWatchpointIDRange,
638
  eArgTypeWatchType,
639
  eArgRawInput,
640
  eArgTypeCommand,
641
  eArgTypeColumnNum,
642
  eArgTypeModuleUUID,
643
  eArgTypeSaveCoreStyle,
644
  eArgTypeLogHandler,
645
  eArgTypeSEDStylePair,
646
  eArgTypeRecognizerID,
647
  eArgTypeConnectURL,
648
  eArgTypeTargetID,
649
  eArgTypeStopHookID,
650
  eArgTypeCompletionType,
651
  eArgTypeLastArg // Always keep this entry as the last entry in this
652
                  // enumeration!!
653
};
654
655
/// Symbol types.
656
// Symbol holds the SymbolType in a 6-bit field (m_type), so if you get over 63
657
// entries you will have to resize that field.
658
enum SymbolType {
659
  eSymbolTypeAny = 0,
660
  eSymbolTypeInvalid = 0,
661
  eSymbolTypeAbsolute,
662
  eSymbolTypeCode,
663
  eSymbolTypeResolver,
664
  eSymbolTypeData,
665
  eSymbolTypeTrampoline,
666
  eSymbolTypeRuntime,
667
  eSymbolTypeException,
668
  eSymbolTypeSourceFile,
669
  eSymbolTypeHeaderFile,
670
  eSymbolTypeObjectFile,
671
  eSymbolTypeCommonBlock,
672
  eSymbolTypeBlock,
673
  eSymbolTypeLocal,
674
  eSymbolTypeParam,
675
  eSymbolTypeVariable,
676
  eSymbolTypeVariableType,
677
  eSymbolTypeLineEntry,
678
  eSymbolTypeLineHeader,
679
  eSymbolTypeScopeBegin,
680
  eSymbolTypeScopeEnd,
681
  eSymbolTypeAdditional, ///< When symbols take more than one entry, the extra
682
                         ///< entries get this type
683
  eSymbolTypeCompiler,
684
  eSymbolTypeInstrumentation,
685
  eSymbolTypeUndefined,
686
  eSymbolTypeObjCClass,
687
  eSymbolTypeObjCMetaClass,
688
  eSymbolTypeObjCIVar,
689
  eSymbolTypeReExported
690
};
691
692
enum SectionType {
693
  eSectionTypeInvalid,
694
  eSectionTypeCode,
695
  eSectionTypeContainer, ///< The section contains child sections
696
  eSectionTypeData,
697
  eSectionTypeDataCString,         ///< Inlined C string data
698
  eSectionTypeDataCStringPointers, ///< Pointers to C string data
699
  eSectionTypeDataSymbolAddress,   ///< Address of a symbol in the symbol table
700
  eSectionTypeData4,
701
  eSectionTypeData8,
702
  eSectionTypeData16,
703
  eSectionTypeDataPointers,
704
  eSectionTypeDebug,
705
  eSectionTypeZeroFill,
706
  eSectionTypeDataObjCMessageRefs, ///< Pointer to function pointer + selector
707
  eSectionTypeDataObjCCFStrings,   ///< Objective-C const CFString/NSString
708
                                   ///< objects
709
  eSectionTypeDWARFDebugAbbrev,
710
  eSectionTypeDWARFDebugAddr,
711
  eSectionTypeDWARFDebugAranges,
712
  eSectionTypeDWARFDebugCuIndex,
713
  eSectionTypeDWARFDebugFrame,
714
  eSectionTypeDWARFDebugInfo,
715
  eSectionTypeDWARFDebugLine,
716
  eSectionTypeDWARFDebugLoc,
717
  eSectionTypeDWARFDebugMacInfo,
718
  eSectionTypeDWARFDebugMacro,
719
  eSectionTypeDWARFDebugPubNames,
720
  eSectionTypeDWARFDebugPubTypes,
721
  eSectionTypeDWARFDebugRanges,
722
  eSectionTypeDWARFDebugStr,
723
  eSectionTypeDWARFDebugStrOffsets,
724
  eSectionTypeDWARFAppleNames,
725
  eSectionTypeDWARFAppleTypes,
726
  eSectionTypeDWARFAppleNamespaces,
727
  eSectionTypeDWARFAppleObjC,
728
  eSectionTypeELFSymbolTable,       ///< Elf SHT_SYMTAB section
729
  eSectionTypeELFDynamicSymbols,    ///< Elf SHT_DYNSYM section
730
  eSectionTypeELFRelocationEntries, ///< Elf SHT_REL or SHT_REL section
731
  eSectionTypeELFDynamicLinkInfo,   ///< Elf SHT_DYNAMIC section
732
  eSectionTypeEHFrame,
733
  eSectionTypeARMexidx,
734
  eSectionTypeARMextab,
735
  eSectionTypeCompactUnwind, ///< compact unwind section in Mach-O,
736
                             ///< __TEXT,__unwind_info
737
  eSectionTypeGoSymtab,
738
  eSectionTypeAbsoluteAddress, ///< Dummy section for symbols with absolute
739
                               ///< address
740
  eSectionTypeDWARFGNUDebugAltLink,
741
  eSectionTypeDWARFDebugTypes, ///< DWARF .debug_types section
742
  eSectionTypeDWARFDebugNames, ///< DWARF v5 .debug_names
743
  eSectionTypeOther,
744
  eSectionTypeDWARFDebugLineStr,  ///< DWARF v5 .debug_line_str
745
  eSectionTypeDWARFDebugRngLists, ///< DWARF v5 .debug_rnglists
746
  eSectionTypeDWARFDebugLocLists, ///< DWARF v5 .debug_loclists
747
  eSectionTypeDWARFDebugAbbrevDwo,
748
  eSectionTypeDWARFDebugInfoDwo,
749
  eSectionTypeDWARFDebugStrDwo,
750
  eSectionTypeDWARFDebugStrOffsetsDwo,
751
  eSectionTypeDWARFDebugTypesDwo,
752
  eSectionTypeDWARFDebugRngListsDwo,
753
  eSectionTypeDWARFDebugLocDwo,
754
  eSectionTypeDWARFDebugLocListsDwo,
755
  eSectionTypeDWARFDebugTuIndex,
756
  eSectionTypeCTF,
757
  eSectionTypeSwiftModules,
758
};
759
760
FLAGS_ENUM(EmulateInstructionOptions){
761
    eEmulateInstructionOptionNone = (0u),
762
    eEmulateInstructionOptionAutoAdvancePC = (1u << 0),
763
    eEmulateInstructionOptionIgnoreConditions = (1u << 1)};
764
765
FLAGS_ENUM(FunctionNameType){
766
    eFunctionNameTypeNone = 0u,
767
    eFunctionNameTypeAuto =
768
        (1u << 1), ///< Automatically figure out which FunctionNameType
769
                   ///< bits to set based on the function name.
770
    eFunctionNameTypeFull = (1u << 2), ///< The function name.
771
    ///< For C this is the same as just the name of the function For C++ this is
772
    ///< the mangled or demangled version of the mangled name. For ObjC this is
773
    ///< the full function signature with the + or - and the square brackets and
774
    ///< the class and selector
775
    eFunctionNameTypeBase = (1u
776
                             << 3), ///< The function name only, no namespaces
777
                                    ///< or arguments and no class
778
                                    ///< methods or selectors will be searched.
779
    eFunctionNameTypeMethod = (1u << 4), ///< Find function by method name (C++)
780
                                         ///< with no namespace or arguments
781
    eFunctionNameTypeSelector =
782
        (1u << 5), ///< Find function by selector name (ObjC) names
783
    eFunctionNameTypeAny =
784
        eFunctionNameTypeAuto ///< DEPRECATED: use eFunctionNameTypeAuto
785
};
786
LLDB_MARK_AS_BITMASK_ENUM(FunctionNameType)
787
788
/// Basic types enumeration for the public API SBType::GetBasicType().
789
enum BasicType {
790
  eBasicTypeInvalid = 0,
791
  eBasicTypeVoid = 1,
792
  eBasicTypeChar,
793
  eBasicTypeSignedChar,
794
  eBasicTypeUnsignedChar,
795
  eBasicTypeWChar,
796
  eBasicTypeSignedWChar,
797
  eBasicTypeUnsignedWChar,
798
  eBasicTypeChar16,
799
  eBasicTypeChar32,
800
  eBasicTypeChar8,
801
  eBasicTypeShort,
802
  eBasicTypeUnsignedShort,
803
  eBasicTypeInt,
804
  eBasicTypeUnsignedInt,
805
  eBasicTypeLong,
806
  eBasicTypeUnsignedLong,
807
  eBasicTypeLongLong,
808
  eBasicTypeUnsignedLongLong,
809
  eBasicTypeInt128,
810
  eBasicTypeUnsignedInt128,
811
  eBasicTypeBool,
812
  eBasicTypeHalf,
813
  eBasicTypeFloat,
814
  eBasicTypeDouble,
815
  eBasicTypeLongDouble,
816
  eBasicTypeFloatComplex,
817
  eBasicTypeDoubleComplex,
818
  eBasicTypeLongDoubleComplex,
819
  eBasicTypeObjCID,
820
  eBasicTypeObjCClass,
821
  eBasicTypeObjCSel,
822
  eBasicTypeNullPtr,
823
  eBasicTypeOther
824
};
825
826
/// Deprecated
827
enum TraceType {
828
  eTraceTypeNone = 0,
829
830
  /// Intel Processor Trace
831
  eTraceTypeProcessorTrace
832
};
833
834
enum StructuredDataType {
835
  eStructuredDataTypeInvalid = -1,
836
  eStructuredDataTypeNull = 0,
837
  eStructuredDataTypeGeneric,
838
  eStructuredDataTypeArray,
839
  eStructuredDataTypeInteger,
840
  eStructuredDataTypeFloat,
841
  eStructuredDataTypeBoolean,
842
  eStructuredDataTypeString,
843
  eStructuredDataTypeDictionary,
844
  eStructuredDataTypeSignedInteger,
845
  eStructuredDataTypeUnsignedInteger = eStructuredDataTypeInteger,
846
};
847
848
FLAGS_ENUM(TypeClass){
849
    eTypeClassInvalid = (0u), eTypeClassArray = (1u << 0),
850
    eTypeClassBlockPointer = (1u << 1), eTypeClassBuiltin = (1u << 2),
851
    eTypeClassClass = (1u << 3), eTypeClassComplexFloat = (1u << 4),
852
    eTypeClassComplexInteger = (1u << 5), eTypeClassEnumeration = (1u << 6),
853
    eTypeClassFunction = (1u << 7), eTypeClassMemberPointer = (1u << 8),
854
    eTypeClassObjCObject = (1u << 9), eTypeClassObjCInterface = (1u << 10),
855
    eTypeClassObjCObjectPointer = (1u << 11), eTypeClassPointer = (1u << 12),
856
    eTypeClassReference = (1u << 13), eTypeClassStruct = (1u << 14),
857
    eTypeClassTypedef = (1u << 15), eTypeClassUnion = (1u << 16),
858
    eTypeClassVector = (1u << 17),
859
    // Define the last type class as the MSBit of a 32 bit value
860
    eTypeClassOther = (1u << 31),
861
    // Define a mask that can be used for any type when finding types
862
    eTypeClassAny = (0xffffffffu)};
863
LLDB_MARK_AS_BITMASK_ENUM(TypeClass)
864
865
enum TemplateArgumentKind {
866
  eTemplateArgumentKindNull = 0,
867
  eTemplateArgumentKindType,
868
  eTemplateArgumentKindDeclaration,
869
  eTemplateArgumentKindIntegral,
870
  eTemplateArgumentKindTemplate,
871
  eTemplateArgumentKindTemplateExpansion,
872
  eTemplateArgumentKindExpression,
873
  eTemplateArgumentKindPack,
874
  eTemplateArgumentKindNullPtr,
875
};
876
877
/// Type of match to be performed when looking for a formatter for a data type.
878
/// Used by classes like SBTypeNameSpecifier or lldb_private::TypeMatcher.
879
enum FormatterMatchType {
880
  eFormatterMatchExact,
881
  eFormatterMatchRegex,
882
  eFormatterMatchCallback,
883
884
  eLastFormatterMatchType = eFormatterMatchCallback,
885
};
886
887
/// Options that can be set for a formatter to alter its behavior. Not
888
/// all of these are applicable to all formatter types.
889
FLAGS_ENUM(TypeOptions){eTypeOptionNone = (0u),
890
                        eTypeOptionCascade = (1u << 0),
891
                        eTypeOptionSkipPointers = (1u << 1),
892
                        eTypeOptionSkipReferences = (1u << 2),
893
                        eTypeOptionHideChildren = (1u << 3),
894
                        eTypeOptionHideValue = (1u << 4),
895
                        eTypeOptionShowOneLiner = (1u << 5),
896
                        eTypeOptionHideNames = (1u << 6),
897
                        eTypeOptionNonCacheable = (1u << 7),
898
                        eTypeOptionHideEmptyAggregates = (1u << 8),
899
                        eTypeOptionFrontEndWantsDereference = (1u << 9)};
900
901
/// This is the return value for frame comparisons.  If you are comparing frame
902
/// A to frame B the following cases arise:
903
///
904
///    1) When frame A pushes frame B (or a frame that ends up pushing
905
///       B) A is Older than B.
906
///
907
///    2) When frame A pushed frame B (or if frameA is on the stack
908
///       but B is not) A is Younger than B.
909
///
910
///    3) When frame A and frame B have the same StackID, they are
911
///       Equal.
912
///
913
///    4) When frame A and frame B have the same immediate parent
914
///       frame, but are not equal, the comparison yields SameParent.
915
///
916
///    5) If the two frames are on different threads or processes the
917
///       comparison is Invalid.
918
///
919
///    6) If for some reason we can't figure out what went on, we
920
///       return Unknown.
921
enum FrameComparison {
922
  eFrameCompareInvalid,
923
  eFrameCompareUnknown,
924
  eFrameCompareEqual,
925
  eFrameCompareSameParent,
926
  eFrameCompareYounger,
927
  eFrameCompareOlder
928
};
929
930
/// File Permissions.
931
///
932
/// Designed to mimic the unix file permission bits so they can be used with
933
/// functions that set 'mode_t' to certain values for permissions.
934
FLAGS_ENUM(FilePermissions){
935
    eFilePermissionsUserRead = (1u << 8),
936
    eFilePermissionsUserWrite = (1u << 7),
937
    eFilePermissionsUserExecute = (1u << 6),
938
    eFilePermissionsGroupRead = (1u << 5),
939
    eFilePermissionsGroupWrite = (1u << 4),
940
    eFilePermissionsGroupExecute = (1u << 3),
941
    eFilePermissionsWorldRead = (1u << 2),
942
    eFilePermissionsWorldWrite = (1u << 1),
943
    eFilePermissionsWorldExecute = (1u << 0),
944
945
    eFilePermissionsUserRW = (eFilePermissionsUserRead |
946
                              eFilePermissionsUserWrite | 0),
947
    eFileFilePermissionsUserRX = (eFilePermissionsUserRead | 0 |
948
                                  eFilePermissionsUserExecute),
949
    eFilePermissionsUserRWX = (eFilePermissionsUserRead |
950
                               eFilePermissionsUserWrite |
951
                               eFilePermissionsUserExecute),
952
953
    eFilePermissionsGroupRW = (eFilePermissionsGroupRead |
954
                               eFilePermissionsGroupWrite | 0),
955
    eFilePermissionsGroupRX = (eFilePermissionsGroupRead | 0 |
956
                               eFilePermissionsGroupExecute),
957
    eFilePermissionsGroupRWX = (eFilePermissionsGroupRead |
958
                                eFilePermissionsGroupWrite |
959
                                eFilePermissionsGroupExecute),
960
961
    eFilePermissionsWorldRW = (eFilePermissionsWorldRead |
962
                               eFilePermissionsWorldWrite | 0),
963
    eFilePermissionsWorldRX = (eFilePermissionsWorldRead | 0 |
964
                               eFilePermissionsWorldExecute),
965
    eFilePermissionsWorldRWX = (eFilePermissionsWorldRead |
966
                                eFilePermissionsWorldWrite |
967
                                eFilePermissionsWorldExecute),
968
969
    eFilePermissionsEveryoneR = (eFilePermissionsUserRead |
970
                                 eFilePermissionsGroupRead |
971
                                 eFilePermissionsWorldRead),
972
    eFilePermissionsEveryoneW = (eFilePermissionsUserWrite |
973
                                 eFilePermissionsGroupWrite |
974
                                 eFilePermissionsWorldWrite),
975
    eFilePermissionsEveryoneX = (eFilePermissionsUserExecute |
976
                                 eFilePermissionsGroupExecute |
977
                                 eFilePermissionsWorldExecute),
978
979
    eFilePermissionsEveryoneRW = (eFilePermissionsEveryoneR |
980
                                  eFilePermissionsEveryoneW | 0),
981
    eFilePermissionsEveryoneRX = (eFilePermissionsEveryoneR | 0 |
982
                                  eFilePermissionsEveryoneX),
983
    eFilePermissionsEveryoneRWX = (eFilePermissionsEveryoneR |
984
                                   eFilePermissionsEveryoneW |
985
                                   eFilePermissionsEveryoneX),
986
    eFilePermissionsFileDefault = eFilePermissionsUserRW,
987
    eFilePermissionsDirectoryDefault = eFilePermissionsUserRWX,
988
};
989
990
/// Queue work item types.
991
///
992
/// The different types of work that can be enqueued on a libdispatch aka Grand
993
/// Central Dispatch (GCD) queue.
994
enum QueueItemKind {
995
  eQueueItemKindUnknown = 0,
996
  eQueueItemKindFunction,
997
  eQueueItemKindBlock
998
};
999
1000
/// Queue type.
1001
///
1002
/// libdispatch aka Grand Central Dispatch (GCD) queues can be either
1003
/// serial (executing on one thread) or concurrent (executing on
1004
/// multiple threads).
1005
enum QueueKind {
1006
  eQueueKindUnknown = 0,
1007
  eQueueKindSerial,
1008
  eQueueKindConcurrent
1009
};
1010
1011
/// Expression Evaluation Stages.
1012
///
1013
/// These are the cancellable stages of expression evaluation, passed
1014
/// to the expression evaluation callback, so that you can interrupt
1015
/// expression evaluation at the various points in its lifecycle.
1016
enum ExpressionEvaluationPhase {
1017
  eExpressionEvaluationParse = 0,
1018
  eExpressionEvaluationIRGen,
1019
  eExpressionEvaluationExecution,
1020
  eExpressionEvaluationComplete
1021
};
1022
1023
/// Architecture-agnostic categorization of instructions for traversing the
1024
/// control flow of a trace.
1025
///
1026
/// A single instruction can match one or more of these categories.
1027
enum InstructionControlFlowKind {
1028
  /// The instruction could not be classified.
1029
  eInstructionControlFlowKindUnknown = 0,
1030
  /// The instruction is something not listed below, i.e. it's a sequential
1031
  /// instruction that doesn't affect the control flow of the program.
1032
  eInstructionControlFlowKindOther,
1033
  /// The instruction is a near (function) call.
1034
  eInstructionControlFlowKindCall,
1035
  /// The instruction is a near (function) return.
1036
  eInstructionControlFlowKindReturn,
1037
  /// The instruction is a near unconditional jump.
1038
  eInstructionControlFlowKindJump,
1039
  /// The instruction is a near conditional jump.
1040
  eInstructionControlFlowKindCondJump,
1041
  /// The instruction is a call-like far transfer.
1042
  /// E.g. SYSCALL, SYSENTER, or FAR CALL.
1043
  eInstructionControlFlowKindFarCall,
1044
  /// The instruction is a return-like far transfer.
1045
  /// E.g. SYSRET, SYSEXIT, IRET, or FAR RET.
1046
  eInstructionControlFlowKindFarReturn,
1047
  /// The instruction is a jump-like far transfer.
1048
  /// E.g. FAR JMP.
1049
  eInstructionControlFlowKindFarJump
1050
};
1051
1052
/// Watchpoint Kind.
1053
///
1054
/// Indicates what types of events cause the watchpoint to fire. Used by Native
1055
/// *Protocol-related classes.
1056
FLAGS_ENUM(WatchpointKind){eWatchpointKindWrite = (1u << 0),
1057
                           eWatchpointKindRead = (1u << 1)};
1058
1059
enum GdbSignal {
1060
  eGdbSignalBadAccess = 0x91,
1061
  eGdbSignalBadInstruction = 0x92,
1062
  eGdbSignalArithmetic = 0x93,
1063
  eGdbSignalEmulation = 0x94,
1064
  eGdbSignalSoftware = 0x95,
1065
  eGdbSignalBreakpoint = 0x96
1066
};
1067
1068
/// Used with SBHostOS::GetLLDBPath (lldb::PathType) to find files that are
1069
/// related to LLDB on the current host machine. Most files are
1070
/// relative to LLDB or are in known locations.
1071
enum PathType {
1072
  ePathTypeLLDBShlibDir, ///< The directory where the lldb.so (unix) or LLDB
1073
                         ///< mach-o file in LLDB.framework (MacOSX) exists
1074
  ePathTypeSupportExecutableDir, ///< Find LLDB support executable directory
1075
                                 ///< (debugserver, etc)
1076
  ePathTypeHeaderDir,            ///< Find LLDB header file directory
1077
  ePathTypePythonDir,            ///< Find Python modules (PYTHONPATH) directory
1078
  ePathTypeLLDBSystemPlugins,    ///< System plug-ins directory
1079
  ePathTypeLLDBUserPlugins,      ///< User plug-ins directory
1080
  ePathTypeLLDBTempSystemDir, ///< The LLDB temp directory for this system that
1081
                              ///< will be cleaned up on exit
1082
  ePathTypeGlobalLLDBTempSystemDir, ///< The LLDB temp directory for this
1083
                                    ///< system, NOT cleaned up on a process
1084
                                    ///< exit.
1085
  ePathTypeClangDir ///< Find path to Clang builtin headers
1086
};
1087
1088
/// Kind of member function.
1089
///
1090
/// Used by the type system.
1091
enum MemberFunctionKind {
1092
  eMemberFunctionKindUnknown = 0,    ///< Not sure what the type of this is
1093
  eMemberFunctionKindConstructor,    ///< A function used to create instances
1094
  eMemberFunctionKindDestructor,     ///< A function used to tear down existing
1095
                                     ///< instances
1096
  eMemberFunctionKindInstanceMethod, ///< A function that applies to a specific
1097
                                     ///< instance
1098
  eMemberFunctionKindStaticMethod ///< A function that applies to a type rather
1099
                                  ///< than any instance
1100
};
1101
1102
/// String matching algorithm used by SBTarget.
1103
enum MatchType { eMatchTypeNormal, eMatchTypeRegex, eMatchTypeStartsWith };
1104
1105
/// Bitmask that describes details about a type.
1106
FLAGS_ENUM(TypeFlags){
1107
    eTypeHasChildren = (1u << 0),       eTypeHasValue = (1u << 1),
1108
    eTypeIsArray = (1u << 2),           eTypeIsBlock = (1u << 3),
1109
    eTypeIsBuiltIn = (1u << 4),         eTypeIsClass = (1u << 5),
1110
    eTypeIsCPlusPlus = (1u << 6),       eTypeIsEnumeration = (1u << 7),
1111
    eTypeIsFuncPrototype = (1u << 8),   eTypeIsMember = (1u << 9),
1112
    eTypeIsObjC = (1u << 10),           eTypeIsPointer = (1u << 11),
1113
    eTypeIsReference = (1u << 12),      eTypeIsStructUnion = (1u << 13),
1114
    eTypeIsTemplate = (1u << 14),       eTypeIsTypedef = (1u << 15),
1115
    eTypeIsVector = (1u << 16),         eTypeIsScalar = (1u << 17),
1116
    eTypeIsInteger = (1u << 18),        eTypeIsFloat = (1u << 19),
1117
    eTypeIsComplex = (1u << 20),        eTypeIsSigned = (1u << 21),
1118
    eTypeInstanceIsPointer = (1u << 22)};
1119
1120
FLAGS_ENUM(CommandFlags){
1121
    /// eCommandRequiresTarget
1122
    ///
1123
    /// Ensures a valid target is contained in m_exe_ctx prior to executing the
1124
    /// command. If a target doesn't exist or is invalid, the command will fail
1125
    /// and CommandObject::GetInvalidTargetDescription() will be returned as the
1126
    /// error. CommandObject subclasses can override the virtual function for
1127
    /// GetInvalidTargetDescription() to provide custom strings when needed.
1128
    eCommandRequiresTarget = (1u << 0),
1129
    /// eCommandRequiresProcess
1130
    ///
1131
    /// Ensures a valid process is contained in m_exe_ctx prior to executing the
1132
    /// command. If a process doesn't exist or is invalid, the command will fail
1133
    /// and CommandObject::GetInvalidProcessDescription() will be returned as
1134
    /// the error. CommandObject subclasses can override the virtual function
1135
    /// for GetInvalidProcessDescription() to provide custom strings when
1136
    /// needed.
1137
    eCommandRequiresProcess = (1u << 1),
1138
    /// eCommandRequiresThread
1139
    ///
1140
    /// Ensures a valid thread is contained in m_exe_ctx prior to executing the
1141
    /// command. If a thread doesn't exist or is invalid, the command will fail
1142
    /// and CommandObject::GetInvalidThreadDescription() will be returned as the
1143
    /// error. CommandObject subclasses can override the virtual function for
1144
    /// GetInvalidThreadDescription() to provide custom strings when needed.
1145
    eCommandRequiresThread = (1u << 2),
1146
    /// eCommandRequiresFrame
1147
    ///
1148
    /// Ensures a valid frame is contained in m_exe_ctx prior to executing the
1149
    /// command. If a frame doesn't exist or is invalid, the command will fail
1150
    /// and CommandObject::GetInvalidFrameDescription() will be returned as the
1151
    /// error. CommandObject subclasses can override the virtual function for
1152
    /// GetInvalidFrameDescription() to provide custom strings when needed.
1153
    eCommandRequiresFrame = (1u << 3),
1154
    /// eCommandRequiresRegContext
1155
    ///
1156
    /// Ensures a valid register context (from the selected frame if there is a
1157
    /// frame in m_exe_ctx, or from the selected thread from m_exe_ctx) is
1158
    /// available from m_exe_ctx prior to executing the command. If a target
1159
    /// doesn't exist or is invalid, the command will fail and
1160
    /// CommandObject::GetInvalidRegContextDescription() will be returned as the
1161
    /// error. CommandObject subclasses can override the virtual function for
1162
    /// GetInvalidRegContextDescription() to provide custom strings when needed.
1163
    eCommandRequiresRegContext = (1u << 4),
1164
    /// eCommandTryTargetAPILock
1165
    ///
1166
    /// Attempts to acquire the target lock if a target is selected in the
1167
    /// command interpreter. If the command object fails to acquire the API
1168
    /// lock, the command will fail with an appropriate error message.
1169
    eCommandTryTargetAPILock = (1u << 5),
1170
    /// eCommandProcessMustBeLaunched
1171
    ///
1172
    /// Verifies that there is a launched process in m_exe_ctx, if there isn't,
1173
    /// the command will fail with an appropriate error message.
1174
    eCommandProcessMustBeLaunched = (1u << 6),
1175
    /// eCommandProcessMustBePaused
1176
    ///
1177
    /// Verifies that there is a paused process in m_exe_ctx, if there isn't,
1178
    /// the command will fail with an appropriate error message.
1179
    eCommandProcessMustBePaused = (1u << 7),
1180
    /// eCommandProcessMustBeTraced
1181
    ///
1182
    /// Verifies that the process is being traced by a Trace plug-in, if it
1183
    /// isn't the command will fail with an appropriate error message.
1184
    eCommandProcessMustBeTraced = (1u << 8)};
1185
1186
/// Whether a summary should cap how much data it returns to users or not.
1187
enum TypeSummaryCapping {
1188
  eTypeSummaryCapped = true,
1189
  eTypeSummaryUncapped = false
1190
};
1191
1192
/// The result from a command interpreter run.
1193
enum CommandInterpreterResult {
1194
  /// Command interpreter finished successfully.
1195
  eCommandInterpreterResultSuccess,
1196
  /// Stopped because the corresponding option was set and the inferior
1197
  /// crashed.
1198
  eCommandInterpreterResultInferiorCrash,
1199
  /// Stopped because the corresponding option was set and a command returned
1200
  /// an error.
1201
  eCommandInterpreterResultCommandError,
1202
  /// Stopped because quit was requested.
1203
  eCommandInterpreterResultQuitRequested,
1204
};
1205
1206
// Style of core file to create when calling SaveCore.
1207
enum SaveCoreStyle {
1208
  eSaveCoreUnspecified = 0,
1209
  eSaveCoreFull = 1,
1210
  eSaveCoreDirtyOnly = 2,
1211
  eSaveCoreStackOnly = 3,
1212
};
1213
1214
/// Events that might happen during a trace session.
1215
enum TraceEvent {
1216
  /// Tracing was disabled for some time due to a software trigger.
1217
  eTraceEventDisabledSW,
1218
  /// Tracing was disable for some time due to a hardware trigger.
1219
  eTraceEventDisabledHW,
1220
  /// Event due to CPU change for a thread. This event is also fired when
1221
  /// suddenly it's not possible to identify the cpu of a given thread.
1222
  eTraceEventCPUChanged,
1223
  /// Event due to a CPU HW clock tick.
1224
  eTraceEventHWClockTick,
1225
  /// The underlying tracing technology emitted a synchronization event used by
1226
  /// trace processors.
1227
  eTraceEventSyncPoint,
1228
};
1229
1230
// Enum used to identify which kind of item a \a TraceCursor is pointing at
1231
enum TraceItemKind {
1232
  eTraceItemKindError = 0,
1233
  eTraceItemKindEvent,
1234
  eTraceItemKindInstruction,
1235
};
1236
1237
/// Enum to indicate the reference point when invoking
1238
/// \a TraceCursor::Seek().
1239
/// The following values are inspired by \a std::istream::seekg.
1240
enum TraceCursorSeekType {
1241
  /// The beginning of the trace, i.e the oldest item.
1242
  eTraceCursorSeekTypeBeginning = 0,
1243
  /// The current position in the trace.
1244
  eTraceCursorSeekTypeCurrent,
1245
  /// The end of the trace, i.e the most recent item.
1246
  eTraceCursorSeekTypeEnd
1247
};
1248
1249
/// Enum to control the verbosity level of `dwim-print` execution.
1250
enum DWIMPrintVerbosity {
1251
  /// Run `dwim-print` with no verbosity.
1252
  eDWIMPrintVerbosityNone,
1253
  /// Print a message when `dwim-print` uses `expression` evaluation.
1254
  eDWIMPrintVerbosityExpression,
1255
  /// Always print a message indicating how `dwim-print` is evaluating its
1256
  /// expression.
1257
  eDWIMPrintVerbosityFull,
1258
};
1259
1260
enum WatchpointValueKind {
1261
  eWatchPointValueKindInvalid = 0,
1262
  ///< Watchpoint was created watching a variable
1263
  eWatchPointValueKindVariable = 1,
1264
  ///< Watchpoint was created watching the result of an expression that was
1265
  ///< evaluated at creation time.
1266
  eWatchPointValueKindExpression = 2,
1267
};
1268
1269
enum CompletionType {
1270
  eNoCompletion = 0u,
1271
  eSourceFileCompletion = (1u << 0),
1272
  eDiskFileCompletion = (1u << 1),
1273
  eDiskDirectoryCompletion = (1u << 2),
1274
  eSymbolCompletion = (1u << 3),
1275
  eModuleCompletion = (1u << 4),
1276
  eSettingsNameCompletion = (1u << 5),
1277
  ePlatformPluginCompletion = (1u << 6),
1278
  eArchitectureCompletion = (1u << 7),
1279
  eVariablePathCompletion = (1u << 8),
1280
  eRegisterCompletion = (1u << 9),
1281
  eBreakpointCompletion = (1u << 10),
1282
  eProcessPluginCompletion = (1u << 11),
1283
  eDisassemblyFlavorCompletion = (1u << 12),
1284
  eTypeLanguageCompletion = (1u << 13),
1285
  eFrameIndexCompletion = (1u << 14),
1286
  eModuleUUIDCompletion = (1u << 15),
1287
  eStopHookIDCompletion = (1u << 16),
1288
  eThreadIndexCompletion = (1u << 17),
1289
  eWatchpointIDCompletion = (1u << 18),
1290
  eBreakpointNameCompletion = (1u << 19),
1291
  eProcessIDCompletion = (1u << 20),
1292
  eProcessNameCompletion = (1u << 21),
1293
  eRemoteDiskFileCompletion = (1u << 22),
1294
  eRemoteDiskDirectoryCompletion = (1u << 23),
1295
  eTypeCategoryNameCompletion = (1u << 24),
1296
  // This item serves two purposes.  It is the last element in the enum, so
1297
  // you can add custom enums starting from here in your Option class. Also
1298
  // if you & in this bit the base code will not process the option.
1299
  eCustomCompletion = (1u << 25)
1300
};
1301
1302
} // namespace lldb
1303
1304
#endif // LLDB_LLDB_ENUMERATIONS_H