xref: /freebsd/contrib/llvm-project/lldb/include/lldb/lldb-enumerations.h (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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 = eScriptLanguageLua
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 {
1111    eMatchTypeNormal,
1112    eMatchTypeRegex,
1113    eMatchTypeStartsWith,
1114    eMatchTypeRegexInsensitive
1115  };
1116  
1117  /// Bitmask that describes details about a type.
FLAGS_ENUM(TypeFlags)1118  FLAGS_ENUM(TypeFlags){
1119      eTypeHasChildren = (1u << 0),       eTypeHasValue = (1u << 1),
1120      eTypeIsArray = (1u << 2),           eTypeIsBlock = (1u << 3),
1121      eTypeIsBuiltIn = (1u << 4),         eTypeIsClass = (1u << 5),
1122      eTypeIsCPlusPlus = (1u << 6),       eTypeIsEnumeration = (1u << 7),
1123      eTypeIsFuncPrototype = (1u << 8),   eTypeIsMember = (1u << 9),
1124      eTypeIsObjC = (1u << 10),           eTypeIsPointer = (1u << 11),
1125      eTypeIsReference = (1u << 12),      eTypeIsStructUnion = (1u << 13),
1126      eTypeIsTemplate = (1u << 14),       eTypeIsTypedef = (1u << 15),
1127      eTypeIsVector = (1u << 16),         eTypeIsScalar = (1u << 17),
1128      eTypeIsInteger = (1u << 18),        eTypeIsFloat = (1u << 19),
1129      eTypeIsComplex = (1u << 20),        eTypeIsSigned = (1u << 21),
1130      eTypeInstanceIsPointer = (1u << 22)};
1131  
FLAGS_ENUM(CommandFlags)1132  FLAGS_ENUM(CommandFlags){
1133      /// eCommandRequiresTarget
1134      ///
1135      /// Ensures a valid target is contained in m_exe_ctx prior to executing the
1136      /// command. If a target doesn't exist or is invalid, the command will fail
1137      /// and CommandObject::GetInvalidTargetDescription() will be returned as the
1138      /// error. CommandObject subclasses can override the virtual function for
1139      /// GetInvalidTargetDescription() to provide custom strings when needed.
1140      eCommandRequiresTarget = (1u << 0),
1141      /// eCommandRequiresProcess
1142      ///
1143      /// Ensures a valid process is contained in m_exe_ctx prior to executing the
1144      /// command. If a process doesn't exist or is invalid, the command will fail
1145      /// and CommandObject::GetInvalidProcessDescription() will be returned as
1146      /// the error. CommandObject subclasses can override the virtual function
1147      /// for GetInvalidProcessDescription() to provide custom strings when
1148      /// needed.
1149      eCommandRequiresProcess = (1u << 1),
1150      /// eCommandRequiresThread
1151      ///
1152      /// Ensures a valid thread is contained in m_exe_ctx prior to executing the
1153      /// command. If a thread doesn't exist or is invalid, the command will fail
1154      /// and CommandObject::GetInvalidThreadDescription() will be returned as the
1155      /// error. CommandObject subclasses can override the virtual function for
1156      /// GetInvalidThreadDescription() to provide custom strings when needed.
1157      eCommandRequiresThread = (1u << 2),
1158      /// eCommandRequiresFrame
1159      ///
1160      /// Ensures a valid frame is contained in m_exe_ctx prior to executing the
1161      /// command. If a frame doesn't exist or is invalid, the command will fail
1162      /// and CommandObject::GetInvalidFrameDescription() will be returned as the
1163      /// error. CommandObject subclasses can override the virtual function for
1164      /// GetInvalidFrameDescription() to provide custom strings when needed.
1165      eCommandRequiresFrame = (1u << 3),
1166      /// eCommandRequiresRegContext
1167      ///
1168      /// Ensures a valid register context (from the selected frame if there is a
1169      /// frame in m_exe_ctx, or from the selected thread from m_exe_ctx) is
1170      /// available from m_exe_ctx prior to executing the command. If a target
1171      /// doesn't exist or is invalid, the command will fail and
1172      /// CommandObject::GetInvalidRegContextDescription() will be returned as the
1173      /// error. CommandObject subclasses can override the virtual function for
1174      /// GetInvalidRegContextDescription() to provide custom strings when needed.
1175      eCommandRequiresRegContext = (1u << 4),
1176      /// eCommandTryTargetAPILock
1177      ///
1178      /// Attempts to acquire the target lock if a target is selected in the
1179      /// command interpreter. If the command object fails to acquire the API
1180      /// lock, the command will fail with an appropriate error message.
1181      eCommandTryTargetAPILock = (1u << 5),
1182      /// eCommandProcessMustBeLaunched
1183      ///
1184      /// Verifies that there is a launched process in m_exe_ctx, if there isn't,
1185      /// the command will fail with an appropriate error message.
1186      eCommandProcessMustBeLaunched = (1u << 6),
1187      /// eCommandProcessMustBePaused
1188      ///
1189      /// Verifies that there is a paused process in m_exe_ctx, if there isn't,
1190      /// the command will fail with an appropriate error message.
1191      eCommandProcessMustBePaused = (1u << 7),
1192      /// eCommandProcessMustBeTraced
1193      ///
1194      /// Verifies that the process is being traced by a Trace plug-in, if it
1195      /// isn't the command will fail with an appropriate error message.
1196      eCommandProcessMustBeTraced = (1u << 8)};
1197  
1198  /// Whether a summary should cap how much data it returns to users or not.
1199  enum TypeSummaryCapping {
1200    eTypeSummaryCapped = true,
1201    eTypeSummaryUncapped = false
1202  };
1203  
1204  /// The result from a command interpreter run.
1205  enum CommandInterpreterResult {
1206    /// Command interpreter finished successfully.
1207    eCommandInterpreterResultSuccess,
1208    /// Stopped because the corresponding option was set and the inferior
1209    /// crashed.
1210    eCommandInterpreterResultInferiorCrash,
1211    /// Stopped because the corresponding option was set and a command returned
1212    /// an error.
1213    eCommandInterpreterResultCommandError,
1214    /// Stopped because quit was requested.
1215    eCommandInterpreterResultQuitRequested,
1216  };
1217  
1218  // Style of core file to create when calling SaveCore.
1219  enum SaveCoreStyle {
1220    eSaveCoreUnspecified = 0,
1221    eSaveCoreFull = 1,
1222    eSaveCoreDirtyOnly = 2,
1223    eSaveCoreStackOnly = 3,
1224  };
1225  
1226  /// Events that might happen during a trace session.
1227  enum TraceEvent {
1228    /// Tracing was disabled for some time due to a software trigger.
1229    eTraceEventDisabledSW,
1230    /// Tracing was disable for some time due to a hardware trigger.
1231    eTraceEventDisabledHW,
1232    /// Event due to CPU change for a thread. This event is also fired when
1233    /// suddenly it's not possible to identify the cpu of a given thread.
1234    eTraceEventCPUChanged,
1235    /// Event due to a CPU HW clock tick.
1236    eTraceEventHWClockTick,
1237    /// The underlying tracing technology emitted a synchronization event used by
1238    /// trace processors.
1239    eTraceEventSyncPoint,
1240  };
1241  
1242  // Enum used to identify which kind of item a \a TraceCursor is pointing at
1243  enum TraceItemKind {
1244    eTraceItemKindError = 0,
1245    eTraceItemKindEvent,
1246    eTraceItemKindInstruction,
1247  };
1248  
1249  /// Enum to indicate the reference point when invoking
1250  /// \a TraceCursor::Seek().
1251  /// The following values are inspired by \a std::istream::seekg.
1252  enum TraceCursorSeekType {
1253    /// The beginning of the trace, i.e the oldest item.
1254    eTraceCursorSeekTypeBeginning = 0,
1255    /// The current position in the trace.
1256    eTraceCursorSeekTypeCurrent,
1257    /// The end of the trace, i.e the most recent item.
1258    eTraceCursorSeekTypeEnd
1259  };
1260  
1261  /// Enum to control the verbosity level of `dwim-print` execution.
1262  enum DWIMPrintVerbosity {
1263    /// Run `dwim-print` with no verbosity.
1264    eDWIMPrintVerbosityNone,
1265    /// Print a message when `dwim-print` uses `expression` evaluation.
1266    eDWIMPrintVerbosityExpression,
1267    /// Always print a message indicating how `dwim-print` is evaluating its
1268    /// expression.
1269    eDWIMPrintVerbosityFull,
1270  };
1271  
1272  enum WatchpointValueKind {
1273    eWatchPointValueKindInvalid = 0,
1274    ///< Watchpoint was created watching a variable
1275    eWatchPointValueKindVariable = 1,
1276    ///< Watchpoint was created watching the result of an expression that was
1277    ///< evaluated at creation time.
1278    eWatchPointValueKindExpression = 2,
1279  };
1280  
1281  enum CompletionType {
1282    eNoCompletion = 0ul,
1283    eSourceFileCompletion = (1ul << 0),
1284    eDiskFileCompletion = (1ul << 1),
1285    eDiskDirectoryCompletion = (1ul << 2),
1286    eSymbolCompletion = (1ul << 3),
1287    eModuleCompletion = (1ul << 4),
1288    eSettingsNameCompletion = (1ul << 5),
1289    ePlatformPluginCompletion = (1ul << 6),
1290    eArchitectureCompletion = (1ul << 7),
1291    eVariablePathCompletion = (1ul << 8),
1292    eRegisterCompletion = (1ul << 9),
1293    eBreakpointCompletion = (1ul << 10),
1294    eProcessPluginCompletion = (1ul << 11),
1295    eDisassemblyFlavorCompletion = (1ul << 12),
1296    eTypeLanguageCompletion = (1ul << 13),
1297    eFrameIndexCompletion = (1ul << 14),
1298    eModuleUUIDCompletion = (1ul << 15),
1299    eStopHookIDCompletion = (1ul << 16),
1300    eThreadIndexCompletion = (1ul << 17),
1301    eWatchpointIDCompletion = (1ul << 18),
1302    eBreakpointNameCompletion = (1ul << 19),
1303    eProcessIDCompletion = (1ul << 20),
1304    eProcessNameCompletion = (1ul << 21),
1305    eRemoteDiskFileCompletion = (1ul << 22),
1306    eRemoteDiskDirectoryCompletion = (1ul << 23),
1307    eTypeCategoryNameCompletion = (1ul << 24),
1308    eCustomCompletion = (1ul << 25),
1309    eThreadIDCompletion = (1ul << 26),
1310    // This last enum element is just for input validation.
1311    // Add new completions before this element,
1312    // and then increment eTerminatorCompletion's shift value
1313    eTerminatorCompletion = (1ul << 27)
1314  };
1315  
1316  /// Specifies if children need to be re-computed
1317  /// after a call to \ref SyntheticChildrenFrontEnd::Update.
1318  enum ChildCacheState {
1319    eRefetch = 0, ///< Children need to be recomputed dynamically.
1320  
1321    eReuse = 1, ///< Children did not change and don't need to be recomputed;
1322                ///< re-use what we computed the last time we called Update.
1323  };
1324  
1325  enum SymbolDownload {
1326    eSymbolDownloadOff = 0,
1327    eSymbolDownloadBackground = 1,
1328    eSymbolDownloadForeground = 2,
1329  };
1330  
1331  /// Used in the SBProcess AddressMask/FixAddress methods.
1332  enum AddressMaskType {
1333    eAddressMaskTypeCode = 0,
1334    eAddressMaskTypeData,
1335    eAddressMaskTypeAny,
1336    eAddressMaskTypeAll = eAddressMaskTypeAny
1337  };
1338  
1339  /// Used in the SBProcess AddressMask/FixAddress methods.
1340  enum AddressMaskRange {
1341    eAddressMaskRangeLow = 0,
1342    eAddressMaskRangeHigh,
1343    eAddressMaskRangeAny,
1344    eAddressMaskRangeAll = eAddressMaskRangeAny,
1345  };
1346  
1347  /// Used by the debugger to indicate which events are being broadcasted.
1348  enum DebuggerBroadcastBit {
1349    eBroadcastBitProgress = (1 << 0),
1350    eBroadcastBitWarning = (1 << 1),
1351    eBroadcastBitError = (1 << 2),
1352    eBroadcastSymbolChange = (1 << 3),
1353    eBroadcastBitProgressCategory = (1 << 4),
1354  };
1355  
1356  /// Used for expressing severity in logs and diagnostics.
1357  enum Severity {
1358    eSeverityError,
1359    eSeverityWarning,
1360    eSeverityInfo, // Equivalent to Remark used in clang.
1361  };
1362  
1363  } // namespace lldb
1364  
1365  #endif // LLDB_LLDB_ENUMERATIONS_H
1366