RegisterContextPOSIX.h revision 256281
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.
22class RegisterContextPOSIX
23    : public lldb_private::RegisterContext
24{
25public:
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
66protected:
67    bool m_watchpoints_initialized;
68};
69
70#endif // #ifndef liblldb_RegisterContextPOSIX_H_
71