| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- //===-- lldb-private-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_PRIVATE_ENUMERATIONS_H
- #define LLDB_LLDB_PRIVATE_ENUMERATIONS_H
- #include "llvm/ADT/StringRef.h"
- #include "llvm/Support/FormatProviders.h"
- #include "llvm/Support/raw_ostream.h"
- namespace lldb_private {
- // Thread Step Types
- enum StepType {
- eStepTypeNone,
- eStepTypeTrace, ///< Single step one instruction.
- eStepTypeTraceOver, ///< Single step one instruction, stepping over.
- eStepTypeInto, ///< Single step into a specified context.
- eStepTypeOver, ///< Single step over a specified context.
- eStepTypeOut, ///< Single step out a specified context.
- eStepTypeScripted ///< A step type implemented by the script interpreter.
- };
- // Address Types
- enum AddressType {
- eAddressTypeInvalid = 0,
- eAddressTypeFile, ///< Address is an address as found in an object or symbol
- /// file
- eAddressTypeLoad, ///< Address is an address as in the current target inferior
- /// process
- eAddressTypeHost ///< Address is an address in the process that is running
- /// this code
- };
- // Address Class
- //
- // A way of classifying an address used for disassembling and setting
- // breakpoints. Many object files can track exactly what parts of their object
- // files are code, data and other information. This is of course above and
- // beyond just looking at the section types. For example, code might contain PC
- // relative data and the object file might be able to tell us that an address
- // in code is data.
- enum class AddressClass {
- eInvalid,
- eUnknown,
- eCode,
- eCodeAlternateISA,
- eData,
- eDebug,
- eRuntime
- };
- // Votes - Need a tri-state, yes, no, no opinion...
- enum Vote { eVoteNo = -1, eVoteNoOpinion = 0, eVoteYes = 1 };
- enum ArchitectureType {
- eArchTypeInvalid,
- eArchTypeMachO,
- eArchTypeELF,
- eArchTypeCOFF,
- kNumArchTypes
- };
- /// Settable state variable types.
- ///
- // typedef enum SettableVariableType
- //{
- // eSetVarTypeInt,
- // eSetVarTypeBoolean,
- // eSetVarTypeString,
- // eSetVarTypeArray,
- // eSetVarTypeDictionary,
- // eSetVarTypeEnum,
- // eSetVarTypeNone
- //} SettableVariableType;
- enum VarSetOperationType {
- eVarSetOperationReplace,
- eVarSetOperationInsertBefore,
- eVarSetOperationInsertAfter,
- eVarSetOperationRemove,
- eVarSetOperationAppend,
- eVarSetOperationClear,
- eVarSetOperationAssign,
- eVarSetOperationInvalid
- };
- enum ArgumentRepetitionType {
- eArgRepeatPlain, // Exactly one occurrence
- eArgRepeatOptional, // At most one occurrence, but it's optional
- eArgRepeatPlus, // One or more occurrences
- eArgRepeatStar, // Zero or more occurrences
- eArgRepeatRange, // Repetition of same argument, from 1 to n
- eArgRepeatPairPlain, // A pair of arguments that must always go together
- // ([arg-type arg-value]), occurs exactly once
- eArgRepeatPairOptional, // A pair that occurs at most once (optional)
- eArgRepeatPairPlus, // One or more occurrences of a pair
- eArgRepeatPairStar, // Zero or more occurrences of a pair
- eArgRepeatPairRange, // A pair that repeats from 1 to n
- eArgRepeatPairRangeOptional // A pair that repeats from 1 to n, but is
- // optional
- };
- enum SortOrder { eSortOrderNone, eSortOrderByAddress, eSortOrderByName };
- // LazyBool is for boolean values that need to be calculated lazily. Values
- // start off set to eLazyBoolCalculate, and then they can be calculated once
- // and set to eLazyBoolNo or eLazyBoolYes.
- enum LazyBool { eLazyBoolCalculate = -1, eLazyBoolNo = 0, eLazyBoolYes = 1 };
- /// Instruction types
- enum InstructionType {
- eInstructionTypeAny, // Support for any instructions at all (at least one)
- eInstructionTypePrologueEpilogue, // All prologue and epilogue instructions
- // that push and pop register values and
- // modify sp/fp
- eInstructionTypePCModifying, // Any instruction that modifies the program
- // counter/instruction pointer
- eInstructionTypeAll // All instructions of any kind
- };
- /// Format category entry types
- enum FormatCategoryItem {
- eFormatCategoryItemSummary = 0x0001,
- eFormatCategoryItemRegexSummary = 0x0002,
- eFormatCategoryItemFilter = 0x0004,
- eFormatCategoryItemRegexFilter = 0x0008,
- eFormatCategoryItemSynth = 0x0010,
- eFormatCategoryItemRegexSynth = 0x0020,
- eFormatCategoryItemValue = 0x0040,
- eFormatCategoryItemRegexValue = 0x0080,
- eFormatCategoryItemValidator = 0x0100,
- eFormatCategoryItemRegexValidator = 0x0200
- };
- /// Expression execution policies
- enum ExecutionPolicy {
- eExecutionPolicyOnlyWhenNeeded,
- eExecutionPolicyNever,
- eExecutionPolicyAlways,
- eExecutionPolicyTopLevel // used for top-level code
- };
- // Synchronicity behavior of scripted commands
- enum ScriptedCommandSynchronicity {
- eScriptedCommandSynchronicitySynchronous,
- eScriptedCommandSynchronicityAsynchronous,
- eScriptedCommandSynchronicityCurrentValue // use whatever the current
- // synchronicity is
- };
- // Verbosity mode of "po" output
- enum LanguageRuntimeDescriptionDisplayVerbosity {
- eLanguageRuntimeDescriptionDisplayVerbosityCompact, // only print the
- // description string, if
- // any
- eLanguageRuntimeDescriptionDisplayVerbosityFull, // print the full-blown
- // output
- };
- // Loading modules from memory
- enum MemoryModuleLoadLevel {
- eMemoryModuleLoadLevelMinimal, // Load sections only
- eMemoryModuleLoadLevelPartial, // Load function bounds but no symbols
- eMemoryModuleLoadLevelComplete, // Load sections and all symbols
- };
- // Result enums for when reading multiple lines from IOHandlers
- enum class LineStatus {
- Success, // The line that was just edited if good and should be added to the
- // lines
- Status, // There is an error with the current line and it needs to be
- // re-edited
- // before it can be accepted
- Done // Lines are complete
- };
- // Boolean result of running a Type Validator
- enum class TypeValidatorResult : bool { Success = true, Failure = false };
- // Enumerations that can be used to specify scopes types when looking up types.
- enum class CompilerContextKind : uint16_t {
- Invalid = 0,
- TranslationUnit = 1,
- Module = 1 << 1,
- Namespace = 1 << 2,
- Class = 1 << 3,
- Struct = 1 << 4,
- Union = 1 << 5,
- Function = 1 << 6,
- Variable = 1 << 7,
- Enum = 1 << 8,
- Typedef = 1 << 9,
- Any = 1 << 15,
- /// Match 0..n nested modules.
- AnyModule = Any | Module,
- /// Match any type.
- AnyType = Any | Class | Struct | Union | Enum | Typedef
- };
- // Enumerations that can be used to specify the kind of metric we're looking at
- // when collecting stats.
- enum StatisticKind {
- ExpressionSuccessful = 0,
- ExpressionFailure = 1,
- FrameVarSuccess = 2,
- FrameVarFailure = 3,
- StatisticMax = 4
- };
- inline std::string GetStatDescription(lldb_private::StatisticKind K) {
- switch (K) {
- case StatisticKind::ExpressionSuccessful:
- return "Number of expr evaluation successes";
- case StatisticKind::ExpressionFailure:
- return "Number of expr evaluation failures";
- case StatisticKind::FrameVarSuccess:
- return "Number of frame var successes";
- case StatisticKind::FrameVarFailure:
- return "Number of frame var failures";
- case StatisticKind::StatisticMax:
- return "";
- }
- llvm_unreachable("Statistic not registered!");
- }
- } // namespace lldb_private
- namespace llvm {
- template <> struct format_provider<lldb_private::Vote> {
- static void format(const lldb_private::Vote &V, llvm::raw_ostream &Stream,
- StringRef Style) {
- switch (V) {
- case lldb_private::eVoteNo:
- Stream << "no";
- return;
- case lldb_private::eVoteNoOpinion:
- Stream << "no opinion";
- return;
- case lldb_private::eVoteYes:
- Stream << "yes";
- return;
- }
- Stream << "invalid";
- }
- };
- }
- #endif // LLDB_LLDB_PRIVATE_ENUMERATIONS_H
|