diff options
Diffstat (limited to 'source/Plugins/Instruction/ARM/EmulationStateARM.h')
-rw-r--r-- | source/Plugins/Instruction/ARM/EmulationStateARM.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/source/Plugins/Instruction/ARM/EmulationStateARM.h b/source/Plugins/Instruction/ARM/EmulationStateARM.h new file mode 100644 index 000000000000..8d84abc75614 --- /dev/null +++ b/source/Plugins/Instruction/ARM/EmulationStateARM.h @@ -0,0 +1,100 @@ +//===-- lldb_EmulationStateARM.h --------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef lldb_EmulationStateARM_h_ +#define lldb_EmulationStateARM_h_ + +#include <map> + +#include "lldb/Core/EmulateInstruction.h" +#include "lldb/Core/Opcode.h" + +class EmulationStateARM { +public: + + EmulationStateARM (); + + virtual + ~EmulationStateARM (); + + bool + StorePseudoRegisterValue (uint32_t reg_num, uint64_t value); + + uint64_t + ReadPseudoRegisterValue (uint32_t reg_num, bool &success); + + bool + StoreToPseudoAddress (lldb::addr_t p_address, uint64_t value, uint32_t size); + + uint32_t + ReadFromPseudoAddress (lldb::addr_t p_address, uint32_t size, bool &success); + + void + ClearPseudoRegisters (); + + void + ClearPseudoMemory (); + + bool + LoadPseudoRegistersFromFrame (lldb_private::StackFrame &frame); + + bool + LoadStateFromDictionary (lldb_private::OptionValueDictionary *test_data); + + bool + CompareState (EmulationStateARM &other_state); + + static size_t + ReadPseudoMemory (lldb_private::EmulateInstruction *instruction, + void *baton, + const lldb_private::EmulateInstruction::Context &context, + lldb::addr_t addr, + void *dst, + size_t length); + + static size_t + WritePseudoMemory (lldb_private::EmulateInstruction *instruction, + void *baton, + const lldb_private::EmulateInstruction::Context &context, + lldb::addr_t addr, + const void *dst, + size_t length); + + static bool + ReadPseudoRegister (lldb_private::EmulateInstruction *instruction, + void *baton, + const lldb_private::RegisterInfo *reg_info, + lldb_private::RegisterValue ®_value); + + static bool + WritePseudoRegister (lldb_private::EmulateInstruction *instruction, + void *baton, + const lldb_private::EmulateInstruction::Context &context, + const lldb_private::RegisterInfo *reg_info, + const lldb_private::RegisterValue ®_value); +private: + uint32_t m_gpr[17]; + struct sd_regs + { + union + { + uint32_t s_reg[2]; + uint64_t d_reg; + } sd_regs[16]; // sregs 0 - 31 & dregs 0 - 15 + + uint64_t d_regs[16]; // dregs 16-31 + + } m_vfp_regs; + + std::map<lldb::addr_t, uint32_t> m_memory; // Eventually will want to change uint32_t to a data buffer heap type. + + DISALLOW_COPY_AND_ASSIGN (EmulationStateARM); +}; + +#endif // lldb_EmulationStateARM_h_ |