Home | History | Annotate | Download | only in ARM
      1 //===-- lldb_EmulationStateARM.h --------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef lldb_EmulationStateARM_h_
     11 #define lldb_EmulationStateARM_h_
     12 
     13 #include <map>
     14 
     15 #include "lldb/Core/EmulateInstruction.h"
     16 #include "lldb/Core/Opcode.h"
     17 
     18 class EmulationStateARM {
     19 public:
     20 
     21     EmulationStateARM ();
     22 
     23     virtual
     24     ~EmulationStateARM ();
     25 
     26     bool
     27     StorePseudoRegisterValue (uint32_t reg_num, uint64_t value);
     28 
     29     uint64_t
     30     ReadPseudoRegisterValue (uint32_t reg_num, bool &success);
     31 
     32     bool
     33     StoreToPseudoAddress (lldb::addr_t p_address, uint64_t value, uint32_t size);
     34 
     35     uint32_t
     36     ReadFromPseudoAddress (lldb::addr_t p_address, uint32_t size, bool &success);
     37 
     38     void
     39     ClearPseudoRegisters ();
     40 
     41     void
     42     ClearPseudoMemory ();
     43 
     44     bool
     45     LoadPseudoRegistersFromFrame (lldb_private::StackFrame &frame);
     46 
     47     bool
     48     LoadStateFromDictionary (lldb_private::OptionValueDictionary *test_data);
     49 
     50     bool
     51     CompareState (EmulationStateARM &other_state);
     52 
     53     static size_t
     54     ReadPseudoMemory (lldb_private::EmulateInstruction *instruction,
     55                       void *baton,
     56                       const lldb_private::EmulateInstruction::Context &context,
     57                       lldb::addr_t addr,
     58                       void *dst,
     59                       size_t length);
     60 
     61     static size_t
     62     WritePseudoMemory (lldb_private::EmulateInstruction *instruction,
     63                        void *baton,
     64                        const lldb_private::EmulateInstruction::Context &context,
     65                        lldb::addr_t addr,
     66                        const void *dst,
     67                        size_t length);
     68 
     69     static bool
     70     ReadPseudoRegister (lldb_private::EmulateInstruction *instruction,
     71                         void *baton,
     72                         const lldb_private::RegisterInfo *reg_info,
     73                         lldb_private::RegisterValue &reg_value);
     74 
     75     static bool
     76     WritePseudoRegister (lldb_private::EmulateInstruction *instruction,
     77                          void *baton,
     78                          const lldb_private::EmulateInstruction::Context &context,
     79                          const lldb_private::RegisterInfo *reg_info,
     80                          const lldb_private::RegisterValue &reg_value);
     81 private:
     82     uint32_t m_gpr[17];
     83     struct sd_regs
     84     {
     85         union
     86         {
     87             uint32_t s_reg[2];
     88             uint64_t d_reg;
     89         } sd_regs[16];  // sregs 0 - 31 & dregs 0 - 15
     90 
     91         uint64_t d_regs[16]; // dregs 16-31
     92 
     93     } m_vfp_regs;
     94 
     95     std::map<lldb::addr_t, uint32_t> m_memory; // Eventually will want to change uint32_t to a data buffer heap type.
     96 
     97     DISALLOW_COPY_AND_ASSIGN (EmulationStateARM);
     98 };
     99 
    100 #endif  // lldb_EmulationStateARM_h_
    101