brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 6cf842a Raw
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 &reg_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 &reg_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