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   constexpr Enum operator|(Enum a, Enum b) {                                   \
24     return static_cast<Enum>(                                                  \
25         static_cast<std::underlying_type<Enum>::type>(a) |                     \
26         static_cast<std::underlying_type<Enum>::type>(b));                     \
27   }                                                                            \
28   constexpr Enum operator&(Enum a, Enum b) {                                   \
29     return static_cast<Enum>(                                                  \
30         static_cast<std::underlying_type<Enum>::type>(a) &                     \
31         static_cast<std::underlying_type<Enum>::type>(b));                     \
32   }                                                                            \
33   constexpr Enum operator~(Enum a) {                                           \
34     return static_cast<Enum>(                                                  \
35         ~static_cast<std::underlying_type<Enum>::type>(a));                    \
36   }                                                                            \
37   inline Enum &operator|=(Enum &a, Enum b) {                                   \
38     a = a | b;                                                                 \
39     return a;                                                                  \
40   }                                                                            \
41   inline Enum &operator&=(Enum &a, Enum b) {                                   \
42     a = a & b;                                                                 \
43     return a;                                                                  \
44   }
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.
FLAGS_ENUM(LaunchFlags)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   eValueTypeVTable = 9,              ///< virtual function table
327   eValueTypeVTableEntry = 10, ///< function pointer in virtual function table
328 };
329 
330 /// Token size/granularities for Input Readers.
331 
332 enum InputReaderGranularity {
333   eInputReaderGranularityInvalid = 0,
334   eInputReaderGranularityByte,
335   eInputReaderGranularityWord,
336   eInputReaderGranularityLine,
337   eInputReaderGranularityAll
338 };
339 
340 /// These mask bits allow a common interface for queries that can
341 /// limit the amount of information that gets parsed to only the
342 /// information that is requested. These bits also can indicate what
343 /// actually did get resolved during query function calls.
344 ///
345 /// Each definition corresponds to a one of the member variables
346 /// in this class, and requests that that item be resolved, or
347 /// indicates that the member did get resolved.
FLAGS_ENUM(SymbolContextItem)348 FLAGS_ENUM(SymbolContextItem){
349     /// Set when \a target is requested from a query, or was located
350     /// in query results
351     eSymbolContextTarget = (1u << 0),
352     /// Set when \a module is requested from a query, or was located
353     /// in query results
354     eSymbolContextModule = (1u << 1),
355     /// Set when \a comp_unit is requested from a query, or was
356     /// located in query results
357     eSymbolContextCompUnit = (1u << 2),
358     /// Set when \a function is requested from a query, or was located
359     /// in query results
360     eSymbolContextFunction = (1u << 3),
361     /// Set when the deepest \a block is requested from a query, or
362     /// was located in query results
363     eSymbolContextBlock = (1u << 4),
364     /// Set when \a line_entry is requested from a query, or was
365     /// located in query results
366     eSymbolContextLineEntry = (1u << 5),
367     /// Set when \a symbol is requested from a query, or was located
368     /// in query results
369     eSymbolContextSymbol = (1u << 6),
370     /// Indicates to try and lookup everything up during a routine
371     /// symbol context query.
372     eSymbolContextEverything = ((eSymbolContextSymbol << 1) - 1u),
373     /// Set when \a global or static variable is requested from a
374     /// query, or was located in query results.
375     /// eSymbolContextVariable is potentially expensive to lookup so
376     /// it isn't included in eSymbolContextEverything which stops it
377     /// from being used during frame PC lookups and many other
378     /// potential address to symbol context lookups.
379     eSymbolContextVariable = (1u << 7),
380 
381     // Keep this last and up-to-date for what the last enum value is.
382     eSymbolContextLastItem = eSymbolContextVariable,
383 };
384 LLDB_MARK_AS_BITMASK_ENUM(SymbolContextItem)
385 
FLAGS_ENUM(Permissions)386 FLAGS_ENUM(Permissions){ePermissionsWritable = (1u << 0),
387                         ePermissionsReadable = (1u << 1),
388                         ePermissionsExecutable = (1u << 2)};
389 LLDB_MARK_AS_BITMASK_ENUM(Permissions)
390 
391 enum InputReaderAction {
392   eInputReaderActivate, ///< reader is newly pushed onto the reader stack
393   eInputReaderAsynchronousOutputWritten, ///< an async output event occurred;
394                                          ///< the reader may want to do
395                                          ///< something
396   eInputReaderReactivate, ///< reader is on top of the stack again after another
397                           ///< reader was popped off
398   eInputReaderDeactivate, ///< another reader was pushed on the stack
399   eInputReaderGotToken,   ///< reader got one of its tokens (granularity)
400   eInputReaderInterrupt, ///< reader received an interrupt signal (probably from
401                          ///< a control-c)
402   eInputReaderEndOfFile, ///< reader received an EOF char (probably from a
403                          ///< control-d)
404   eInputReaderDone       ///< reader was just popped off the stack and is done
405 };
406 
FLAGS_ENUM(BreakpointEventType)407 FLAGS_ENUM(BreakpointEventType){
408     eBreakpointEventTypeInvalidType = (1u << 0),
409     eBreakpointEventTypeAdded = (1u << 1),
410     eBreakpointEventTypeRemoved = (1u << 2),
411     eBreakpointEventTypeLocationsAdded = (1u << 3), ///< Locations added doesn't
412                                                     ///< get sent when the
413                                                     ///< breakpoint is created
414     eBreakpointEventTypeLocationsRemoved = (1u << 4),
415     eBreakpointEventTypeLocationsResolved = (1u << 5),
416     eBreakpointEventTypeEnabled = (1u << 6),
417     eBreakpointEventTypeDisabled = (1u << 7),
418     eBreakpointEventTypeCommandChanged = (1u << 8),
419     eBreakpointEventTypeConditionChanged = (1u << 9),
420     eBreakpointEventTypeIgnoreChanged = (1u << 10),
421     eBreakpointEventTypeThreadChanged = (1u << 11),
422     eBreakpointEventTypeAutoContinueChanged = (1u << 12)};
423 
FLAGS_ENUM(WatchpointEventType)424 FLAGS_ENUM(WatchpointEventType){
425     eWatchpointEventTypeInvalidType = (1u << 0),
426     eWatchpointEventTypeAdded = (1u << 1),
427     eWatchpointEventTypeRemoved = (1u << 2),
428     eWatchpointEventTypeEnabled = (1u << 6),
429     eWatchpointEventTypeDisabled = (1u << 7),
430     eWatchpointEventTypeCommandChanged = (1u << 8),
431     eWatchpointEventTypeConditionChanged = (1u << 9),
432     eWatchpointEventTypeIgnoreChanged = (1u << 10),
433     eWatchpointEventTypeThreadChanged = (1u << 11),
434     eWatchpointEventTypeTypeChanged = (1u << 12)};
435 
436 enum WatchpointWriteType {
437   /// Don't stop when the watched memory region is written to.
438   eWatchpointWriteTypeDisabled,
439   /// Stop on any write access to the memory region, even if
440   /// the value doesn't change.  On some architectures, a write
441   /// near the memory region may be falsely reported as a match,
442   /// and notify this spurious stop as a watchpoint trap.
443   eWatchpointWriteTypeAlways,
444   /// Stop on a write to the memory region that changes its value.
445   /// This is most likely the behavior a user expects, and is the
446   /// behavior in gdb.  lldb can silently ignore writes near the
447   /// watched memory region that are reported as accesses to lldb.
448   eWatchpointWriteTypeOnModify
449 };
450 
451 /// Programming language type.
452 ///
453 /// These enumerations use the same language enumerations as the DWARF
454 /// specification for ease of use and consistency.
455 /// The enum -> string code is in Language.cpp, don't change this
456 /// table without updating that code as well.
457 ///
458 /// This datatype is used in SBExpressionOptions::SetLanguage() which
459 /// makes this type API. Do not change its underlying storage type!
460 enum LanguageType {
461   eLanguageTypeUnknown = 0x0000,        ///< Unknown or invalid language value.
462   eLanguageTypeC89 = 0x0001,            ///< ISO C:1989.
463   eLanguageTypeC = 0x0002,              ///< Non-standardized C, such as K&R.
464   eLanguageTypeAda83 = 0x0003,          ///< ISO Ada:1983.
465   eLanguageTypeC_plus_plus = 0x0004,    ///< ISO C++:1998.
466   eLanguageTypeCobol74 = 0x0005,        ///< ISO Cobol:1974.
467   eLanguageTypeCobol85 = 0x0006,        ///< ISO Cobol:1985.
468   eLanguageTypeFortran77 = 0x0007,      ///< ISO Fortran 77.
469   eLanguageTypeFortran90 = 0x0008,      ///< ISO Fortran 90.
470   eLanguageTypePascal83 = 0x0009,       ///< ISO Pascal:1983.
471   eLanguageTypeModula2 = 0x000a,        ///< ISO Modula-2:1996.
472   eLanguageTypeJava = 0x000b,           ///< Java.
473   eLanguageTypeC99 = 0x000c,            ///< ISO C:1999.
474   eLanguageTypeAda95 = 0x000d,          ///< ISO Ada:1995.
475   eLanguageTypeFortran95 = 0x000e,      ///< ISO Fortran 95.
476   eLanguageTypePLI = 0x000f,            ///< ANSI PL/I:1976.
477   eLanguageTypeObjC = 0x0010,           ///< Objective-C.
478   eLanguageTypeObjC_plus_plus = 0x0011, ///< Objective-C++.
479   eLanguageTypeUPC = 0x0012,            ///< Unified Parallel C.
480   eLanguageTypeD = 0x0013,              ///< D.
481   eLanguageTypePython = 0x0014,         ///< Python.
482   // NOTE: The below are DWARF5 constants, subject to change upon
483   // completion of the DWARF5 specification
484   eLanguageTypeOpenCL = 0x0015,         ///< OpenCL.
485   eLanguageTypeGo = 0x0016,             ///< Go.
486   eLanguageTypeModula3 = 0x0017,        ///< Modula 3.
487   eLanguageTypeHaskell = 0x0018,        ///< Haskell.
488   eLanguageTypeC_plus_plus_03 = 0x0019, ///< ISO C++:2003.
489   eLanguageTypeC_plus_plus_11 = 0x001a, ///< ISO C++:2011.
490   eLanguageTypeOCaml = 0x001b,          ///< OCaml.
491   eLanguageTypeRust = 0x001c,           ///< Rust.
492   eLanguageTypeC11 = 0x001d,            ///< ISO C:2011.
493   eLanguageTypeSwift = 0x001e,          ///< Swift.
494   eLanguageTypeJulia = 0x001f,          ///< Julia.
495   eLanguageTypeDylan = 0x0020,          ///< Dylan.
496   eLanguageTypeC_plus_plus_14 = 0x0021, ///< ISO C++:2014.
497   eLanguageTypeFortran03 = 0x0022,      ///< ISO Fortran 2003.
498   eLanguageTypeFortran08 = 0x0023,      ///< ISO Fortran 2008.
499   eLanguageTypeRenderScript = 0x0024,
500   eLanguageTypeBLISS = 0x0025,
501   eLanguageTypeKotlin = 0x0026,
502   eLanguageTypeZig = 0x0027,
503   eLanguageTypeCrystal = 0x0028,
504   eLanguageTypeC_plus_plus_17 = 0x002a, ///< ISO C++:2017.
505   eLanguageTypeC_plus_plus_20 = 0x002b, ///< ISO C++:2020.
506   eLanguageTypeC17 = 0x002c,
507   eLanguageTypeFortran18 = 0x002d,
508   eLanguageTypeAda2005 = 0x002e,
509   eLanguageTypeAda2012 = 0x002f,
510   eLanguageTypeHIP = 0x0030,
511   eLanguageTypeAssembly = 0x0031,
512   eLanguageTypeC_sharp = 0x0032,
513   eLanguageTypeMojo = 0x0033,
514 
515   // Vendor Extensions
516   // Note: Language::GetNameForLanguageType
517   // assumes these can be used as indexes into array language_names, and
518   // Language::SetLanguageFromCString and Language::AsCString assume these can
519   // be used as indexes into array g_languages.
520   eLanguageTypeMipsAssembler, ///< Mips_Assembler.
521   // Mojo will move to the common list of languages once the DWARF committee
522   // creates a language code for it.
523   eNumLanguageTypes
524 };
525 
526 enum InstrumentationRuntimeType {
527   eInstrumentationRuntimeTypeAddressSanitizer = 0x0000,
528   eInstrumentationRuntimeTypeThreadSanitizer = 0x0001,
529   eInstrumentationRuntimeTypeUndefinedBehaviorSanitizer = 0x0002,
530   eInstrumentationRuntimeTypeMainThreadChecker = 0x0003,
531   eInstrumentationRuntimeTypeSwiftRuntimeReporting = 0x0004,
532   eInstrumentationRuntimeTypeLibsanitizersAsan = 0x0005,
533   eNumInstrumentationRuntimeTypes
534 };
535 
536 enum DynamicValueType {
537   eNoDynamicValues = 0,
538   eDynamicCanRunTarget = 1,
539   eDynamicDontRunTarget = 2
540 };
541 
542 enum StopShowColumn {
543   eStopShowColumnAnsiOrCaret = 0,
544   eStopShowColumnAnsi = 1,
545   eStopShowColumnCaret = 2,
546   eStopShowColumnNone = 3
547 };
548 
549 enum AccessType {
550   eAccessNone,
551   eAccessPublic,
552   eAccessPrivate,
553   eAccessProtected,
554   eAccessPackage
555 };
556 
557 enum CommandArgumentType {
558   eArgTypeAddress = 0,
559   eArgTypeAddressOrExpression,
560   eArgTypeAliasName,
561   eArgTypeAliasOptions,
562   eArgTypeArchitecture,
563   eArgTypeBoolean,
564   eArgTypeBreakpointID,
565   eArgTypeBreakpointIDRange,
566   eArgTypeBreakpointName,
567   eArgTypeByteSize,
568   eArgTypeClassName,
569   eArgTypeCommandName,
570   eArgTypeCount,
571   eArgTypeDescriptionVerbosity,
572   eArgTypeDirectoryName,
573   eArgTypeDisassemblyFlavor,
574   eArgTypeEndAddress,
575   eArgTypeExpression,
576   eArgTypeExpressionPath,
577   eArgTypeExprFormat,
578   eArgTypeFileLineColumn,
579   eArgTypeFilename,
580   eArgTypeFormat,
581   eArgTypeFrameIndex,
582   eArgTypeFullName,
583   eArgTypeFunctionName,
584   eArgTypeFunctionOrSymbol,
585   eArgTypeGDBFormat,
586   eArgTypeHelpText,
587   eArgTypeIndex,
588   eArgTypeLanguage,
589   eArgTypeLineNum,
590   eArgTypeLogCategory,
591   eArgTypeLogChannel,
592   eArgTypeMethod,
593   eArgTypeName,
594   eArgTypeNewPathPrefix,
595   eArgTypeNumLines,
596   eArgTypeNumberPerLine,
597   eArgTypeOffset,
598   eArgTypeOldPathPrefix,
599   eArgTypeOneLiner,
600   eArgTypePath,
601   eArgTypePermissionsNumber,
602   eArgTypePermissionsString,
603   eArgTypePid,
604   eArgTypePlugin,
605   eArgTypeProcessName,
606   eArgTypePythonClass,
607   eArgTypePythonFunction,
608   eArgTypePythonScript,
609   eArgTypeQueueName,
610   eArgTypeRegisterName,
611   eArgTypeRegularExpression,
612   eArgTypeRunArgs,
613   eArgTypeRunMode,
614   eArgTypeScriptedCommandSynchronicity,
615   eArgTypeScriptLang,
616   eArgTypeSearchWord,
617   eArgTypeSelector,
618   eArgTypeSettingIndex,
619   eArgTypeSettingKey,
620   eArgTypeSettingPrefix,
621   eArgTypeSettingVariableName,
622   eArgTypeShlibName,
623   eArgTypeSourceFile,
624   eArgTypeSortOrder,
625   eArgTypeStartAddress,
626   eArgTypeSummaryString,
627   eArgTypeSymbol,
628   eArgTypeThreadID,
629   eArgTypeThreadIndex,
630   eArgTypeThreadName,
631   eArgTypeTypeName,
632   eArgTypeUnsignedInteger,
633   eArgTypeUnixSignal,
634   eArgTypeVarName,
635   eArgTypeValue,
636   eArgTypeWidth,
637   eArgTypeNone,
638   eArgTypePlatform,
639   eArgTypeWatchpointID,
640   eArgTypeWatchpointIDRange,
641   eArgTypeWatchType,
642   eArgRawInput,
643   eArgTypeCommand,
644   eArgTypeColumnNum,
645   eArgTypeModuleUUID,
646   eArgTypeSaveCoreStyle,
647   eArgTypeLogHandler,
648   eArgTypeSEDStylePair,
649   eArgTypeRecognizerID,
650   eArgTypeConnectURL,
651   eArgTypeTargetID,
652   eArgTypeStopHookID,
653   eArgTypeCompletionType,
654   eArgTypeRemotePath,
655   eArgTypeRemoteFilename,
656   eArgTypeModule,
657   eArgTypeLastArg // Always keep this entry as the last entry in this
658                   // enumeration!!
659 };
660 
661 /// Symbol types.
662 // Symbol holds the SymbolType in a 6-bit field (m_type), so if you get over 63
663 // entries you will have to resize that field.
664 enum SymbolType {
665   eSymbolTypeAny = 0,
666   eSymbolTypeInvalid = 0,
667   eSymbolTypeAbsolute,
668   eSymbolTypeCode,
669   eSymbolTypeResolver,
670   eSymbolTypeData,
671   eSymbolTypeTrampoline,
672   eSymbolTypeRuntime,
673   eSymbolTypeException,
674   eSymbolTypeSourceFile,
675   eSymbolTypeHeaderFile,
676   eSymbolTypeObjectFile,
677   eSymbolTypeCommonBlock,
678   eSymbolTypeBlock,
679   eSymbolTypeLocal,
680   eSymbolTypeParam,
681   eSymbolTypeVariable,
682   eSymbolTypeVariableType,
683   eSymbolTypeLineEntry,
684   eSymbolTypeLineHeader,
685   eSymbolTypeScopeBegin,
686   eSymbolTypeScopeEnd,
687   eSymbolTypeAdditional, ///< When symbols take more than one entry, the extra
688                          ///< entries get this type
689   eSymbolTypeCompiler,
690   eSymbolTypeInstrumentation,
691   eSymbolTypeUndefined,
692   eSymbolTypeObjCClass,
693   eSymbolTypeObjCMetaClass,
694   eSymbolTypeObjCIVar,
695   eSymbolTypeReExported
696 };
697 
698 enum SectionType {
699   eSectionTypeInvalid,
700   eSectionTypeCode,
701   eSectionTypeContainer, ///< The section contains child sections
702   eSectionTypeData,
703   eSectionTypeDataCString,         ///< Inlined C string data
704   eSectionTypeDataCStringPointers, ///< Pointers to C string data
705   eSectionTypeDataSymbolAddress,   ///< Address of a symbol in the symbol table
706   eSectionTypeData4,
707   eSectionTypeData8,
708   eSectionTypeData16,
709   eSectionTypeDataPointers,
710   eSectionTypeDebug,
711   eSectionTypeZeroFill,
712   eSectionTypeDataObjCMessageRefs, ///< Pointer to function pointer + selector
713   eSectionTypeDataObjCCFStrings,   ///< Objective-C const CFString/NSString
714                                    ///< objects
715   eSectionTypeDWARFDebugAbbrev,
716   eSectionTypeDWARFDebugAddr,
717   eSectionTypeDWARFDebugAranges,
718   eSectionTypeDWARFDebugCuIndex,
719   eSectionTypeDWARFDebugFrame,
720   eSectionTypeDWARFDebugInfo,
721   eSectionTypeDWARFDebugLine,
722   eSectionTypeDWARFDebugLoc,
723   eSectionTypeDWARFDebugMacInfo,
724   eSectionTypeDWARFDebugMacro,
725   eSectionTypeDWARFDebugPubNames,
726   eSectionTypeDWARFDebugPubTypes,
727   eSectionTypeDWARFDebugRanges,
728   eSectionTypeDWARFDebugStr,
729   eSectionTypeDWARFDebugStrOffsets,
730   eSectionTypeDWARFAppleNames,
731   eSectionTypeDWARFAppleTypes,
732   eSectionTypeDWARFAppleNamespaces,
733   eSectionTypeDWARFAppleObjC,
734   eSectionTypeELFSymbolTable,       ///< Elf SHT_SYMTAB section
735   eSectionTypeELFDynamicSymbols,    ///< Elf SHT_DYNSYM section
736   eSectionTypeELFRelocationEntries, ///< Elf SHT_REL or SHT_REL section
737   eSectionTypeELFDynamicLinkInfo,   ///< Elf SHT_DYNAMIC section
738   eSectionTypeEHFrame,
739   eSectionTypeARMexidx,
740   eSectionTypeARMextab,
741   eSectionTypeCompactUnwind, ///< compact unwind section in Mach-O,
742                              ///< __TEXT,__unwind_info
743   eSectionTypeGoSymtab,
744   eSectionTypeAbsoluteAddress, ///< Dummy section for symbols with absolute
745                                ///< address
746   eSectionTypeDWARFGNUDebugAltLink,
747   eSectionTypeDWARFDebugTypes, ///< DWARF .debug_types section
748   eSectionTypeDWARFDebugNames, ///< DWARF v5 .debug_names
749   eSectionTypeOther,
750   eSectionTypeDWARFDebugLineStr,  ///< DWARF v5 .debug_line_str
751   eSectionTypeDWARFDebugRngLists, ///< DWARF v5 .debug_rnglists
752   eSectionTypeDWARFDebugLocLists, ///< DWARF v5 .debug_loclists
753   eSectionTypeDWARFDebugAbbrevDwo,
754   eSectionTypeDWARFDebugInfoDwo,
755   eSectionTypeDWARFDebugStrDwo,
756   eSectionTypeDWARFDebugStrOffsetsDwo,
757   eSectionTypeDWARFDebugTypesDwo,
758   eSectionTypeDWARFDebugRngListsDwo,
759   eSectionTypeDWARFDebugLocDwo,
760   eSectionTypeDWARFDebugLocListsDwo,
761   eSectionTypeDWARFDebugTuIndex,
762   eSectionTypeCTF,
763   eSectionTypeSwiftModules,
764 };
765 
FLAGS_ENUM(EmulateInstructionOptions)766 FLAGS_ENUM(EmulateInstructionOptions){
767     eEmulateInstructionOptionNone = (0u),
768     eEmulateInstructionOptionAutoAdvancePC = (1u << 0),
769     eEmulateInstructionOptionIgnoreConditions = (1u << 1)};
770 
FLAGS_ENUM(FunctionNameType)771 FLAGS_ENUM(FunctionNameType){
772     eFunctionNameTypeNone = 0u,
773     eFunctionNameTypeAuto =
774         (1u << 1), ///< Automatically figure out which FunctionNameType
775                    ///< bits to set based on the function name.
776     eFunctionNameTypeFull = (1u << 2), ///< The function name.
777     ///< For C this is the same as just the name of the function For C++ this is
778     ///< the mangled or demangled version of the mangled name. For ObjC this is
779     ///< the full function signature with the + or - and the square brackets and
780     ///< the class and selector
781     eFunctionNameTypeBase = (1u
782                              << 3), ///< The function name only, no namespaces
783                                     ///< or arguments and no class
784                                     ///< methods or selectors will be searched.
785     eFunctionNameTypeMethod = (1u << 4), ///< Find function by method name (C++)
786                                          ///< with no namespace or arguments
787     eFunctionNameTypeSelector =
788         (1u << 5), ///< Find function by selector name (ObjC) names
789     eFunctionNameTypeAny =
790         eFunctionNameTypeAuto ///< DEPRECATED: use eFunctionNameTypeAuto
791 };
792 LLDB_MARK_AS_BITMASK_ENUM(FunctionNameType)
793 
794 /// Basic types enumeration for the public API SBType::GetBasicType().
795 enum BasicType {
796   eBasicTypeInvalid = 0,
797   eBasicTypeVoid = 1,
798   eBasicTypeChar,
799   eBasicTypeSignedChar,
800   eBasicTypeUnsignedChar,
801   eBasicTypeWChar,
802   eBasicTypeSignedWChar,
803   eBasicTypeUnsignedWChar,
804   eBasicTypeChar16,
805   eBasicTypeChar32,
806   eBasicTypeChar8,
807   eBasicTypeShort,
808   eBasicTypeUnsignedShort,
809   eBasicTypeInt,
810   eBasicTypeUnsignedInt,
811   eBasicTypeLong,
812   eBasicTypeUnsignedLong,
813   eBasicTypeLongLong,
814   eBasicTypeUnsignedLongLong,
815   eBasicTypeInt128,
816   eBasicTypeUnsignedInt128,
817   eBasicTypeBool,
818   eBasicTypeHalf,
819   eBasicTypeFloat,
820   eBasicTypeDouble,
821   eBasicTypeLongDouble,
822   eBasicTypeFloatComplex,
823   eBasicTypeDoubleComplex,
824   eBasicTypeLongDoubleComplex,
825   eBasicTypeObjCID,
826   eBasicTypeObjCClass,
827   eBasicTypeObjCSel,
828   eBasicTypeNullPtr,
829   eBasicTypeOther
830 };
831 
832 /// Deprecated
833 enum TraceType {
834   eTraceTypeNone = 0,
835 
836   /// Intel Processor Trace
837   eTraceTypeProcessorTrace
838 };
839 
840 enum StructuredDataType {
841   eStructuredDataTypeInvalid = -1,
842   eStructuredDataTypeNull = 0,
843   eStructuredDataTypeGeneric,
844   eStructuredDataTypeArray,
845   eStructuredDataTypeInteger,
846   eStructuredDataTypeFloat,
847   eStructuredDataTypeBoolean,
848   eStructuredDataTypeString,
849   eStructuredDataTypeDictionary,
850   eStructuredDataTypeSignedInteger,
851   eStructuredDataTypeUnsignedInteger = eStructuredDataTypeInteger,
852 };
853 
FLAGS_ENUM(TypeClass)854 FLAGS_ENUM(TypeClass){
855     eTypeClassInvalid = (0u), eTypeClassArray = (1u << 0),
856     eTypeClassBlockPointer = (1u << 1), eTypeClassBuiltin = (1u << 2),
857     eTypeClassClass = (1u << 3), eTypeClassComplexFloat = (1u << 4),
858     eTypeClassComplexInteger = (1u << 5), eTypeClassEnumeration = (1u << 6),
859     eTypeClassFunction = (1u << 7), eTypeClassMemberPointer = (1u << 8),
860     eTypeClassObjCObject = (1u << 9), eTypeClassObjCInterface = (1u << 10),
861     eTypeClassObjCObjectPointer = (1u << 11), eTypeClassPointer = (1u << 12),
862     eTypeClassReference = (1u << 13), eTypeClassStruct = (1u << 14),
863     eTypeClassTypedef = (1u << 15), eTypeClassUnion = (1u << 16),
864     eTypeClassVector = (1u << 17),
865     // Define the last type class as the MSBit of a 32 bit value
866     eTypeClassOther = (1u << 31),
867     // Define a mask that can be used for any type when finding types
868     eTypeClassAny = (0xffffffffu)};
869 LLDB_MARK_AS_BITMASK_ENUM(TypeClass)
870 
871 enum TemplateArgumentKind {
872   eTemplateArgumentKindNull = 0,
873   eTemplateArgumentKindType,
874   eTemplateArgumentKindDeclaration,
875   eTemplateArgumentKindIntegral,
876   eTemplateArgumentKindTemplate,
877   eTemplateArgumentKindTemplateExpansion,
878   eTemplateArgumentKindExpression,
879   eTemplateArgumentKindPack,
880   eTemplateArgumentKindNullPtr,
881   eTemplateArgumentKindStructuralValue,
882 };
883 
884 /// Type of match to be performed when looking for a formatter for a data type.
885 /// Used by classes like SBTypeNameSpecifier or lldb_private::TypeMatcher.
886 enum FormatterMatchType {
887   eFormatterMatchExact,
888   eFormatterMatchRegex,
889   eFormatterMatchCallback,
890 
891   eLastFormatterMatchType = eFormatterMatchCallback,
892 };
893 
894 /// Options that can be set for a formatter to alter its behavior. Not
895 /// all of these are applicable to all formatter types.
FLAGS_ENUM(TypeOptions)896 FLAGS_ENUM(TypeOptions){eTypeOptionNone = (0u),
897                         eTypeOptionCascade = (1u << 0),
898                         eTypeOptionSkipPointers = (1u << 1),
899                         eTypeOptionSkipReferences = (1u << 2),
900                         eTypeOptionHideChildren = (1u << 3),
901                         eTypeOptionHideValue = (1u << 4),
902                         eTypeOptionShowOneLiner = (1u << 5),
903                         eTypeOptionHideNames = (1u << 6),
904                         eTypeOptionNonCacheable = (1u << 7),
905                         eTypeOptionHideEmptyAggregates = (1u << 8),
906                         eTypeOptionFrontEndWantsDereference = (1u << 9)};
907 
908 /// This is the return value for frame comparisons.  If you are comparing frame
909 /// A to frame B the following cases arise:
910 ///
911 ///    1) When frame A pushes frame B (or a frame that ends up pushing
912 ///       B) A is Older than B.
913 ///
914 ///    2) When frame A pushed frame B (or if frameA is on the stack
915 ///       but B is not) A is Younger than B.
916 ///
917 ///    3) When frame A and frame B have the same StackID, they are
918 ///       Equal.
919 ///
920 ///    4) When frame A and frame B have the same immediate parent
921 ///       frame, but are not equal, the comparison yields SameParent.
922 ///
923 ///    5) If the two frames are on different threads or processes the
924 ///       comparison is Invalid.
925 ///
926 ///    6) If for some reason we can't figure out what went on, we
927 ///       return Unknown.
928 enum FrameComparison {
929   eFrameCompareInvalid,
930   eFrameCompareUnknown,
931   eFrameCompareEqual,
932   eFrameCompareSameParent,
933   eFrameCompareYounger,
934   eFrameCompareOlder
935 };
936 
937 /// File Permissions.
938 ///
939 /// Designed to mimic the unix file permission bits so they can be used with
940 /// functions that set 'mode_t' to certain values for permissions.
FLAGS_ENUM(FilePermissions)941 FLAGS_ENUM(FilePermissions){
942     eFilePermissionsUserRead = (1u << 8),
943     eFilePermissionsUserWrite = (1u << 7),
944     eFilePermissionsUserExecute = (1u << 6),
945     eFilePermissionsGroupRead = (1u << 5),
946     eFilePermissionsGroupWrite = (1u << 4),
947     eFilePermissionsGroupExecute = (1u << 3),
948     eFilePermissionsWorldRead = (1u << 2),
949     eFilePermissionsWorldWrite = (1u << 1),
950     eFilePermissionsWorldExecute = (1u << 0),
951 
952     eFilePermissionsUserRW = (eFilePermissionsUserRead |
953                               eFilePermissionsUserWrite | 0),
954     eFileFilePermissionsUserRX = (eFilePermissionsUserRead | 0 |
955                                   eFilePermissionsUserExecute),
956     eFilePermissionsUserRWX = (eFilePermissionsUserRead |
957                                eFilePermissionsUserWrite |
958                                eFilePermissionsUserExecute),
959 
960     eFilePermissionsGroupRW = (eFilePermissionsGroupRead |
961                                eFilePermissionsGroupWrite | 0),
962     eFilePermissionsGroupRX = (eFilePermissionsGroupRead | 0 |
963                                eFilePermissionsGroupExecute),
964     eFilePermissionsGroupRWX = (eFilePermissionsGroupRead |
965                                 eFilePermissionsGroupWrite |
966                                 eFilePermissionsGroupExecute),
967 
968     eFilePermissionsWorldRW = (eFilePermissionsWorldRead |
969                                eFilePermissionsWorldWrite | 0),
970     eFilePermissionsWorldRX = (eFilePermissionsWorldRead | 0 |
971                                eFilePermissionsWorldExecute),
972     eFilePermissionsWorldRWX = (eFilePermissionsWorldRead |
973                                 eFilePermissionsWorldWrite |
974                                 eFilePermissionsWorldExecute),
975 
976     eFilePermissionsEveryoneR = (eFilePermissionsUserRead |
977                                  eFilePermissionsGroupRead |
978                                  eFilePermissionsWorldRead),
979     eFilePermissionsEveryoneW = (eFilePermissionsUserWrite |
980                                  eFilePermissionsGroupWrite |
981                                  eFilePermissionsWorldWrite),
982     eFilePermissionsEveryoneX = (eFilePermissionsUserExecute |
983                                  eFilePermissionsGroupExecute |
984                                  eFilePermissionsWorldExecute),
985 
986     eFilePermissionsEveryoneRW = (eFilePermissionsEveryoneR |
987                                   eFilePermissionsEveryoneW | 0),
988     eFilePermissionsEveryoneRX = (eFilePermissionsEveryoneR | 0 |
989                                   eFilePermissionsEveryoneX),
990     eFilePermissionsEveryoneRWX = (eFilePermissionsEveryoneR |
991                                    eFilePermissionsEveryoneW |
992                                    eFilePermissionsEveryoneX),
993     eFilePermissionsFileDefault = eFilePermissionsUserRW,
994     eFilePermissionsDirectoryDefault = eFilePermissionsUserRWX,
995 };
996 
997 /// Queue work item types.
998 ///
999 /// The different types of work that can be enqueued on a libdispatch aka Grand
1000 /// Central Dispatch (GCD) queue.
1001 enum QueueItemKind {
1002   eQueueItemKindUnknown = 0,
1003   eQueueItemKindFunction,
1004   eQueueItemKindBlock
1005 };
1006 
1007 /// Queue type.
1008 ///
1009 /// libdispatch aka Grand Central Dispatch (GCD) queues can be either
1010 /// serial (executing on one thread) or concurrent (executing on
1011 /// multiple threads).
1012 enum QueueKind {
1013   eQueueKindUnknown = 0,
1014   eQueueKindSerial,
1015   eQueueKindConcurrent
1016 };
1017 
1018 /// Expression Evaluation Stages.
1019 ///
1020 /// These are the cancellable stages of expression evaluation, passed
1021 /// to the expression evaluation callback, so that you can interrupt
1022 /// expression evaluation at the various points in its lifecycle.
1023 enum ExpressionEvaluationPhase {
1024   eExpressionEvaluationParse = 0,
1025   eExpressionEvaluationIRGen,
1026   eExpressionEvaluationExecution,
1027   eExpressionEvaluationComplete
1028 };
1029 
1030 /// Architecture-agnostic categorization of instructions for traversing the
1031 /// control flow of a trace.
1032 ///
1033 /// A single instruction can match one or more of these categories.
1034 enum InstructionControlFlowKind {
1035   /// The instruction could not be classified.
1036   eInstructionControlFlowKindUnknown = 0,
1037   /// The instruction is something not listed below, i.e. it's a sequential
1038   /// instruction that doesn't affect the control flow of the program.
1039   eInstructionControlFlowKindOther,
1040   /// The instruction is a near (function) call.
1041   eInstructionControlFlowKindCall,
1042   /// The instruction is a near (function) return.
1043   eInstructionControlFlowKindReturn,
1044   /// The instruction is a near unconditional jump.
1045   eInstructionControlFlowKindJump,
1046   /// The instruction is a near conditional jump.
1047   eInstructionControlFlowKindCondJump,
1048   /// The instruction is a call-like far transfer.
1049   /// E.g. SYSCALL, SYSENTER, or FAR CALL.
1050   eInstructionControlFlowKindFarCall,
1051   /// The instruction is a return-like far transfer.
1052   /// E.g. SYSRET, SYSEXIT, IRET, or FAR RET.
1053   eInstructionControlFlowKindFarReturn,
1054   /// The instruction is a jump-like far transfer.
1055   /// E.g. FAR JMP.
1056   eInstructionControlFlowKindFarJump
1057 };
1058 
1059 /// Watchpoint Kind.
1060 ///
1061 /// Indicates what types of events cause the watchpoint to fire. Used by Native
1062 /// *Protocol-related classes.
FLAGS_ENUM(WatchpointKind)1063 FLAGS_ENUM(WatchpointKind){eWatchpointKindWrite = (1u << 0),
1064                            eWatchpointKindRead = (1u << 1)};
1065 
1066 enum GdbSignal {
1067   eGdbSignalBadAccess = 0x91,
1068   eGdbSignalBadInstruction = 0x92,
1069   eGdbSignalArithmetic = 0x93,
1070   eGdbSignalEmulation = 0x94,
1071   eGdbSignalSoftware = 0x95,
1072   eGdbSignalBreakpoint = 0x96
1073 };
1074 
1075 /// Used with SBHostOS::GetLLDBPath (lldb::PathType) to find files that are
1076 /// related to LLDB on the current host machine. Most files are
1077 /// relative to LLDB or are in known locations.
1078 enum PathType {
1079   ePathTypeLLDBShlibDir, ///< The directory where the lldb.so (unix) or LLDB
1080                          ///< mach-o file in LLDB.framework (MacOSX) exists
1081   ePathTypeSupportExecutableDir, ///< Find LLDB support executable directory
1082                                  ///< (debugserver, etc)
1083   ePathTypeHeaderDir,            ///< Find LLDB header file directory
1084   ePathTypePythonDir,            ///< Find Python modules (PYTHONPATH) directory
1085   ePathTypeLLDBSystemPlugins,    ///< System plug-ins directory
1086   ePathTypeLLDBUserPlugins,      ///< User plug-ins directory
1087   ePathTypeLLDBTempSystemDir, ///< The LLDB temp directory for this system that
1088                               ///< will be cleaned up on exit
1089   ePathTypeGlobalLLDBTempSystemDir, ///< The LLDB temp directory for this
1090                                     ///< system, NOT cleaned up on a process
1091                                     ///< exit.
1092   ePathTypeClangDir ///< Find path to Clang builtin headers
1093 };
1094 
1095 /// Kind of member function.
1096 ///
1097 /// Used by the type system.
1098 enum MemberFunctionKind {
1099   eMemberFunctionKindUnknown = 0,    ///< Not sure what the type of this is
1100   eMemberFunctionKindConstructor,    ///< A function used to create instances
1101   eMemberFunctionKindDestructor,     ///< A function used to tear down existing
1102                                      ///< instances
1103   eMemberFunctionKindInstanceMethod, ///< A function that applies to a specific
1104                                      ///< instance
1105   eMemberFunctionKindStaticMethod ///< A function that applies to a type rather
1106                                   ///< than any instance
1107 };
1108 
1109 /// String matching algorithm used by SBTarget.
1110 enum MatchType { eMatchTypeNormal, eMatchTypeRegex, eMatchTypeStartsWith };
1111 
1112 /// Bitmask that describes details about a type.
FLAGS_ENUM(TypeFlags)1113 FLAGS_ENUM(TypeFlags){
1114     eTypeHasChildren = (1u << 0),       eTypeHasValue = (1u << 1),
1115     eTypeIsArray = (1u << 2),           eTypeIsBlock = (1u << 3),
1116     eTypeIsBuiltIn = (1u << 4),         eTypeIsClass = (1u << 5),
1117     eTypeIsCPlusPlus = (1u << 6),       eTypeIsEnumeration = (1u << 7),
1118     eTypeIsFuncPrototype = (1u << 8),   eTypeIsMember = (1u << 9),
1119     eTypeIsObjC = (1u << 10),           eTypeIsPointer = (1u << 11),
1120     eTypeIsReference = (1u << 12),      eTypeIsStructUnion = (1u << 13),
1121     eTypeIsTemplate = (1u << 14),       eTypeIsTypedef = (1u << 15),
1122     eTypeIsVector = (1u << 16),         eTypeIsScalar = (1u << 17),
1123     eTypeIsInteger = (1u << 18),        eTypeIsFloat = (1u << 19),
1124     eTypeIsComplex = (1u << 20),        eTypeIsSigned = (1u << 21),
1125     eTypeInstanceIsPointer = (1u << 22)};
1126 
FLAGS_ENUM(CommandFlags)1127 FLAGS_ENUM(CommandFlags){
1128     /// eCommandRequiresTarget
1129     ///
1130     /// Ensures a valid target is contained in m_exe_ctx prior to executing the
1131     /// command. If a target doesn't exist or is invalid, the command will fail
1132     /// and CommandObject::GetInvalidTargetDescription() will be returned as the
1133     /// error. CommandObject subclasses can override the virtual function for
1134     /// GetInvalidTargetDescription() to provide custom strings when needed.
1135     eCommandRequiresTarget = (1u << 0),
1136     /// eCommandRequiresProcess
1137     ///
1138     /// Ensures a valid process is contained in m_exe_ctx prior to executing the
1139     /// command. If a process doesn't exist or is invalid, the command will fail
1140     /// and CommandObject::GetInvalidProcessDescription() will be returned as
1141     /// the error. CommandObject subclasses can override the virtual function
1142     /// for GetInvalidProcessDescription() to provide custom strings when
1143     /// needed.
1144     eCommandRequiresProcess = (1u << 1),
1145     /// eCommandRequiresThread
1146     ///
1147     /// Ensures a valid thread is contained in m_exe_ctx prior to executing the
1148     /// command. If a thread doesn't exist or is invalid, the command will fail
1149     /// and CommandObject::GetInvalidThreadDescription() will be returned as the
1150     /// error. CommandObject subclasses can override the virtual function for
1151     /// GetInvalidThreadDescription() to provide custom strings when needed.
1152     eCommandRequiresThread = (1u << 2),
1153     /// eCommandRequiresFrame
1154     ///
1155     /// Ensures a valid frame is contained in m_exe_ctx prior to executing the
1156     /// command. If a frame doesn't exist or is invalid, the command will fail
1157     /// and CommandObject::GetInvalidFrameDescription() will be returned as the
1158     /// error. CommandObject subclasses can override the virtual function for
1159     /// GetInvalidFrameDescription() to provide custom strings when needed.
1160     eCommandRequiresFrame = (1u << 3),
1161     /// eCommandRequiresRegContext
1162     ///
1163     /// Ensures a valid register context (from the selected frame if there is a
1164     /// frame in m_exe_ctx, or from the selected thread from m_exe_ctx) is
1165     /// available from m_exe_ctx prior to executing the command. If a target
1166     /// doesn't exist or is invalid, the command will fail and
1167     /// CommandObject::GetInvalidRegContextDescription() will be returned as the
1168     /// error. CommandObject subclasses can override the virtual function for
1169     /// GetInvalidRegContextDescription() to provide custom strings when needed.
1170     eCommandRequiresRegContext = (1u << 4),
1171     /// eCommandTryTargetAPILock
1172     ///
1173     /// Attempts to acquire the target lock if a target is selected in the
1174     /// command interpreter. If the command object fails to acquire the API
1175     /// lock, the command will fail with an appropriate error message.
1176     eCommandTryTargetAPILock = (1u << 5),
1177     /// eCommandProcessMustBeLaunched
1178     ///
1179     /// Verifies that there is a launched process in m_exe_ctx, if there isn't,
1180     /// the command will fail with an appropriate error message.
1181     eCommandProcessMustBeLaunched = (1u << 6),
1182     /// eCommandProcessMustBePaused
1183     ///
1184     /// Verifies that there is a paused process in m_exe_ctx, if there isn't,
1185     /// the command will fail with an appropriate error message.
1186     eCommandProcessMustBePaused = (1u << 7),
1187     /// eCommandProcessMustBeTraced
1188     ///
1189     /// Verifies that the process is being traced by a Trace plug-in, if it
1190     /// isn't the command will fail with an appropriate error message.
1191     eCommandProcessMustBeTraced = (1u << 8)};
1192 
1193 /// Whether a summary should cap how much data it returns to users or not.
1194 enum TypeSummaryCapping {
1195   eTypeSummaryCapped = true,
1196   eTypeSummaryUncapped = false
1197 };
1198 
1199 /// The result from a command interpreter run.
1200 enum CommandInterpreterResult {
1201   /// Command interpreter finished successfully.
1202   eCommandInterpreterResultSuccess,
1203   /// Stopped because the corresponding option was set and the inferior
1204   /// crashed.
1205   eCommandInterpreterResultInferiorCrash,
1206   /// Stopped because the corresponding option was set and a command returned
1207   /// an error.
1208   eCommandInterpreterResultCommandError,
1209   /// Stopped because quit was requested.
1210   eCommandInterpreterResultQuitRequested,
1211 };
1212 
1213 // Style of core file to create when calling SaveCore.
1214 enum SaveCoreStyle {
1215   eSaveCoreUnspecified = 0,
1216   eSaveCoreFull = 1,
1217   eSaveCoreDirtyOnly = 2,
1218   eSaveCoreStackOnly = 3,
1219 };
1220 
1221 /// Events that might happen during a trace session.
1222 enum TraceEvent {
1223   /// Tracing was disabled for some time due to a software trigger.
1224   eTraceEventDisabledSW,
1225   /// Tracing was disable for some time due to a hardware trigger.
1226   eTraceEventDisabledHW,
1227   /// Event due to CPU change for a thread. This event is also fired when
1228   /// suddenly it's not possible to identify the cpu of a given thread.
1229   eTraceEventCPUChanged,
1230   /// Event due to a CPU HW clock tick.
1231   eTraceEventHWClockTick,
1232   /// The underlying tracing technology emitted a synchronization event used by
1233   /// trace processors.
1234   eTraceEventSyncPoint,
1235 };
1236 
1237 // Enum used to identify which kind of item a \a TraceCursor is pointing at
1238 enum TraceItemKind {
1239   eTraceItemKindError = 0,
1240   eTraceItemKindEvent,
1241   eTraceItemKindInstruction,
1242 };
1243 
1244 /// Enum to indicate the reference point when invoking
1245 /// \a TraceCursor::Seek().
1246 /// The following values are inspired by \a std::istream::seekg.
1247 enum TraceCursorSeekType {
1248   /// The beginning of the trace, i.e the oldest item.
1249   eTraceCursorSeekTypeBeginning = 0,
1250   /// The current position in the trace.
1251   eTraceCursorSeekTypeCurrent,
1252   /// The end of the trace, i.e the most recent item.
1253   eTraceCursorSeekTypeEnd
1254 };
1255 
1256 /// Enum to control the verbosity level of `dwim-print` execution.
1257 enum DWIMPrintVerbosity {
1258   /// Run `dwim-print` with no verbosity.
1259   eDWIMPrintVerbosityNone,
1260   /// Print a message when `dwim-print` uses `expression` evaluation.
1261   eDWIMPrintVerbosityExpression,
1262   /// Always print a message indicating how `dwim-print` is evaluating its
1263   /// expression.
1264   eDWIMPrintVerbosityFull,
1265 };
1266 
1267 enum WatchpointValueKind {
1268   eWatchPointValueKindInvalid = 0,
1269   ///< Watchpoint was created watching a variable
1270   eWatchPointValueKindVariable = 1,
1271   ///< Watchpoint was created watching the result of an expression that was
1272   ///< evaluated at creation time.
1273   eWatchPointValueKindExpression = 2,
1274 };
1275 
1276 enum CompletionType {
1277   eNoCompletion = 0ul,
1278   eSourceFileCompletion = (1ul << 0),
1279   eDiskFileCompletion = (1ul << 1),
1280   eDiskDirectoryCompletion = (1ul << 2),
1281   eSymbolCompletion = (1ul << 3),
1282   eModuleCompletion = (1ul << 4),
1283   eSettingsNameCompletion = (1ul << 5),
1284   ePlatformPluginCompletion = (1ul << 6),
1285   eArchitectureCompletion = (1ul << 7),
1286   eVariablePathCompletion = (1ul << 8),
1287   eRegisterCompletion = (1ul << 9),
1288   eBreakpointCompletion = (1ul << 10),
1289   eProcessPluginCompletion = (1ul << 11),
1290   eDisassemblyFlavorCompletion = (1ul << 12),
1291   eTypeLanguageCompletion = (1ul << 13),
1292   eFrameIndexCompletion = (1ul << 14),
1293   eModuleUUIDCompletion = (1ul << 15),
1294   eStopHookIDCompletion = (1ul << 16),
1295   eThreadIndexCompletion = (1ul << 17),
1296   eWatchpointIDCompletion = (1ul << 18),
1297   eBreakpointNameCompletion = (1ul << 19),
1298   eProcessIDCompletion = (1ul << 20),
1299   eProcessNameCompletion = (1ul << 21),
1300   eRemoteDiskFileCompletion = (1ul << 22),
1301   eRemoteDiskDirectoryCompletion = (1ul << 23),
1302   eTypeCategoryNameCompletion = (1ul << 24),
1303   eCustomCompletion = (1ul << 25),
1304   eThreadIDCompletion = (1ul << 26),
1305   // This last enum element is just for input validation.
1306   // Add new completions before this element,
1307   // and then increment eTerminatorCompletion's shift value
1308   eTerminatorCompletion = (1ul << 27)
1309 };
1310 
1311 /// Specifies if children need to be re-computed
1312 /// after a call to \ref SyntheticChildrenFrontEnd::Update.
1313 enum class ChildCacheState {
1314   eRefetch = 0, ///< Children need to be recomputed dynamically.
1315 
1316   eReuse = 1, ///< Children did not change and don't need to be recomputed;
1317               ///< re-use what we computed the last time we called Update.
1318 };
1319 
1320 enum SymbolDownload {
1321   eSymbolDownloadOff = 0,
1322   eSymbolDownloadBackground = 1,
1323   eSymbolDownloadForeground = 2,
1324 };
1325 
1326 /// Used in the SBProcess AddressMask/FixAddress methods.
1327 enum AddressMaskType {
1328   eAddressMaskTypeCode = 0,
1329   eAddressMaskTypeData,
1330   eAddressMaskTypeAny,
1331   eAddressMaskTypeAll = eAddressMaskTypeAny
1332 };
1333 
1334 /// Used in the SBProcess AddressMask/FixAddress methods.
1335 enum AddressMaskRange {
1336   eAddressMaskRangeLow = 0,
1337   eAddressMaskRangeHigh,
1338   eAddressMaskRangeAny,
1339   eAddressMaskRangeAll = eAddressMaskRangeAny,
1340 };
1341 
1342 } // namespace lldb
1343 
1344 #endif // LLDB_LLDB_ENUMERATIONS_H
1345