RegisterContextPOSIX_mips64.h revision 263363
1247975Scognet//===-- RegisterContextPOSIX_mips64.h ---------------------------*- C++ -*-===// 2247975Scognet// 3247975Scognet// The LLVM Compiler Infrastructure 4247975Scognet// 5247975Scognet// This file is distributed under the University of Illinois Open Source 6247975Scognet// License. See LICENSE.TXT for details. 7247975Scognet// 8247975Scognet//===----------------------------------------------------------------------===// 9247975Scognet 10247975Scognet#ifndef liblldb_RegisterContextPOSIX_mips64_H_ 11247975Scognet#define liblldb_RegisterContextPOSIX_mips64_H_ 12247975Scognet 13247975Scognet#include "lldb/Core/Log.h" 14247975Scognet#include "RegisterContextPOSIX.h" 15247975Scognet#include "RegisterContext_mips64.h" 16247975Scognet 17247975Scognetclass ProcessMonitor; 18247975Scognet 19247975Scognet// --------------------------------------------------------------------------- 20247975Scognet// Internal codes for all mips64 registers. 21247975Scognet// --------------------------------------------------------------------------- 22247975Scognetenum 23247975Scognet{ 24247975Scognet k_first_gpr_mips64, 25247975Scognet gpr_zero_mips64 = k_first_gpr_mips64, 26247975Scognet gpr_r1_mips64, 27247975Scognet gpr_r2_mips64, 28247975Scognet gpr_r3_mips64, 29247975Scognet gpr_r4_mips64, 30247975Scognet gpr_r5_mips64, 31247975Scognet gpr_r6_mips64, 32247975Scognet gpr_r7_mips64, 33247975Scognet gpr_r8_mips64, 34290052Sjhb gpr_r9_mips64, 35290052Sjhb gpr_r10_mips64, 36290052Sjhb gpr_r11_mips64, 37247975Scognet gpr_r12_mips64, 38247975Scognet gpr_r13_mips64, 39247975Scognet gpr_r14_mips64, 40247975Scognet gpr_r15_mips64, 41247975Scognet gpr_r16_mips64, 42247975Scognet gpr_r17_mips64, 43247975Scognet gpr_r18_mips64, 44247975Scognet gpr_r19_mips64, 45247975Scognet gpr_r20_mips64, 46247975Scognet gpr_r21_mips64, 47247975Scognet gpr_r22_mips64, 48247975Scognet gpr_r23_mips64, 49247975Scognet gpr_r24_mips64, 50290052Sjhb gpr_r25_mips64, 51290052Sjhb gpr_r26_mips64, 52247975Scognet gpr_r27_mips64, 53247975Scognet gpr_gp_mips64, 54247975Scognet gpr_sp_mips64, 55290052Sjhb gpr_r30_mips64, 56247975Scognet gpr_ra_mips64, 57290052Sjhb gpr_sr_mips64, 58247975Scognet gpr_mullo_mips64, 59247975Scognet gpr_mulhi_mips64, 60290052Sjhb gpr_badvaddr_mips64, 61247975Scognet gpr_cause_mips64, 62247975Scognet gpr_pc_mips64, 63290052Sjhb gpr_ic_mips64, 64247975Scognet gpr_dummy_mips64, 65247975Scognet 66247975Scognet k_num_registers_mips64, 67290052Sjhb k_num_gpr_registers_mips64 = k_num_registers_mips64 68247975Scognet}; 69247975Scognet 70290052Sjhbclass RegisterContextPOSIX_mips64 71290052Sjhb : public lldb_private::RegisterContext 72290052Sjhb{ 73247975Scognetpublic: 74247975Scognet RegisterContextPOSIX_mips64 (lldb_private::Thread &thread, 75247975Scognet uint32_t concrete_frame_idx, 76247975Scognet RegisterInfoInterface *register_info); 77290052Sjhb 78247975Scognet ~RegisterContextPOSIX_mips64(); 79247975Scognet 80290052Sjhb void 81247975Scognet Invalidate(); 82247975Scognet 83247975Scognet void 84290052Sjhb InvalidateAllRegisters(); 85290052Sjhb 86247975Scognet size_t 87247975Scognet GetRegisterCount(); 88290052Sjhb 89247975Scognet virtual size_t 90247975Scognet GetGPRSize(); 91290052Sjhb 92247975Scognet virtual unsigned 93247975Scognet GetRegisterSize(unsigned reg); 94247975Scognet 95290052Sjhb virtual unsigned 96290052Sjhb GetRegisterOffset(unsigned reg); 97290052Sjhb 98247975Scognet const lldb_private::RegisterInfo * 99290052Sjhb GetRegisterInfoAtIndex(size_t reg); 100247975Scognet 101290052Sjhb size_t 102290052Sjhb GetRegisterSetCount(); 103247975Scognet 104247975Scognet const lldb_private::RegisterSet * 105290052Sjhb GetRegisterSet(size_t set); 106247975Scognet 107247975Scognet const char * 108290052Sjhb GetRegisterName(unsigned reg); 109247975Scognet 110247975Scognet uint32_t 111290052Sjhb ConvertRegisterKindToRegisterNumber(uint32_t kind, uint32_t num); 112290052Sjhb 113247975Scognetprotected: 114247975Scognet uint64_t m_gpr_mips64[k_num_gpr_registers_mips64]; // general purpose registers. 115247975Scognet std::unique_ptr<RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux) 116247975Scognet 117247975Scognet // Determines if an extended register set is supported on the processor running the inferior process. 118247975Scognet virtual bool 119247975Scognet IsRegisterSetAvailable(size_t set_index); 120247975Scognet 121247975Scognet virtual const lldb_private::RegisterInfo * 122247975Scognet GetRegisterInfo(); 123290052Sjhb 124290052Sjhb bool 125290052Sjhb IsGPR(unsigned reg); 126290052Sjhb 127290052Sjhb bool 128290052Sjhb IsFPR(unsigned reg); 129247975Scognet 130290052Sjhb lldb::ByteOrder GetByteOrder(); 131290052Sjhb 132290052Sjhb virtual bool ReadGPR() = 0; 133290052Sjhb virtual bool ReadFPR() = 0; 134290052Sjhb virtual bool WriteGPR() = 0; 135290052Sjhb virtual bool WriteFPR() = 0; 136290052Sjhb}; 137247975Scognet 138290052Sjhb#endif // #ifndef liblldb_RegisterContextPOSIX_mips64_H_ 139