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 <vector> 113e699d41SVirgile Bello #include "RegisterContextPOSIX_mips64.h" 123e699d41SVirgile Bello #include "RegisterContextFreeBSD_mips64.h" 133e699d41SVirgile Bello 143e699d41SVirgile Bello using namespace lldb_private; 153e699d41SVirgile Bello using namespace lldb; 163e699d41SVirgile Bello 173e699d41SVirgile Bello // http://svnweb.freebsd.org/base/head/sys/mips/include/regnum.h 183e699d41SVirgile Bello typedef struct _GPR 193e699d41SVirgile Bello { 203e699d41SVirgile Bello uint64_t zero; 213e699d41SVirgile Bello uint64_t r1; 223e699d41SVirgile Bello uint64_t r2; 233e699d41SVirgile Bello uint64_t r3; 243e699d41SVirgile Bello uint64_t r4; 253e699d41SVirgile Bello uint64_t r5; 263e699d41SVirgile Bello uint64_t r6; 273e699d41SVirgile Bello uint64_t r7; 283e699d41SVirgile Bello uint64_t r8; 293e699d41SVirgile Bello uint64_t r9; 303e699d41SVirgile Bello uint64_t r10; 313e699d41SVirgile Bello uint64_t r11; 323e699d41SVirgile Bello uint64_t r12; 333e699d41SVirgile Bello uint64_t r13; 343e699d41SVirgile Bello uint64_t r14; 353e699d41SVirgile Bello uint64_t r15; 363e699d41SVirgile Bello uint64_t r16; 373e699d41SVirgile Bello uint64_t r17; 383e699d41SVirgile Bello uint64_t r18; 393e699d41SVirgile Bello uint64_t r19; 403e699d41SVirgile Bello uint64_t r20; 413e699d41SVirgile Bello uint64_t r21; 423e699d41SVirgile Bello uint64_t r22; 433e699d41SVirgile Bello uint64_t r23; 443e699d41SVirgile Bello uint64_t r24; 453e699d41SVirgile Bello uint64_t r25; 463e699d41SVirgile Bello uint64_t r26; 473e699d41SVirgile Bello uint64_t r27; 483e699d41SVirgile Bello uint64_t gp; 493e699d41SVirgile Bello uint64_t sp; 503e699d41SVirgile Bello uint64_t r30; 513e699d41SVirgile Bello uint64_t ra; 523e699d41SVirgile Bello uint64_t sr; 533e699d41SVirgile Bello uint64_t mullo; 543e699d41SVirgile Bello uint64_t mulhi; 553e699d41SVirgile Bello uint64_t badvaddr; 563e699d41SVirgile Bello uint64_t cause; 573e699d41SVirgile Bello uint64_t pc; 583e699d41SVirgile Bello uint64_t ic; 593e699d41SVirgile Bello uint64_t dummy; 603e699d41SVirgile Bello } GPR; 613e699d41SVirgile Bello 623e699d41SVirgile Bello //--------------------------------------------------------------------------- 633e699d41SVirgile Bello // Include RegisterInfos_mips64 to declare our g_register_infos_mips64 structure. 643e699d41SVirgile Bello //--------------------------------------------------------------------------- 653e699d41SVirgile Bello #define DECLARE_REGISTER_INFOS_MIPS64_STRUCT 663e699d41SVirgile Bello #include "RegisterInfos_mips64.h" 673e699d41SVirgile Bello #undef DECLARE_REGISTER_INFOS_MIPS64_STRUCT 683e699d41SVirgile Bello 693e699d41SVirgile Bello RegisterContextFreeBSD_mips64::RegisterContextFreeBSD_mips64(const ArchSpec &target_arch) : 703e699d41SVirgile Bello RegisterInfoInterface(target_arch) 713e699d41SVirgile Bello { 723e699d41SVirgile Bello } 733e699d41SVirgile Bello 743e699d41SVirgile Bello size_t 75*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetGPRSize() const 763e699d41SVirgile Bello { 773e699d41SVirgile Bello return sizeof(GPR); 783e699d41SVirgile Bello } 793e699d41SVirgile Bello 803e699d41SVirgile Bello const RegisterInfo * 81*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetRegisterInfo() const 823e699d41SVirgile Bello { 833e699d41SVirgile Bello assert (m_target_arch.GetCore() == ArchSpec::eCore_mips64); 843e699d41SVirgile Bello return g_register_infos_mips64; 853e699d41SVirgile Bello } 863e699d41SVirgile Bello 87*af245d11STodd Fiala uint32_t 88*af245d11STodd Fiala RegisterContextFreeBSD_mips64::GetRegisterCount () const 89*af245d11STodd Fiala { 90*af245d11STodd Fiala return static_cast<uint32_t> (sizeof (g_register_infos_mips64) / sizeof (g_register_infos_mips64 [0])); 91*af245d11STodd Fiala } 92*af245d11STodd Fiala 93*af245d11STodd Fiala 94