diff options
Diffstat (limited to 'include/lldb/lldb-private-types.h')
-rw-r--r-- | include/lldb/lldb-private-types.h | 200 |
1 files changed, 108 insertions, 92 deletions
diff --git a/include/lldb/lldb-private-types.h b/include/lldb/lldb-private-types.h index f5d986e2e993..4f192b66369f 100644 --- a/include/lldb/lldb-private-types.h +++ b/include/lldb/lldb-private-types.h @@ -14,103 +14,119 @@ #include "lldb/lldb-private.h" -namespace llvm -{ -namespace sys -{ +#include "llvm/ADT/ArrayRef.h" + +namespace llvm { +namespace sys { class DynamicLibrary; } } -namespace lldb_private -{ - class Platform; - class ExecutionContext; - - typedef llvm::sys::DynamicLibrary (*LoadPluginCallbackType)(const lldb::DebuggerSP &debugger_sp, - const FileSpec &spec, Error &error); - - //---------------------------------------------------------------------- - // Every register is described in detail including its name, alternate - // name (optional), encoding, size in bytes and the default display - // format. - //---------------------------------------------------------------------- - struct RegisterInfo - { - const char *name; // Name of this register, can't be NULL - const char *alt_name; // Alternate name of this register, can be NULL - uint32_t byte_size; // Size in bytes of the register - uint32_t byte_offset; // The byte offset in the register context data where this register's value is found. - // This is optional, and can be 0 if a particular RegisterContext does not need to - // address its registers by byte offset. - lldb::Encoding encoding; // Encoding of the register bits - lldb::Format format; // Default display format - uint32_t kinds[lldb::kNumRegisterKinds]; // Holds all of the various register numbers for all register kinds - uint32_t *value_regs; // List of registers (terminated with LLDB_INVALID_REGNUM). If this value is not - // null, all registers in this list will be read first, at which point the value - // for this register will be valid. For example, the value list for ah - // would be eax (x86) or rax (x64). - uint32_t *invalidate_regs; // List of registers (terminated with LLDB_INVALID_REGNUM). If this value is not - // null, all registers in this list will be invalidated when the value of this - // register changes. For example, the invalidate list for eax would be rax - // ax, ah, and al. - const uint8_t *dynamic_size_dwarf_expr_bytes; // A DWARF expression that when evaluated gives - // the byte size of this register. - size_t dynamic_size_dwarf_len; // The length of the DWARF expression in bytes - // in the dynamic_size_dwarf_expr_bytes member. - }; - - //---------------------------------------------------------------------- - // Registers are grouped into register sets - //---------------------------------------------------------------------- - struct RegisterSet - { - const char *name; // Name of this register set - const char *short_name; // A short name for this register set - size_t num_registers; // The number of registers in REGISTERS array below - const uint32_t *registers; // An array of register indices in this set. The values in this array are - // *indices* (not register numbers) into a particular RegisterContext's - // register array. For example, if eax is defined at index 4 for a - // particular RegisterContext, eax would be included in this RegisterSet - // by adding the value 4. Not by adding the value lldb_eax_i386. - }; - - struct OptionEnumValueElement - { - int64_t value; - const char *string_value; - const char *usage; - }; - - struct OptionValidator - { - virtual ~OptionValidator() { } - virtual bool IsValid(Platform &platform, const ExecutionContext &target) const = 0; - virtual const char * ShortConditionString() const = 0; - virtual const char * LongConditionString() const = 0; - }; - - struct OptionDefinition - { - uint32_t usage_mask; // Used to mark options that can be used together. If (1 << n & usage_mask) != 0 - // then this option belongs to option set n. - bool required; // This option is required (in the current usage level) - const char *long_option; // Full name for this option. - int short_option; // Single character for this option. - int option_has_arg; // no_argument, required_argument or optional_argument - OptionValidator* validator; // If non-NULL, option is valid iff |validator->IsValid()|, otherwise always valid. - OptionEnumValueElement *enum_values; // If non-NULL an array of enum values. - uint32_t completion_type; // Cookie the option class can use to do define the argument completion. - lldb::CommandArgumentType argument_type; // Type of argument this option takes - const char *usage_text; // Full text explaining what this options does and what (if any) argument to - // pass it. - }; - - typedef struct type128 { uint64_t x[2]; } type128; - typedef struct type256 { uint64_t x[4]; } type256; +namespace lldb_private { +class Platform; +class ExecutionContext; + +typedef llvm::sys::DynamicLibrary (*LoadPluginCallbackType)( + const lldb::DebuggerSP &debugger_sp, const FileSpec &spec, Error &error); + +//---------------------------------------------------------------------- +// Every register is described in detail including its name, alternate +// name (optional), encoding, size in bytes and the default display +// format. +//---------------------------------------------------------------------- +struct RegisterInfo { + const char *name; // Name of this register, can't be NULL + const char *alt_name; // Alternate name of this register, can be NULL + uint32_t byte_size; // Size in bytes of the register + uint32_t byte_offset; // The byte offset in the register context data where + // this register's value is found. + // This is optional, and can be 0 if a particular RegisterContext does not + // need to + // address its registers by byte offset. + lldb::Encoding encoding; // Encoding of the register bits + lldb::Format format; // Default display format + uint32_t kinds[lldb::kNumRegisterKinds]; // Holds all of the various register + // numbers for all register kinds + uint32_t *value_regs; // List of registers (terminated with + // LLDB_INVALID_REGNUM). If this value is not + // null, all registers in this list will be read first, at which point the + // value + // for this register will be valid. For example, the value list for ah + // would be eax (x86) or rax (x64). + uint32_t *invalidate_regs; // List of registers (terminated with + // LLDB_INVALID_REGNUM). If this value is not + // null, all registers in this list will be invalidated when the value of this + // register changes. For example, the invalidate list for eax would be rax + // ax, ah, and al. + const uint8_t *dynamic_size_dwarf_expr_bytes; // A DWARF expression that when + // evaluated gives + // the byte size of this register. + size_t dynamic_size_dwarf_len; // The length of the DWARF expression in bytes + // in the dynamic_size_dwarf_expr_bytes member. + + llvm::ArrayRef<uint8_t> data(const uint8_t *context_base) const { + return llvm::ArrayRef<uint8_t>(context_base + byte_offset, byte_size); + } + + llvm::MutableArrayRef<uint8_t> mutable_data(uint8_t *context_base) const { + return llvm::MutableArrayRef<uint8_t>(context_base + byte_offset, + byte_size); + } +}; + +//---------------------------------------------------------------------- +// Registers are grouped into register sets +//---------------------------------------------------------------------- +struct RegisterSet { + const char *name; // Name of this register set + const char *short_name; // A short name for this register set + size_t num_registers; // The number of registers in REGISTERS array below + const uint32_t *registers; // An array of register indices in this set. The + // values in this array are + // *indices* (not register numbers) into a particular RegisterContext's + // register array. For example, if eax is defined at index 4 for a + // particular RegisterContext, eax would be included in this RegisterSet + // by adding the value 4. Not by adding the value lldb_eax_i386. +}; + +struct OptionEnumValueElement { + int64_t value; + const char *string_value; + const char *usage; +}; + +struct OptionValidator { + virtual ~OptionValidator() {} + virtual bool IsValid(Platform &platform, + const ExecutionContext &target) const = 0; + virtual const char *ShortConditionString() const = 0; + virtual const char *LongConditionString() const = 0; +}; + +struct OptionDefinition { + uint32_t usage_mask; // Used to mark options that can be used together. If (1 + // << n & usage_mask) != 0 + // then this option belongs to option set n. + bool required; // This option is required (in the current usage level) + const char *long_option; // Full name for this option. + int short_option; // Single character for this option. + int option_has_arg; // no_argument, required_argument or optional_argument + OptionValidator *validator; // If non-NULL, option is valid iff + // |validator->IsValid()|, otherwise always valid. + OptionEnumValueElement *enum_values; // If non-NULL an array of enum values. + uint32_t completion_type; // Cookie the option class can use to do define the + // argument completion. + lldb::CommandArgumentType argument_type; // Type of argument this option takes + const char *usage_text; // Full text explaining what this options does and + // what (if any) argument to + // pass it. +}; + +typedef struct type128 { uint64_t x[2]; } type128; +typedef struct type256 { uint64_t x[4]; } type256; } // namespace lldb_private -#endif // #if defined(__cplusplus) +#endif // #if defined(__cplusplus) -#endif // liblldb_lldb_private_types_h_ +#endif // liblldb_lldb_private_types_h_ |