1 //===-- RegisterContextLinux_mips64.cpp ------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===---------------------------------------------------------------------===//
10 #if defined (__mips__)
15 // For GDB, GCC and DWARF Register numbers
16 #include "RegisterContextLinux_mips64.h"
18 // For GP and FP buffers
19 #include "RegisterContext_mips.h"
21 // Internal codes for all mips32 and mips64 registers
22 #include "lldb-mips-linux-register-enums.h"
25 using namespace lldb_private;
27 //---------------------------------------------------------------------------
28 // Include RegisterInfos_mips64 to declare our g_register_infos_mips64 structure.
29 //---------------------------------------------------------------------------
30 #define DECLARE_REGISTER_INFOS_MIPS64_STRUCT
32 #include "RegisterInfos_mips64.h"
34 #undef DECLARE_REGISTER_INFOS_MIPS64_STRUCT
36 //---------------------------------------------------------------------------
37 // Include RegisterInfos_mips to declare our g_register_infos_mips structure.
38 //---------------------------------------------------------------------------
39 #define DECLARE_REGISTER_INFOS_MIPS_STRUCT
40 #include "RegisterInfos_mips.h"
41 #undef DECLARE_REGISTER_INFOS_MIPS_STRUCT
43 static const RegisterInfo *
44 GetRegisterInfoPtr (const ArchSpec &target_arch)
46 switch (target_arch.GetMachine())
48 case llvm::Triple::mips64:
49 case llvm::Triple::mips64el:
50 return g_register_infos_mips64;
51 case llvm::Triple::mips:
52 case llvm::Triple::mipsel:
53 return g_register_infos_mips;
55 assert(false && "Unhandled target architecture.");
61 GetRegisterInfoCount (const ArchSpec &target_arch)
63 switch (target_arch.GetMachine())
65 case llvm::Triple::mips64:
66 case llvm::Triple::mips64el:
67 return static_cast<uint32_t> (sizeof (g_register_infos_mips64) / sizeof (g_register_infos_mips64 [0]));
68 case llvm::Triple::mips:
69 case llvm::Triple::mipsel:
70 return static_cast<uint32_t> (sizeof (g_register_infos_mips) / sizeof (g_register_infos_mips [0]));
72 assert(false && "Unhandled target architecture.");
78 GetUserRegisterInfoCount (const ArchSpec &target_arch)
80 switch (target_arch.GetMachine())
82 case llvm::Triple::mips:
83 case llvm::Triple::mipsel:
84 return static_cast<uint32_t> (k_num_user_registers_mips);
85 case llvm::Triple::mips64el:
86 case llvm::Triple::mips64:
87 return static_cast<uint32_t> (k_num_user_registers_mips64);
89 assert(false && "Unhandled target architecture.");
94 RegisterContextLinux_mips64::RegisterContextLinux_mips64(const ArchSpec &target_arch) :
95 lldb_private::RegisterInfoInterface(target_arch),
96 m_register_info_p (GetRegisterInfoPtr (target_arch)),
97 m_register_info_count (GetRegisterInfoCount (target_arch)),
98 m_user_register_count (GetUserRegisterInfoCount (target_arch))
103 RegisterContextLinux_mips64::GetGPRSize() const
105 return sizeof(GPR_linux_mips);
109 RegisterContextLinux_mips64::GetRegisterInfo() const
111 return m_register_info_p;
115 RegisterContextLinux_mips64::GetRegisterCount () const
117 return m_register_info_count;
121 RegisterContextLinux_mips64::GetUserRegisterCount () const
123 return m_user_register_count;