1 //===-- RegisterContextPOSIX_mips64.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 liblldb_RegisterContextPOSIX_mips64_H_ 11 #define liblldb_RegisterContextPOSIX_mips64_H_ 12 13 #include "lldb/Core/Log.h" 14 #include "RegisterContextPOSIX.h" 15 #include "RegisterContext_mips64.h" 16 17 class ProcessMonitor; 18 19 // --------------------------------------------------------------------------- 20 // Internal codes for all mips64 registers. 21 // --------------------------------------------------------------------------- 22 enum 23 { 24 k_first_gpr_mips64, 25 gpr_zero_mips64 = k_first_gpr_mips64, 26 gpr_r1_mips64, 27 gpr_r2_mips64, 28 gpr_r3_mips64, 29 gpr_r4_mips64, 30 gpr_r5_mips64, 31 gpr_r6_mips64, 32 gpr_r7_mips64, 33 gpr_r8_mips64, 34 gpr_r9_mips64, 35 gpr_r10_mips64, 36 gpr_r11_mips64, 37 gpr_r12_mips64, 38 gpr_r13_mips64, 39 gpr_r14_mips64, 40 gpr_r15_mips64, 41 gpr_r16_mips64, 42 gpr_r17_mips64, 43 gpr_r18_mips64, 44 gpr_r19_mips64, 45 gpr_r20_mips64, 46 gpr_r21_mips64, 47 gpr_r22_mips64, 48 gpr_r23_mips64, 49 gpr_r24_mips64, 50 gpr_r25_mips64, 51 gpr_r26_mips64, 52 gpr_r27_mips64, 53 gpr_gp_mips64, 54 gpr_sp_mips64, 55 gpr_r30_mips64, 56 gpr_ra_mips64, 57 gpr_sr_mips64, 58 gpr_mullo_mips64, 59 gpr_mulhi_mips64, 60 gpr_badvaddr_mips64, 61 gpr_cause_mips64, 62 gpr_pc_mips64, 63 gpr_ic_mips64, 64 gpr_dummy_mips64, 65 66 k_num_registers_mips64, 67 k_num_gpr_registers_mips64 = k_num_registers_mips64 68 }; 69 70 class RegisterContextPOSIX_mips64 71 : public lldb_private::RegisterContext 72 { 73 public: 74 RegisterContextPOSIX_mips64 (lldb_private::Thread &thread, 75 uint32_t concrete_frame_idx, 76 RegisterInfoInterface *register_info); 77 78 ~RegisterContextPOSIX_mips64(); 79 80 void 81 Invalidate(); 82 83 void 84 InvalidateAllRegisters(); 85 86 size_t 87 GetRegisterCount(); 88 89 virtual size_t 90 GetGPRSize(); 91 92 virtual unsigned 93 GetRegisterSize(unsigned reg); 94 95 virtual unsigned 96 GetRegisterOffset(unsigned reg); 97 98 const lldb_private::RegisterInfo * 99 GetRegisterInfoAtIndex(size_t reg); 100 101 size_t 102 GetRegisterSetCount(); 103 104 const lldb_private::RegisterSet * 105 GetRegisterSet(size_t set); 106 107 const char * 108 GetRegisterName(unsigned reg); 109 110 uint32_t 111 ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num); 112 113 protected: 114 uint64_t m_gpr_mips64[k_num_gpr_registers_mips64]; // general purpose registers. 115 std::unique_ptr<RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux) 116 117 // Determines if an extended register set is supported on the processor running the inferior process. 118 virtual bool 119 IsRegisterSetAvailable(size_t set_index); 120 121 virtual const lldb_private::RegisterInfo * 122 GetRegisterInfo(); 123 124 bool 125 IsGPR(unsigned reg); 126 127 bool 128 IsFPR(unsigned reg); 129 130 lldb::ByteOrder GetByteOrder(); 131 132 virtual bool ReadGPR() = 0; 133 virtual bool ReadFPR() = 0; 134 virtual bool WriteGPR() = 0; 135 virtual bool WriteFPR() = 0; 136 }; 137 138 #endif // #ifndef liblldb_RegisterContextPOSIX_mips64_H_ 139