Home | History | Annotate | Download | only in POSIX
      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_
     71