• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
RegisterContextPOSIX(lldb_private::Thread & thread,uint32_t concrete_frame_idx)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.
UpdateAfterBreakpoint()38     virtual bool UpdateAfterBreakpoint() { return true; }
39 
40     /// Determines the index in lldb's register file given a kernel byte offset.
41     virtual unsigned
GetRegisterIndexFromOffset(unsigned offset)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
IsWatchpointHit(uint32_t hw_index)47     IsWatchpointHit (uint32_t hw_index) { return false; }
48 
49     // Resets any watchpoints that have been hit.
50     virtual bool
ClearWatchpointHits()51     ClearWatchpointHits () { return false; }
52 
53     // Returns the watchpoint address associated with a watchpoint hardware
54     // index.
55     virtual lldb::addr_t
GetWatchpointAddress(uint32_t hw_index)56     GetWatchpointAddress (uint32_t hw_index) { return LLDB_INVALID_ADDRESS; }
57 
58     virtual bool
IsWatchpointVacant(uint32_t hw_index)59     IsWatchpointVacant (uint32_t hw_index) { return false; }
60 
61     virtual bool
SetHardwareWatchpointWithIndex(lldb::addr_t addr,size_t size,bool read,bool write,uint32_t hw_index)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_
71