RegisterContextPOSIXProcessMonitor_x86.h revision 263363
1//===-- RegisterContextPOSIXProcessMonitor_x86.h ----------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_RegisterContextPOSIXProcessMonitor_x86_H_
11#define liblldb_RegisterContextPOSIXProcessMonitor_x86_H_
12
13#include "Plugins/Process/POSIX/RegisterContextPOSIX_x86.h"
14
15class RegisterContextPOSIXProcessMonitor_x86_64:
16    public RegisterContextPOSIX_x86,
17    public POSIXBreakpointProtocol
18{
19public:
20    RegisterContextPOSIXProcessMonitor_x86_64(lldb_private::Thread &thread,
21                                              uint32_t concrete_frame_idx,
22                                              RegisterInfoInterface *register_info);
23
24protected:
25    bool
26    ReadGPR();
27
28    bool
29    ReadFPR();
30
31    bool
32    WriteGPR();
33
34    bool
35    WriteFPR();
36
37    // lldb_private::RegisterContext
38    bool
39    ReadRegister(const unsigned reg, lldb_private::RegisterValue &value);
40
41    bool
42    WriteRegister(const unsigned reg, const lldb_private::RegisterValue &value);
43
44    bool
45    ReadRegister(const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value);
46
47    bool
48    WriteRegister(const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value);
49
50    bool
51    ReadAllRegisterValues(lldb::DataBufferSP &data_sp);
52
53    bool
54    WriteAllRegisterValues(const lldb::DataBufferSP &data_sp);
55
56    uint32_t
57    SetHardwareWatchpoint(lldb::addr_t addr, size_t size, bool read, bool write);
58
59    bool
60    ClearHardwareWatchpoint(uint32_t hw_index);
61
62    bool
63    HardwareSingleStep(bool enable);
64
65    // POSIXBreakpointProtocol
66    bool
67    UpdateAfterBreakpoint();
68
69    unsigned
70    GetRegisterIndexFromOffset(unsigned offset);
71
72    bool
73    IsWatchpointHit(uint32_t hw_index);
74
75    bool
76    ClearWatchpointHits();
77
78    lldb::addr_t
79    GetWatchpointAddress(uint32_t hw_index);
80
81    bool
82    IsWatchpointVacant(uint32_t hw_index);
83
84    bool
85    SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size, bool read, bool write, uint32_t hw_index);
86
87    uint32_t
88    NumSupportedHardwareWatchpoints();
89
90private:
91    ProcessMonitor &
92    GetMonitor();
93};
94
95#endif
96