13e699d41SVirgile Bello //===-- RegisterContextFreeBSD_mips64.cpp ----------------------*- C++ -*-===// 23e699d41SVirgile Bello // 33e699d41SVirgile Bello // The LLVM Compiler Infrastructure 43e699d41SVirgile Bello // 53e699d41SVirgile Bello // This file is distributed under the University of Illinois Open Source 63e699d41SVirgile Bello // License. See LICENSE.TXT for details. 73e699d41SVirgile Bello // 83e699d41SVirgile Bello //===---------------------------------------------------------------------===// 93e699d41SVirgile Bello 103e699d41SVirgile Bello #include "RegisterContextFreeBSD_mips64.h" 11b9c1b51eSKate Stone #include "RegisterContextPOSIX_mips64.h" 12*b8dbd323SNitesh Jain #include "lldb-mips-freebsd-register-enums.h" 13b9c1b51eSKate Stone #include <vector> 143e699d41SVirgile Bello 153e699d41SVirgile Bello using namespace lldb_private; 163e699d41SVirgile Bello using namespace lldb; 173e699d41SVirgile Bello 18*b8dbd323SNitesh Jain static const uint32_t g_gpr_regnums[] = { 19*b8dbd323SNitesh Jain gpr_zero_mips64, gpr_r1_mips64, gpr_r2_mips64, gpr_r3_mips64, 20*b8dbd323SNitesh Jain gpr_r4_mips64, gpr_r5_mips64, gpr_r6_mips64, gpr_r7_mips64, 21*b8dbd323SNitesh Jain gpr_r8_mips64, gpr_r9_mips64, gpr_r10_mips64, gpr_r11_mips64, 22*b8dbd323SNitesh Jain gpr_r12_mips64, gpr_r13_mips64, gpr_r14_mips64, gpr_r15_mips64, 23*b8dbd323SNitesh Jain gpr_r16_mips64, gpr_r17_mips64, gpr_r18_mips64, gpr_r19_mips64, 24*b8dbd323SNitesh Jain gpr_r20_mips64, gpr_r21_mips64, gpr_r22_mips64, gpr_r23_mips64, 25*b8dbd323SNitesh Jain gpr_r24_mips64, gpr_r25_mips64, gpr_r26_mips64, gpr_r27_mips64, 26*b8dbd323SNitesh Jain gpr_gp_mips64, gpr_sp_mips64, gpr_r30_mips64, gpr_ra_mips64, 27*b8dbd323SNitesh Jain gpr_sr_mips64, gpr_mullo_mips64, gpr_mulhi_mips64, gpr_badvaddr_mips64, 28*b8dbd323SNitesh Jain gpr_cause_mips64, gpr_pc_mips64, gpr_ic_mips64, gpr_dummy_mips64}; 29*b8dbd323SNitesh Jain 30*b8dbd323SNitesh Jain // Number of register sets provided by this context. 31*b8dbd323SNitesh Jain constexpr size_t k_num_register_sets = 1; 32*b8dbd323SNitesh Jain 33*b8dbd323SNitesh Jain static const RegisterSet g_reg_sets_mips64[k_num_register_sets] = { 34*b8dbd323SNitesh Jain {"General Purpose Registers", "gpr", k_num_gpr_registers_mips64, 35*b8dbd323SNitesh Jain g_gpr_regnums}, 36*b8dbd323SNitesh Jain }; 37*b8dbd323SNitesh Jain 38*b8dbd323SNitesh Jain 393e699d41SVirgile Bello // http://svnweb.freebsd.org/base/head/sys/mips/include/regnum.h 40b9c1b51eSKate Stone typedef struct _GPR { 413e699d41SVirgile Bello uint64_t zero; 423e699d41SVirgile Bello uint64_t r1; 433e699d41SVirgile Bello uint64_t r2; 443e699d41SVirgile Bello uint64_t r3; 453e699d41SVirgile Bello uint64_t r4; 463e699d41SVirgile Bello uint64_t r5; 473e699d41SVirgile Bello uint64_t r6; 483e699d41SVirgile Bello uint64_t r7; 493e699d41SVirgile Bello uint64_t r8; 503e699d41SVirgile Bello uint64_t r9; 513e699d41SVirgile Bello uint64_t r10; 523e699d41SVirgile Bello uint64_t r11; 533e699d41SVirgile Bello uint64_t r12; 543e699d41SVirgile Bello uint64_t r13; 553e699d41SVirgile Bello uint64_t r14; 563e699d41SVirgile Bello uint64_t r15; 573e699d41SVirgile Bello uint64_t r16; 583e699d41SVirgile Bello uint64_t r17; 593e699d41SVirgile Bello uint64_t r18; 603e699d41SVirgile Bello uint64_t r19; 613e699d41SVirgile Bello uint64_t r20; 623e699d41SVirgile Bello uint64_t r21; 633e699d41SVirgile Bello uint64_t r22; 643e699d41SVirgile Bello uint64_t r23; 653e699d41SVirgile Bello uint64_t r24; 663e699d41SVirgile Bello uint64_t r25; 673e699d41SVirgile Bello uint64_t r26; 683e699d41SVirgile Bello uint64_t r27; 693e699d41SVirgile Bello uint64_t gp; 703e699d41SVirgile Bello uint64_t sp; 713e699d41SVirgile Bello uint64_t r30; 723e699d41SVirgile Bello uint64_t ra; 733e699d41SVirgile Bello uint64_t sr; 743e699d41SVirgile Bello uint64_t mullo; 753e699d41SVirgile Bello uint64_t mulhi; 763e699d41SVirgile Bello uint64_t badvaddr; 773e699d41SVirgile Bello uint64_t cause; 783e699d41SVirgile Bello uint64_t pc; 793e699d41SVirgile Bello uint64_t ic; 803e699d41SVirgile Bello uint64_t dummy; 81789da667SSagar Thakur } GPR_freebsd_mips; 823e699d41SVirgile Bello 833e699d41SVirgile Bello //--------------------------------------------------------------------------- 84b9c1b51eSKate Stone // Include RegisterInfos_mips64 to declare our g_register_infos_mips64 85b9c1b51eSKate Stone // structure. 863e699d41SVirgile Bello //--------------------------------------------------------------------------- 873e699d41SVirgile Bello #define DECLARE_REGISTER_INFOS_MIPS64_STRUCT 883e699d41SVirgile Bello #include "RegisterInfos_mips64.h" 893e699d41SVirgile Bello #undef DECLARE_REGISTER_INFOS_MIPS64_STRUCT 903e699d41SVirgile Bello 91b9c1b51eSKate Stone RegisterContextFreeBSD_mips64::RegisterContextFreeBSD_mips64( 92b9c1b51eSKate Stone const ArchSpec &target_arch) 93b9c1b51eSKate Stone : RegisterInfoInterface(target_arch) {} 943e699d41SVirgile Bello 95b9c1b51eSKate Stone size_t RegisterContextFreeBSD_mips64::GetGPRSize() const { 96789da667SSagar Thakur return sizeof(GPR_freebsd_mips); 973e699d41SVirgile Bello } 983e699d41SVirgile Bello 99*b8dbd323SNitesh Jain const RegisterSet * 100*b8dbd323SNitesh Jain RegisterContextFreeBSD_mips64::GetRegisterSet(size_t set) const { 101*b8dbd323SNitesh Jain // Check if RegisterSet is available 102*b8dbd323SNitesh Jain if (set < k_num_register_sets) 103*b8dbd323SNitesh Jain return &g_reg_sets_mips64[set]; 104*b8dbd323SNitesh Jain return nullptr; 105*b8dbd323SNitesh Jain } 106*b8dbd323SNitesh Jain 107*b8dbd323SNitesh Jain size_t 108*b8dbd323SNitesh Jain RegisterContextFreeBSD_mips64::GetRegisterSetCount() const { 109*b8dbd323SNitesh Jain return k_num_register_sets; 110*b8dbd323SNitesh Jain } 111*b8dbd323SNitesh Jain 112b9c1b51eSKate Stone const RegisterInfo *RegisterContextFreeBSD_mips64::GetRegisterInfo() const { 1133e699d41SVirgile Bello assert(m_target_arch.GetCore() == ArchSpec::eCore_mips64); 1143e699d41SVirgile Bello return g_register_infos_mips64; 1153e699d41SVirgile Bello } 1163e699d41SVirgile Bello 117b9c1b51eSKate Stone uint32_t RegisterContextFreeBSD_mips64::GetRegisterCount() const { 118b9c1b51eSKate Stone return static_cast<uint32_t>(sizeof(g_register_infos_mips64) / 119b9c1b51eSKate Stone sizeof(g_register_infos_mips64[0])); 120af245d11STodd Fiala } 121