]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIX.h
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / contrib / llvm / tools / lldb / source / Plugins / Process / POSIX / RegisterContextPOSIX.h
1 //===-- RegisterContextPOSIX.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_RegisterContextPOSIX_H_
11 #define liblldb_RegisterContextPOSIX_H_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 #include "lldb/Target/RegisterContext.h"
17
18 //------------------------------------------------------------------------------
19 /// @class RegisterContextPOSIX
20 ///
21 /// @brief Extends RegisterClass with a few virtual operations useful on POSIX.
22 class RegisterContextPOSIX
23     : public lldb_private::RegisterContext
24 {
25 public:
26     RegisterContextPOSIX(lldb_private::Thread &thread,
27                          uint32_t concrete_frame_idx)
28         : RegisterContext(thread, concrete_frame_idx)
29         { m_watchpoints_initialized = false; }
30
31     /// Updates the register state of the associated thread after hitting a
32     /// breakpoint (if that make sense for the architecture).  Default
33     /// implementation simply returns true for architectures which do not
34     /// require any update.
35     ///
36     /// @return
37     ///    True if the operation succeeded and false otherwise.
38     virtual bool UpdateAfterBreakpoint() { return true; }
39
40     /// Determines the index in lldb's register file given a kernel byte offset.
41     virtual unsigned
42     GetRegisterIndexFromOffset(unsigned offset) { return LLDB_INVALID_REGNUM; }
43
44     // Checks to see if a watchpoint specified by hw_index caused the inferior
45     // to stop.
46     virtual bool
47     IsWatchpointHit (uint32_t hw_index) { return false; }
48
49     // Resets any watchpoints that have been hit.
50     virtual bool
51     ClearWatchpointHits () { return false; }
52
53     // Returns the watchpoint address associated with a watchpoint hardware
54     // index.
55     virtual lldb::addr_t
56     GetWatchpointAddress (uint32_t hw_index) { return LLDB_INVALID_ADDRESS; }
57
58     virtual bool
59     IsWatchpointVacant (uint32_t hw_index) { return false; }
60
61     virtual bool
62     SetHardwareWatchpointWithIndex (lldb::addr_t addr, size_t size,
63                                     bool read, bool write,
64                                     uint32_t hw_index) { return false; }
65
66 protected:
67     bool m_watchpoints_initialized;
68 };
69
70 #endif // #ifndef liblldb_RegisterContextPOSIX_H_