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