84 lines · c
1//===-- EmulationStateARM.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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H10#define LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H11 12#include <map>13 14#include "lldb/Core/EmulateInstruction.h"15#include "lldb/Core/Opcode.h"16 17class EmulationStateARM {18public:19 EmulationStateARM();20 21 virtual ~EmulationStateARM();22 23 bool StorePseudoRegisterValue(uint32_t reg_num, uint64_t value);24 25 uint64_t ReadPseudoRegisterValue(uint32_t reg_num, bool &success);26 27 bool StoreToPseudoAddress(lldb::addr_t p_address, uint32_t value);28 29 uint32_t ReadFromPseudoAddress(lldb::addr_t p_address, bool &success);30 31 void ClearPseudoRegisters();32 33 void ClearPseudoMemory();34 35 bool LoadStateFromDictionary(lldb_private::OptionValueDictionary *test_data);36 37 bool CompareState(EmulationStateARM &other_state,38 lldb_private::Stream &out_stream);39 40 static size_t41 ReadPseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton,42 const lldb_private::EmulateInstruction::Context &context,43 lldb::addr_t addr, void *dst, size_t length);44 45 static size_t46 WritePseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton,47 const lldb_private::EmulateInstruction::Context &context,48 lldb::addr_t addr, const void *dst, size_t length);49 50 static bool ReadPseudoRegister(lldb_private::EmulateInstruction *instruction,51 void *baton,52 const lldb_private::RegisterInfo *reg_info,53 lldb_private::RegisterValue ®_value);54 55 static bool56 WritePseudoRegister(lldb_private::EmulateInstruction *instruction,57 void *baton,58 const lldb_private::EmulateInstruction::Context &context,59 const lldb_private::RegisterInfo *reg_info,60 const lldb_private::RegisterValue ®_value);61 62private:63 bool LoadRegistersStateFromDictionary(64 lldb_private::OptionValueDictionary *reg_dict, char kind, int first_reg,65 int num);66 67 uint32_t m_gpr[17] = {0};68 struct _sd_regs {69 uint32_t s_regs[32]; // sregs 0 - 31 & dregs 0 - 1570 71 uint64_t d_regs[16]; // dregs 16-3172 73 } m_vfp_regs;74 75 std::map<lldb::addr_t, uint32_t> m_memory; // Eventually will want to change76 // uint32_t to a data buffer heap77 // type.78 79 EmulationStateARM(const EmulationStateARM &) = delete;80 const EmulationStateARM &operator=(const EmulationStateARM &) = delete;81};82 83#endif // LLDB_SOURCE_PLUGINS_INSTRUCTION_ARM_EMULATIONSTATEARM_H84