blob: 2679ee52136dcc5ab910e46f2f410c53bf2b472b [file] [log] [blame]
//===-- lldb-enumerations.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLDB_LLDB_ENUMERATIONS_H
#define LLDB_LLDB_ENUMERATIONS_H
#include <type_traits>
#ifndef SWIG
// Macro to enable bitmask operations on an enum. Without this, Enum | Enum
// gets promoted to an int, so you have to say Enum a = Enum(eFoo | eBar). If
// you mark Enum with LLDB_MARK_AS_BITMASK_ENUM(Enum), however, you can simply
// write Enum a = eFoo | eBar.
// Unfortunately, swig<3.0 doesn't recognise the constexpr keyword, so remove
// this entire block, as it is not necessary for swig processing.
#define LLDB_MARK_AS_BITMASK_ENUM(Enum) \
constexpr Enum operator|(Enum a, Enum b) { \
return static_cast<Enum>( \
static_cast<std::underlying_type<Enum>::type>(a) | \
static_cast<std::underlying_type<Enum>::type>(b)); \
} \
constexpr Enum operator&(Enum a, Enum b) { \
return static_cast<Enum>( \
static_cast<std::underlying_type<Enum>::type>(a) & \
static_cast<std::underlying_type<Enum>::type>(b)); \
} \
constexpr Enum operator~(Enum a) { \
return static_cast<Enum>( \
~static_cast<std::underlying_type<Enum>::type>(a)); \
} \
inline Enum &operator|=(Enum &a, Enum b) { \
a = a | b; \
return a; \
} \
inline Enum &operator&=(Enum &a, Enum b) { \
a = a & b; \
return a; \
}
#else
#define LLDB_MARK_AS_BITMASK_ENUM(Enum)
#endif
#ifndef SWIG
// With MSVC, the default type of an enum is always signed, even if one of the
// enumerator values is too large to fit into a signed integer but would
// otherwise fit into an unsigned integer. As a result of this, all of LLDB's
// flag-style enumerations that specify something like eValueFoo = 1u << 31
// result in negative values. This usually just results in a benign warning,
// but in a few places we actually do comparisons on the enum values, which
// would cause a real bug. Furthermore, there's no way to silence only this
// warning, as it's part of -Wmicrosoft which also catches a whole slew of
// other useful issues.
//
// To make matters worse, early versions of SWIG don't recognize the syntax of
// specifying the underlying type of an enum (and Python doesn't care anyway)
// so we need a way to specify the underlying type when the enum is being used
// from C++ code, but just use a regular enum when swig is pre-processing.
#define FLAGS_ENUM(Name) enum Name : unsigned
#define FLAGS_ANONYMOUS_ENUM() enum : unsigned
#else
#define FLAGS_ENUM(Name) enum Name
#define FLAGS_ANONYMOUS_ENUM() enum
#endif
namespace lldb {
/// Process and Thread States.
enum StateType {
eStateInvalid = 0,
eStateUnloaded, ///< Process is object is valid, but not currently loaded
eStateConnected, ///< Process is connected to remote debug services, but not
/// launched or attached to anything yet
eStateAttaching, ///< Process is currently trying to attach
eStateLaunching, ///< Process is in the process of launching
// The state changes eStateAttaching and eStateLaunching are both sent while
// the private state thread is either not yet started or paused. For that
// reason, they should only be signaled as public state changes, and not
// private state changes.
eStateStopped, ///< Process or thread is stopped and can be examined.
eStateRunning, ///< Process or thread is running and can't be examined.
eStateStepping, ///< Process or thread is in the process of stepping and can
/// not be examined.
eStateCrashed, ///< Process or thread has crashed and can be examined.
eStateDetached, ///< Process has been detached and can't be examined.
eStateExited, ///< Process has exited and can't be examined.
eStateSuspended, ///< Process or thread is in a suspended state as far
///< as the debugger is concerned while other processes
///< or threads get the chance to run.
kLastStateType = eStateSuspended
};
/// Launch Flags.
FLAGS_ENUM(LaunchFlags){
eLaunchFlagNone = 0u,
eLaunchFlagExec = (1u << 0), ///< Exec when launching and turn the calling
/// process into a new process
eLaunchFlagDebug = (1u << 1), ///< Stop as soon as the process launches to
/// allow the process to be debugged
eLaunchFlagStopAtEntry = (1u
<< 2), ///< Stop at the program entry point
/// instead of auto-continuing when
/// launching or attaching at entry point
eLaunchFlagDisableASLR =
(1u << 3), ///< Disable Address Space Layout Randomization
eLaunchFlagDisableSTDIO =
(1u << 4), ///< Disable stdio for inferior process (e.g. for a GUI app)
eLaunchFlagLaunchInTTY =
(1u << 5), ///< Launch the process in a new TTY if supported by the host
eLaunchFlagLaunchInShell =
(1u << 6), ///< Launch the process inside a shell to get shell expansion
eLaunchFlagLaunchInSeparateProcessGroup =
(1u << 7), ///< Launch the process in a separate process group
///< If you are going to hand the process off (e.g. to
///< debugserver)
eLaunchFlagDontSetExitStatus = (1u << 8),
///< set this flag so lldb & the handee don't race to set its exit status.
eLaunchFlagDetachOnError = (1u << 9), ///< If set, then the client stub
///< should detach rather than killing
///< the debugee
///< if it loses connection with lldb.
eLaunchFlagShellExpandArguments =
(1u << 10), ///< Perform shell-style argument expansion
eLaunchFlagCloseTTYOnExit = (1u << 11), ///< Close the open TTY on exit
eLaunchFlagInheritTCCFromParent =
(1u << 12), ///< Don't make the inferior responsible for its own TCC
///< permissions but instead inherit them from its parent.
};
/// Thread Run Modes.
enum RunMode { eOnlyThisThread, eAllThreads, eOnlyDuringStepping };
/// Byte ordering definitions.
enum ByteOrder {
eByteOrderInvalid = 0,
eByteOrderBig = 1,
eByteOrderPDP = 2,
eByteOrderLittle = 4
};
/// Register encoding definitions.
enum Encoding {
eEncodingInvalid = 0,
eEncodingUint, ///< unsigned integer
eEncodingSint, ///< signed integer
eEncodingIEEE754, ///< float
eEncodingVector ///< vector registers
};
/// Display format definitions.
enum Format {
eFormatDefault = 0,
eFormatInvalid = 0,
eFormatBoolean,
eFormatBinary,
eFormatBytes,
eFormatBytesWithASCII,
eFormatChar,
eFormatCharPrintable, ///< Only printable characters, space if not printable
eFormatComplex, ///< Floating point complex type
eFormatComplexFloat = eFormatComplex,
eFormatCString, ///< NULL terminated C strings
eFormatDecimal,
eFormatEnum,
eFormatHex,
eFormatHexUppercase,
eFormatFloat,
eFormatOctal,
eFormatOSType, ///< OS character codes encoded into an integer 'PICT' 'text'
///< etc...
eFormatUnicode16,
eFormatUnicode32,
eFormatUnsigned,
eFormatPointer,
eFormatVectorOfChar,
eFormatVectorOfSInt8,
eFormatVectorOfUInt8,
eFormatVectorOfSInt16,
eFormatVectorOfUInt16,
eFormatVectorOfSInt32,
eFormatVectorOfUInt32,
eFormatVectorOfSInt64,
eFormatVectorOfUInt64,
eFormatVectorOfFloat16,
eFormatVectorOfFloat32,
eFormatVectorOfFloat64,
eFormatVectorOfUInt128,
eFormatComplexInteger, ///< Integer complex type
eFormatCharArray, ///< Print characters with no single quotes, used for
///< character arrays that can contain non printable
///< characters
eFormatAddressInfo, ///< Describe what an address points to (func + offset
///< with file/line, symbol + offset, data, etc)
eFormatHexFloat, ///< ISO C99 hex float string
eFormatInstruction, ///< Disassemble an opcode
eFormatVoid, ///< Do not print this
eFormatUnicode8,
kNumFormats
};
/// Description levels for "void GetDescription(Stream *, DescriptionLevel)"
/// calls.
enum DescriptionLevel {
eDescriptionLevelBrief = 0,
eDescriptionLevelFull,
eDescriptionLevelVerbose,
eDescriptionLevelInitial,
kNumDescriptionLevels
};
/// Script interpreter types.
enum ScriptLanguage {
eScriptLanguageNone = 0,
eScriptLanguagePython,
eScriptLanguageLua,
eScriptLanguageUnknown,
eScriptLanguageDefault = eScriptLanguagePython
};
/// Register numbering types.
// See RegisterContext::ConvertRegisterKindToRegisterNumber to convert any of
// these to the lldb internal register numbering scheme (eRegisterKindLLDB).
enum RegisterKind {
eRegisterKindEHFrame = 0, ///< the register numbers seen in eh_frame
eRegisterKindDWARF, ///< the register numbers seen DWARF
eRegisterKindGeneric, ///< insn ptr reg, stack ptr reg, etc not specific to
///< any particular target
eRegisterKindProcessPlugin, ///< num used by the process plugin - e.g. by the
///< remote gdb-protocol stub program
eRegisterKindLLDB, ///< lldb's internal register numbers
kNumRegisterKinds
};
/// Thread stop reasons.
enum StopReason {
eStopReasonInvalid = 0,
eStopReasonNone,
eStopReasonTrace,
eStopReasonBreakpoint,
eStopReasonWatchpoint,
eStopReasonSignal,
eStopReasonException,
eStopReasonExec, ///< Program was re-exec'ed
eStopReasonPlanComplete,
eStopReasonThreadExiting,
eStopReasonInstrumentation
};
/// Command Return Status Types.
enum ReturnStatus {
eReturnStatusInvalid,
eReturnStatusSuccessFinishNoResult,
eReturnStatusSuccessFinishResult,
eReturnStatusSuccessContinuingNoResult,
eReturnStatusSuccessContinuingResult,
eReturnStatusStarted,
eReturnStatusFailed,
eReturnStatusQuit
};
/// The results of expression evaluation.
enum ExpressionResults {
eExpressionCompleted = 0,
eExpressionSetupError,
eExpressionParseError,
eExpressionDiscarded,
eExpressionInterrupted,
eExpressionHitBreakpoint,
eExpressionTimedOut,
eExpressionResultUnavailable,
eExpressionStoppedForDebug,
eExpressionThreadVanished
};
enum SearchDepth {
eSearchDepthInvalid = 0,
eSearchDepthTarget,
eSearchDepthModule,
eSearchDepthCompUnit,
eSearchDepthFunction,
eSearchDepthBlock,
eSearchDepthAddress,
kLastSearchDepthKind = eSearchDepthAddress
};
/// Connection Status Types.
enum ConnectionStatus {
eConnectionStatusSuccess, ///< Success
eConnectionStatusEndOfFile, ///< End-of-file encountered
eConnectionStatusError, ///< Check GetError() for details
eConnectionStatusTimedOut, ///< Request timed out
eConnectionStatusNoConnection, ///< No connection
eConnectionStatusLostConnection, ///< Lost connection while connected to a
///< valid connection
eConnectionStatusInterrupted ///< Interrupted read
};
enum ErrorType {
eErrorTypeInvalid,
eErrorTypeGeneric, ///< Generic errors that can be any value.
eErrorTypeMachKernel, ///< Mach kernel error codes.
eErrorTypePOSIX, ///< POSIX error codes.
eErrorTypeExpression, ///< These are from the ExpressionResults enum.
eErrorTypeWin32 ///< Standard Win32 error codes.
};
enum ValueType {
eValueTypeInvalid = 0,
eValueTypeVariableGlobal = 1, ///< globals variable
eValueTypeVariableStatic = 2, ///< static variable
eValueTypeVariableArgument = 3, ///< function argument variables
eValueTypeVariableLocal = 4, ///< function local variables
eValueTypeRegister = 5, ///< stack frame register value
eValueTypeRegisterSet = 6, ///< A collection of stack frame register values
eValueTypeConstResult = 7, ///< constant result variables
eValueTypeVariableThreadLocal = 8 ///< thread local storage variable
};
/// Token size/granularities for Input Readers.
enum InputReaderGranularity {
eInputReaderGranularityInvalid = 0,
eInputReaderGranularityByte,
eInputReaderGranularityWord,
eInputReaderGranularityLine,
eInputReaderGranularityAll
};
/// These mask bits allow a common interface for queries that can
/// limit the amount of information that gets parsed to only the
/// information that is requested. These bits also can indicate what
/// actually did get resolved during query function calls.
///
/// Each definition corresponds to a one of the member variables
/// in this class, and requests that that item be resolved, or
/// indicates that the member did get resolved.
FLAGS_ENUM(SymbolContextItem){
/// Set when \a target is requested from a query, or was located
/// in query results
eSymbolContextTarget = (1u << 0),
/// Set when \a module is requested from a query, or was located
/// in query results
eSymbolContextModule = (1u << 1),
/// Set when \a comp_unit is requested from a query, or was
/// located in query results
eSymbolContextCompUnit = (1u << 2),
/// Set when \a function is requested from a query, or was located
/// in query results
eSymbolContextFunction = (1u << 3),
/// Set when the deepest \a block is requested from a query, or
/// was located in query results
eSymbolContextBlock = (1u << 4),
/// Set when \a line_entry is requested from a query, or was
/// located in query results
eSymbolContextLineEntry = (1u << 5),
/// Set when \a symbol is requested from a query, or was located
/// in query results
eSymbolContextSymbol = (1u << 6),
/// Indicates to try and lookup everything up during a routine
/// symbol context query.
eSymbolContextEverything = ((eSymbolContextSymbol << 1) - 1u),
/// Set when \a global or static variable is requested from a
/// query, or was located in query results.
/// eSymbolContextVariable is potentially expensive to lookup so
/// it isn't included in eSymbolContextEverything which stops it
/// from being used during frame PC lookups and many other
/// potential address to symbol context lookups.
eSymbolContextVariable = (1u << 7),
};
LLDB_MARK_AS_BITMASK_ENUM(SymbolContextItem)
FLAGS_ENUM(Permissions){ePermissionsWritable = (1u << 0),
ePermissionsReadable = (1u << 1),
ePermissionsExecutable = (1u << 2)};
LLDB_MARK_AS_BITMASK_ENUM(Permissions)
enum InputReaderAction {
eInputReaderActivate, ///< reader is newly pushed onto the reader stack
eInputReaderAsynchronousOutputWritten, ///< an async output event occurred;
///< the reader may want to do
///< something
eInputReaderReactivate, ///< reader is on top of the stack again after another
///< reader was popped off
eInputReaderDeactivate, ///< another reader was pushed on the stack
eInputReaderGotToken, ///< reader got one of its tokens (granularity)
eInputReaderInterrupt, ///< reader received an interrupt signal (probably from
///< a control-c)
eInputReaderEndOfFile, ///< reader received an EOF char (probably from a
///< control-d)
eInputReaderDone ///< reader was just popped off the stack and is done
};
FLAGS_ENUM(BreakpointEventType){
eBreakpointEventTypeInvalidType = (1u << 0),
eBreakpointEventTypeAdded = (1u << 1),
eBreakpointEventTypeRemoved = (1u << 2),
eBreakpointEventTypeLocationsAdded = (1u << 3), ///< Locations added doesn't
///< get sent when the
///< breakpoint is created
eBreakpointEventTypeLocationsRemoved = (1u << 4),
eBreakpointEventTypeLocationsResolved = (1u << 5),
eBreakpointEventTypeEnabled = (1u << 6),
eBreakpointEventTypeDisabled = (1u << 7),
eBreakpointEventTypeCommandChanged = (1u << 8),
eBreakpointEventTypeConditionChanged = (1u << 9),
eBreakpointEventTypeIgnoreChanged = (1u << 10),
eBreakpointEventTypeThreadChanged = (1u << 11),
eBreakpointEventTypeAutoContinueChanged = (1u << 12)};
FLAGS_ENUM(WatchpointEventType){
eWatchpointEventTypeInvalidType = (1u << 0),
eWatchpointEventTypeAdded = (1u << 1),
eWatchpointEventTypeRemoved = (1u << 2),
eWatchpointEventTypeEnabled = (1u << 6),
eWatchpointEventTypeDisabled = (1u << 7),
eWatchpointEventTypeCommandChanged = (1u << 8),
eWatchpointEventTypeConditionChanged = (1u << 9),
eWatchpointEventTypeIgnoreChanged = (1u << 10),
eWatchpointEventTypeThreadChanged = (1u << 11),
eWatchpointEventTypeTypeChanged = (1u << 12)};
/// Programming language type.
///
/// These enumerations use the same language enumerations as the DWARF
/// specification for ease of use and consistency.
/// The enum -> string code is in Language.cpp, don't change this
/// table without updating that code as well.
enum LanguageType {
eLanguageTypeUnknown = 0x0000, ///< Unknown or invalid language value.
eLanguageTypeC89 = 0x0001, ///< ISO C:1989.
eLanguageTypeC = 0x0002, ///< Non-standardized C, such as K&R.
eLanguageTypeAda83 = 0x0003, ///< ISO Ada:1983.
eLanguageTypeC_plus_plus = 0x0004, ///< ISO C++:1998.
eLanguageTypeCobol74 = 0x0005, ///< ISO Cobol:1974.
eLanguageTypeCobol85 = 0x0006, ///< ISO Cobol:1985.
eLanguageTypeFortran77 = 0x0007, ///< ISO Fortran 77.
eLanguageTypeFortran90 = 0x0008, ///< ISO Fortran 90.
eLanguageTypePascal83 = 0x0009, ///< ISO Pascal:1983.
eLanguageTypeModula2 = 0x000a, ///< ISO Modula-2:1996.
eLanguageTypeJava = 0x000b, ///< Java.
eLanguageTypeC99 = 0x000c, ///< ISO C:1999.
eLanguageTypeAda95 = 0x000d, ///< ISO Ada:1995.
eLanguageTypeFortran95 = 0x000e, ///< ISO Fortran 95.
eLanguageTypePLI = 0x000f, ///< ANSI PL/I:1976.
eLanguageTypeObjC = 0x0010, ///< Objective-C.
eLanguageTypeObjC_plus_plus = 0x0011, ///< Objective-C++.
eLanguageTypeUPC = 0x0012, ///< Unified Parallel C.
eLanguageTypeD = 0x0013, ///< D.
eLanguageTypePython = 0x0014, ///< Python.
// NOTE: The below are DWARF5 constants, subject to change upon
// completion of the DWARF5 specification
eLanguageTypeOpenCL = 0x0015, ///< OpenCL.
eLanguageTypeGo = 0x0016, ///< Go.
eLanguageTypeModula3 = 0x0017, ///< Modula 3.
eLanguageTypeHaskell = 0x0018, ///< Haskell.
eLanguageTypeC_plus_plus_03 = 0x0019, ///< ISO C++:2003.
eLanguageTypeC_plus_plus_11 = 0x001a, ///< ISO C++:2011.
eLanguageTypeOCaml = 0x001b, ///< OCaml.
eLanguageTypeRust = 0x001c, ///< Rust.
eLanguageTypeC11 = 0x001d, ///< ISO C:2011.
eLanguageTypeSwift = 0x001e, ///< Swift.
eLanguageTypeJulia = 0x001f, ///< Julia.
eLanguageTypeDylan = 0x0020, ///< Dylan.
eLanguageTypeC_plus_plus_14 = 0x0021, ///< ISO C++:2014.
eLanguageTypeFortran03 = 0x0022, ///< ISO Fortran 2003.
eLanguageTypeFortran08 = 0x0023, ///< ISO Fortran 2008.
// Vendor Extensions
// Note: Language::GetNameForLanguageType
// assumes these can be used as indexes into array language_names, and
// Language::SetLanguageFromCString and Language::AsCString assume these can
// be used as indexes into array g_languages.
eLanguageTypeMipsAssembler = 0x0024, ///< Mips_Assembler.
eLanguageTypeExtRenderScript = 0x0025, ///< RenderScript.
eNumLanguageTypes
};
enum InstrumentationRuntimeType {
eInstrumentationRuntimeTypeAddressSanitizer = 0x0000,
eInstrumentationRuntimeTypeThreadSanitizer = 0x0001,
eInstrumentationRuntimeTypeUndefinedBehaviorSanitizer = 0x0002,
eInstrumentationRuntimeTypeMainThreadChecker = 0x0003,
eInstrumentationRuntimeTypeSwiftRuntimeReporting = 0x0004,
eNumInstrumentationRuntimeTypes
};
enum DynamicValueType {
eNoDynamicValues = 0,
eDynamicCanRunTarget = 1,
eDynamicDontRunTarget = 2
};
enum StopShowColumn {
eStopShowColumnAnsiOrCaret = 0,
eStopShowColumnAnsi = 1,
eStopShowColumnCaret = 2,
eStopShowColumnNone = 3
};
enum AccessType {
eAccessNone,
eAccessPublic,
eAccessPrivate,
eAccessProtected,
eAccessPackage
};
enum CommandArgumentType {
eArgTypeAddress = 0,
eArgTypeAddressOrExpression,
eArgTypeAliasName,
eArgTypeAliasOptions,
eArgTypeArchitecture,
eArgTypeBoolean,
eArgTypeBreakpointID,
eArgTypeBreakpointIDRange,
eArgTypeBreakpointName,
eArgTypeByteSize,
eArgTypeClassName,
eArgTypeCommandName,
eArgTypeCount,
eArgTypeDescriptionVerbosity,
eArgTypeDirectoryName,
eArgTypeDisassemblyFlavor,
eArgTypeEndAddress,
eArgTypeExpression,
eArgTypeExpressionPath,
eArgTypeExprFormat,
eArgTypeFileLineColumn,
eArgTypeFilename,
eArgTypeFormat,
eArgTypeFrameIndex,
eArgTypeFullName,
eArgTypeFunctionName,
eArgTypeFunctionOrSymbol,
eArgTypeGDBFormat,
eArgTypeHelpText,
eArgTypeIndex,
eArgTypeLanguage,
eArgTypeLineNum,
eArgTypeLogCategory,
eArgTypeLogChannel,
eArgTypeMethod,
eArgTypeName,
eArgTypeNewPathPrefix,
eArgTypeNumLines,
eArgTypeNumberPerLine,
eArgTypeOffset,
eArgTypeOldPathPrefix,
eArgTypeOneLiner,
eArgTypePath,
eArgTypePermissionsNumber,
eArgTypePermissionsString,
eArgTypePid,
eArgTypePlugin,
eArgTypeProcessName,
eArgTypePythonClass,
eArgTypePythonFunction,
eArgTypePythonScript,
eArgTypeQueueName,
eArgTypeRegisterName,
eArgTypeRegularExpression,
eArgTypeRunArgs,
eArgTypeRunMode,
eArgTypeScriptedCommandSynchronicity,
eArgTypeScriptLang,
eArgTypeSearchWord,
eArgTypeSelector,
eArgTypeSettingIndex,
eArgTypeSettingKey,
eArgTypeSettingPrefix,
eArgTypeSettingVariableName,
eArgTypeShlibName,
eArgTypeSourceFile,
eArgTypeSortOrder,
eArgTypeStartAddress,
eArgTypeSummaryString,
eArgTypeSymbol,
eArgTypeThreadID,
eArgTypeThreadIndex,
eArgTypeThreadName,
eArgTypeTypeName,
eArgTypeUnsignedInteger,
eArgTypeUnixSignal,
eArgTypeVarName,
eArgTypeValue,
eArgTypeWidth,
eArgTypeNone,
eArgTypePlatform,
eArgTypeWatchpointID,
eArgTypeWatchpointIDRange,
eArgTypeWatchType,
eArgRawInput,
eArgTypeCommand,
eArgTypeColumnNum,
eArgTypeModuleUUID,
eArgTypeLastArg // Always keep this entry as the last entry in this
// enumeration!!
};
/// Symbol types.
// Symbol holds the SymbolType in a 6-bit field (m_type), so if you get over 63
// entries you will have to resize that field.
enum SymbolType {
eSymbolTypeAny = 0,
eSymbolTypeInvalid = 0,
eSymbolTypeAbsolute,
eSymbolTypeCode,
eSymbolTypeResolver,
eSymbolTypeData,
eSymbolTypeTrampoline,
eSymbolTypeRuntime,
eSymbolTypeException,
eSymbolTypeSourceFile,
eSymbolTypeHeaderFile,
eSymbolTypeObjectFile,
eSymbolTypeCommonBlock,
eSymbolTypeBlock,
eSymbolTypeLocal,
eSymbolTypeParam,
eSymbolTypeVariable,
eSymbolTypeVariableType,
eSymbolTypeLineEntry,
eSymbolTypeLineHeader,
eSymbolTypeScopeBegin,
eSymbolTypeScopeEnd,
eSymbolTypeAdditional, ///< When symbols take more than one entry, the extra
///< entries get this type
eSymbolTypeCompiler,
eSymbolTypeInstrumentation,
eSymbolTypeUndefined,
eSymbolTypeObjCClass,
eSymbolTypeObjCMetaClass,
eSymbolTypeObjCIVar,
eSymbolTypeReExported
};
enum SectionType {
eSectionTypeInvalid,
eSectionTypeCode,
eSectionTypeContainer, ///< The section contains child sections
eSectionTypeData,
eSectionTypeDataCString, ///< Inlined C string data
eSectionTypeDataCStringPointers, ///< Pointers to C string data
eSectionTypeDataSymbolAddress, ///< Address of a symbol in the symbol table
eSectionTypeData4,
eSectionTypeData8,
eSectionTypeData16,
eSectionTypeDataPointers,
eSectionTypeDebug,
eSectionTypeZeroFill,
eSectionTypeDataObjCMessageRefs, ///< Pointer to function pointer + selector
eSectionTypeDataObjCCFStrings, ///< Objective-C const CFString/NSString
///< objects
eSectionTypeDWARFDebugAbbrev,
eSectionTypeDWARFDebugAddr,
eSectionTypeDWARFDebugAranges,
eSectionTypeDWARFDebugCuIndex,
eSectionTypeDWARFDebugFrame,
eSectionTypeDWARFDebugInfo,
eSectionTypeDWARFDebugLine,
eSectionTypeDWARFDebugLoc,
eSectionTypeDWARFDebugMacInfo,
eSectionTypeDWARFDebugMacro,
eSectionTypeDWARFDebugPubNames,
eSectionTypeDWARFDebugPubTypes,
eSectionTypeDWARFDebugRanges,
eSectionTypeDWARFDebugStr,
eSectionTypeDWARFDebugStrOffsets,
eSectionTypeDWARFAppleNames,
eSectionTypeDWARFAppleTypes,
eSectionTypeDWARFAppleNamespaces,
eSectionTypeDWARFAppleObjC,
eSectionTypeELFSymbolTable, ///< Elf SHT_SYMTAB section
eSectionTypeELFDynamicSymbols, ///< Elf SHT_DYNSYM section
eSectionTypeELFRelocationEntries, ///< Elf SHT_REL or SHT_REL section
eSectionTypeELFDynamicLinkInfo, ///< Elf SHT_DYNAMIC section
eSectionTypeEHFrame,
eSectionTypeARMexidx,
eSectionTypeARMextab,
eSectionTypeCompactUnwind, ///< compact unwind section in Mach-O,
///< __TEXT,__unwind_info
eSectionTypeGoSymtab,
eSectionTypeAbsoluteAddress, ///< Dummy section for symbols with absolute
///< address
eSectionTypeDWARFGNUDebugAltLink,
eSectionTypeDWARFDebugTypes, ///< DWARF .debug_types section
eSectionTypeDWARFDebugNames, ///< DWARF v5 .debug_names
eSectionTypeOther,
eSectionTypeDWARFDebugLineStr, ///< DWARF v5 .debug_line_str
eSectionTypeDWARFDebugRngLists, ///< DWARF v5 .debug_rnglists
eSectionTypeDWARFDebugLocLists, ///< DWARF v5 .debug_loclists
eSectionTypeDWARFDebugAbbrevDwo,
eSectionTypeDWARFDebugInfoDwo,
eSectionTypeDWARFDebugStrDwo,
eSectionTypeDWARFDebugStrOffsetsDwo,
eSectionTypeDWARFDebugTypesDwo,
eSectionTypeDWARFDebugRngListsDwo,
eSectionTypeDWARFDebugLocDwo,
eSectionTypeDWARFDebugLocListsDwo,
eSectionTypeDWARFDebugTuIndex,
};
FLAGS_ENUM(EmulateInstructionOptions){
eEmulateInstructionOptionNone = (0u),
eEmulateInstructionOptionAutoAdvancePC = (1u << 0),
eEmulateInstructionOptionIgnoreConditions = (1u << 1)};
FLAGS_ENUM(FunctionNameType){
eFunctionNameTypeNone = 0u,
eFunctionNameTypeAuto =
(1u << 1), ///< Automatically figure out which FunctionNameType
///< bits to set based on the function name.
eFunctionNameTypeFull = (1u << 2), ///< The function name.
///< For C this is the same as just the name of the function For C++ this is
///< the mangled or demangled version of the mangled name. For ObjC this is
///< the full function signature with the + or - and the square brackets and
///< the class and selector
eFunctionNameTypeBase = (1u
<< 3), ///< The function name only, no namespaces
///< or arguments and no class
///< methods or selectors will be searched.
eFunctionNameTypeMethod = (1u << 4), ///< Find function by method name (C++)
///< with no namespace or arguments
eFunctionNameTypeSelector =
(1u << 5), ///< Find function by selector name (ObjC) names
eFunctionNameTypeAny =
eFunctionNameTypeAuto ///< DEPRECATED: use eFunctionNameTypeAuto
};
LLDB_MARK_AS_BITMASK_ENUM(FunctionNameType)
/// Basic types enumeration for the public API SBType::GetBasicType().
enum BasicType {
eBasicTypeInvalid = 0,
eBasicTypeVoid = 1,
eBasicTypeChar,
eBasicTypeSignedChar,
eBasicTypeUnsignedChar,
eBasicTypeWChar,
eBasicTypeSignedWChar,
eBasicTypeUnsignedWChar,
eBasicTypeChar16,
eBasicTypeChar32,
eBasicTypeShort,
eBasicTypeUnsignedShort,
eBasicTypeInt,
eBasicTypeUnsignedInt,
eBasicTypeLong,
eBasicTypeUnsignedLong,
eBasicTypeLongLong,
eBasicTypeUnsignedLongLong,
eBasicTypeInt128,
eBasicTypeUnsignedInt128,
eBasicTypeBool,
eBasicTypeHalf,
eBasicTypeFloat,
eBasicTypeDouble,
eBasicTypeLongDouble,
eBasicTypeFloatComplex,
eBasicTypeDoubleComplex,
eBasicTypeLongDoubleComplex,
eBasicTypeObjCID,
eBasicTypeObjCClass,
eBasicTypeObjCSel,
eBasicTypeNullPtr,
eBasicTypeOther
};
/// Deprecated
enum TraceType {
eTraceTypeNone = 0,
/// Intel Processor Trace
eTraceTypeProcessorTrace
};
enum StructuredDataType {
eStructuredDataTypeInvalid = -1,
eStructuredDataTypeNull = 0,
eStructuredDataTypeGeneric,
eStructuredDataTypeArray,
eStructuredDataTypeInteger,
eStructuredDataTypeFloat,
eStructuredDataTypeBoolean,
eStructuredDataTypeString,
eStructuredDataTypeDictionary
};
FLAGS_ENUM(TypeClass){
eTypeClassInvalid = (0u), eTypeClassArray = (1u << 0),
eTypeClassBlockPointer = (1u << 1), eTypeClassBuiltin = (1u << 2),
eTypeClassClass = (1u << 3), eTypeClassComplexFloat = (1u << 4),
eTypeClassComplexInteger = (1u << 5), eTypeClassEnumeration = (1u << 6),
eTypeClassFunction = (1u << 7), eTypeClassMemberPointer = (1u << 8),
eTypeClassObjCObject = (1u << 9), eTypeClassObjCInterface = (1u << 10),
eTypeClassObjCObjectPointer = (1u << 11), eTypeClassPointer = (1u << 12),
eTypeClassReference = (1u << 13), eTypeClassStruct = (1u << 14),
eTypeClassTypedef = (1u << 15), eTypeClassUnion = (1u << 16),
eTypeClassVector = (1u << 17),
// Define the last type class as the MSBit of a 32 bit value
eTypeClassOther = (1u << 31),
// Define a mask that can be used for any type when finding types
eTypeClassAny = (0xffffffffu)};
LLDB_MARK_AS_BITMASK_ENUM(TypeClass)
enum TemplateArgumentKind {
eTemplateArgumentKindNull = 0,
eTemplateArgumentKindType,
eTemplateArgumentKindDeclaration,
eTemplateArgumentKindIntegral,
eTemplateArgumentKindTemplate,
eTemplateArgumentKindTemplateExpansion,
eTemplateArgumentKindExpression,
eTemplateArgumentKindPack,
eTemplateArgumentKindNullPtr,
};
/// Options that can be set for a formatter to alter its behavior. Not
/// all of these are applicable to all formatter types.
FLAGS_ENUM(TypeOptions){eTypeOptionNone = (0u),
eTypeOptionCascade = (1u << 0),
eTypeOptionSkipPointers = (1u << 1),
eTypeOptionSkipReferences = (1u << 2),
eTypeOptionHideChildren = (1u << 3),
eTypeOptionHideValue = (1u << 4),
eTypeOptionShowOneLiner = (1u << 5),
eTypeOptionHideNames = (1u << 6),
eTypeOptionNonCacheable = (1u << 7),
eTypeOptionHideEmptyAggregates = (1u << 8),
eTypeOptionFrontEndWantsDereference = (1u << 9)};
/// This is the return value for frame comparisons. If you are comparing frame
/// A to frame B the following cases arise:
///
/// 1) When frame A pushes frame B (or a frame that ends up pushing
/// B) A is Older than B.
///
/// 2) When frame A pushed frame B (or if frameA is on the stack
/// but B is not) A is Younger than B.
///
/// 3) When frame A and frame B have the same StackID, they are
/// Equal.
///
/// 4) When frame A and frame B have the same immediate parent
/// frame, but are not equal, the comparison yields SameParent.
///
/// 5) If the two frames are on different threads or processes the
/// comparison is Invalid.
///
/// 6) If for some reason we can't figure out what went on, we
/// return Unknown.
enum FrameComparison {
eFrameCompareInvalid,
eFrameCompareUnknown,
eFrameCompareEqual,
eFrameCompareSameParent,
eFrameCompareYounger,
eFrameCompareOlder
};
/// File Permissions.
///
/// Designed to mimic the unix file permission bits so they can be used with
/// functions that set 'mode_t' to certain values for permissions.
FLAGS_ENUM(FilePermissions){
eFilePermissionsUserRead = (1u << 8),
eFilePermissionsUserWrite = (1u << 7),
eFilePermissionsUserExecute = (1u << 6),
eFilePermissionsGroupRead = (1u << 5),
eFilePermissionsGroupWrite = (1u << 4),
eFilePermissionsGroupExecute = (1u << 3),
eFilePermissionsWorldRead = (1u << 2),
eFilePermissionsWorldWrite = (1u << 1),
eFilePermissionsWorldExecute = (1u << 0),
eFilePermissionsUserRW = (eFilePermissionsUserRead |
eFilePermissionsUserWrite | 0),
eFileFilePermissionsUserRX = (eFilePermissionsUserRead | 0 |
eFilePermissionsUserExecute),
eFilePermissionsUserRWX = (eFilePermissionsUserRead |
eFilePermissionsUserWrite |
eFilePermissionsUserExecute),
eFilePermissionsGroupRW = (eFilePermissionsGroupRead |
eFilePermissionsGroupWrite | 0),
eFilePermissionsGroupRX = (eFilePermissionsGroupRead | 0 |
eFilePermissionsGroupExecute),
eFilePermissionsGroupRWX = (eFilePermissionsGroupRead |
eFilePermissionsGroupWrite |
eFilePermissionsGroupExecute),
eFilePermissionsWorldRW = (eFilePermissionsWorldRead |
eFilePermissionsWorldWrite | 0),
eFilePermissionsWorldRX = (eFilePermissionsWorldRead | 0 |
eFilePermissionsWorldExecute),
eFilePermissionsWorldRWX = (eFilePermissionsWorldRead |
eFilePermissionsWorldWrite |
eFilePermissionsWorldExecute),
eFilePermissionsEveryoneR = (eFilePermissionsUserRead |
eFilePermissionsGroupRead |
eFilePermissionsWorldRead),
eFilePermissionsEveryoneW = (eFilePermissionsUserWrite |
eFilePermissionsGroupWrite |
eFilePermissionsWorldWrite),
eFilePermissionsEveryoneX = (eFilePermissionsUserExecute |
eFilePermissionsGroupExecute |
eFilePermissionsWorldExecute),
eFilePermissionsEveryoneRW = (eFilePermissionsEveryoneR |
eFilePermissionsEveryoneW | 0),
eFilePermissionsEveryoneRX = (eFilePermissionsEveryoneR | 0 |
eFilePermissionsEveryoneX),
eFilePermissionsEveryoneRWX = (eFilePermissionsEveryoneR |
eFilePermissionsEveryoneW |
eFilePermissionsEveryoneX),
eFilePermissionsFileDefault = eFilePermissionsUserRW,
eFilePermissionsDirectoryDefault = eFilePermissionsUserRWX,
};
/// Queue work item types.
///
/// The different types of work that can be enqueued on a libdispatch aka Grand
/// Central Dispatch (GCD) queue.
enum QueueItemKind {
eQueueItemKindUnknown = 0,
eQueueItemKindFunction,
eQueueItemKindBlock
};
/// Queue type.
///
/// libdispatch aka Grand Central Dispatch (GCD) queues can be either
/// serial (executing on one thread) or concurrent (executing on
/// multiple threads).
enum QueueKind {
eQueueKindUnknown = 0,
eQueueKindSerial,
eQueueKindConcurrent
};
/// Expression Evaluation Stages.
///
/// These are the cancellable stages of expression evaluation, passed
/// to the expression evaluation callback, so that you can interrupt
/// expression evaluation at the various points in its lifecycle.
enum ExpressionEvaluationPhase {
eExpressionEvaluationParse = 0,
eExpressionEvaluationIRGen,
eExpressionEvaluationExecution,
eExpressionEvaluationComplete
};
/// Watchpoint Kind.
///
/// Indicates what types of events cause the watchpoint to fire. Used by Native
/// *Protocol-related classes.
FLAGS_ENUM(WatchpointKind){eWatchpointKindWrite = (1u << 0),
eWatchpointKindRead = (1u << 1)};
enum GdbSignal {
eGdbSignalBadAccess = 0x91,
eGdbSignalBadInstruction = 0x92,
eGdbSignalArithmetic = 0x93,
eGdbSignalEmulation = 0x94,
eGdbSignalSoftware = 0x95,
eGdbSignalBreakpoint = 0x96
};
/// Used with SBHost::GetPath (lldb::PathType) to find files that are
/// related to LLDB on the current host machine. Most files are
/// relative to LLDB or are in known locations.
enum PathType {
ePathTypeLLDBShlibDir, ///< The directory where the lldb.so (unix) or LLDB
///< mach-o file in LLDB.framework (MacOSX) exists
ePathTypeSupportExecutableDir, ///< Find LLDB support executable directory
///< (debugserver, etc)
ePathTypeHeaderDir, ///< Find LLDB header file directory
ePathTypePythonDir, ///< Find Python modules (PYTHONPATH) directory
ePathTypeLLDBSystemPlugins, ///< System plug-ins directory
ePathTypeLLDBUserPlugins, ///< User plug-ins directory
ePathTypeLLDBTempSystemDir, ///< The LLDB temp directory for this system that
///< will be cleaned up on exit
ePathTypeGlobalLLDBTempSystemDir, ///< The LLDB temp directory for this
///< system, NOT cleaned up on a process
///< exit.
ePathTypeClangDir ///< Find path to Clang builtin headers
};
/// Kind of member function.
///
/// Used by the type system.
enum MemberFunctionKind {
eMemberFunctionKindUnknown = 0, ///< Not sure what the type of this is
eMemberFunctionKindConstructor, ///< A function used to create instances
eMemberFunctionKindDestructor, ///< A function used to tear down existing
///< instances
eMemberFunctionKindInstanceMethod, ///< A function that applies to a specific
///< instance
eMemberFunctionKindStaticMethod ///< A function that applies to a type rather
///< than any instance
};
/// String matching algorithm used by SBTarget.
enum MatchType { eMatchTypeNormal, eMatchTypeRegex, eMatchTypeStartsWith };
/// Bitmask that describes details about a type.
FLAGS_ENUM(TypeFlags){
eTypeHasChildren = (1u << 0), eTypeHasValue = (1u << 1),
eTypeIsArray = (1u << 2), eTypeIsBlock = (1u << 3),
eTypeIsBuiltIn = (1u << 4), eTypeIsClass = (1u << 5),
eTypeIsCPlusPlus = (1u << 6), eTypeIsEnumeration = (1u << 7),
eTypeIsFuncPrototype = (1u << 8), eTypeIsMember = (1u << 9),
eTypeIsObjC = (1u << 10), eTypeIsPointer = (1u << 11),
eTypeIsReference = (1u << 12), eTypeIsStructUnion = (1u << 13),
eTypeIsTemplate = (1u << 14), eTypeIsTypedef = (1u << 15),
eTypeIsVector = (1u << 16), eTypeIsScalar = (1u << 17),
eTypeIsInteger = (1u << 18), eTypeIsFloat = (1u << 19),
eTypeIsComplex = (1u << 20), eTypeIsSigned = (1u << 21),
eTypeInstanceIsPointer = (1u << 22)};
FLAGS_ENUM(CommandFlags){
/// eCommandRequiresTarget
///
/// Ensures a valid target is contained in m_exe_ctx prior to executing the
/// command. If a target doesn't exist or is invalid, the command will fail
/// and CommandObject::GetInvalidTargetDescription() will be returned as the
/// error. CommandObject subclasses can override the virtual function for
/// GetInvalidTargetDescription() to provide custom strings when needed.
eCommandRequiresTarget = (1u << 0),
/// eCommandRequiresProcess
///
/// Ensures a valid process is contained in m_exe_ctx prior to executing the
/// command. If a process doesn't exist or is invalid, the command will fail
/// and CommandObject::GetInvalidProcessDescription() will be returned as
/// the error. CommandObject subclasses can override the virtual function
/// for GetInvalidProcessDescription() to provide custom strings when
/// needed.
eCommandRequiresProcess = (1u << 1),
/// eCommandRequiresThread
///
/// Ensures a valid thread is contained in m_exe_ctx prior to executing the
/// command. If a thread doesn't exist or is invalid, the command will fail
/// and CommandObject::GetInvalidThreadDescription() will be returned as the
/// error. CommandObject subclasses can override the virtual function for
/// GetInvalidThreadDescription() to provide custom strings when needed.
eCommandRequiresThread = (1u << 2),
/// eCommandRequiresFrame
///
/// Ensures a valid frame is contained in m_exe_ctx prior to executing the
/// command. If a frame doesn't exist or is invalid, the command will fail
/// and CommandObject::GetInvalidFrameDescription() will be returned as the
/// error. CommandObject subclasses can override the virtual function for
/// GetInvalidFrameDescription() to provide custom strings when needed.
eCommandRequiresFrame = (1u << 3),
/// eCommandRequiresRegContext
///
/// Ensures a valid register context (from the selected frame if there is a
/// frame in m_exe_ctx, or from the selected thread from m_exe_ctx) is
/// available from m_exe_ctx prior to executing the command. If a target
/// doesn't exist or is invalid, the command will fail and
/// CommandObject::GetInvalidRegContextDescription() will be returned as the
/// error. CommandObject subclasses can override the virtual function for
/// GetInvalidRegContextDescription() to provide custom strings when needed.
eCommandRequiresRegContext = (1u << 4),
/// eCommandTryTargetAPILock
///
/// Attempts to acquire the target lock if a target is selected in the
/// command interpreter. If the command object fails to acquire the API
/// lock, the command will fail with an appropriate error message.
eCommandTryTargetAPILock = (1u << 5),
/// eCommandProcessMustBeLaunched
///
/// Verifies that there is a launched process in m_exe_ctx, if there isn't,
/// the command will fail with an appropriate error message.
eCommandProcessMustBeLaunched = (1u << 6),
/// eCommandProcessMustBePaused
///
/// Verifies that there is a paused process in m_exe_ctx, if there isn't,
/// the command will fail with an appropriate error message.
eCommandProcessMustBePaused = (1u << 7),
/// eCommandProcessMustBeTraced
///
/// Verifies that the process is being traced by a Trace plug-in, if it
/// isn't the command will fail with an appropriate error message.
eCommandProcessMustBeTraced = (1u << 8)};
/// Whether a summary should cap how much data it returns to users or not.
enum TypeSummaryCapping {
eTypeSummaryCapped = true,
eTypeSummaryUncapped = false
};
/// The result from a command interpreter run.
enum CommandInterpreterResult {
/// Command interpreter finished successfully.
eCommandInterpreterResultSuccess,
/// Stopped because the corresponding option was set and the inferior
/// crashed.
eCommandInterpreterResultInferiorCrash,
/// Stopped because the corresponding option was set and a command returned
/// an error.
eCommandInterpreterResultCommandError,
/// Stopped because quit was requested.
eCommandInterpreterResultQuitRequested,
};
} // namespace lldb
#endif // LLDB_LLDB_ENUMERATIONS_H