1 //===-- NativeRegisterContextDBReg_x86.h ------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef lldb_NativeRegisterContextDBReg_x86_h
10 #define lldb_NativeRegisterContextDBReg_x86_h
11 
12 #include "Plugins/Process/Utility/NativeRegisterContextRegisterInfo.h"
13 
14 namespace lldb_private {
15 
16 class NativeRegisterContextDBReg_x86
17     : public virtual NativeRegisterContextRegisterInfo {
18 public:
19   // NB: This constructor is here only because gcc<=6.5 requires a virtual base
20   // class initializer on abstract class (even though it is never used). It can
21   // be deleted once we move to gcc>=7.0.
22   NativeRegisterContextDBReg_x86(NativeThreadProtocol &thread)
23       : NativeRegisterContextRegisterInfo(thread, nullptr) {}
24 
25   Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override;
26 
27   Status GetWatchpointHitIndex(uint32_t &wp_index,
28                                lldb::addr_t trap_addr) override;
29 
30   Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override;
31 
32   bool ClearHardwareWatchpoint(uint32_t wp_index) override;
33 
34   Status ClearWatchpointHit(uint32_t wp_index) override;
35 
36   Status ClearAllHardwareWatchpoints() override;
37 
38   Status SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size,
39                                         uint32_t watch_flags,
40                                         uint32_t wp_index);
41 
42   uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
43                                  uint32_t watch_flags) override;
44 
45   lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override;
46 
47   uint32_t NumSupportedHardwareWatchpoints() override;
48 
49   virtual const RegisterInfo *GetDR(int num) const;
50 };
51 
52 } // namespace lldb_private
53 
54 #endif // #ifndef lldb_NativeRegisterContextDBReg_x86_h
55