NativeRegisterContext.h revision 275072
1275072Semaste//===-- NativeRegisterContext.h ---------------------------------*- C++ -*-===// 2275072Semaste// 3275072Semaste// The LLVM Compiler Infrastructure 4275072Semaste// 5275072Semaste// This file is distributed under the University of Illinois Open Source 6275072Semaste// License. See LICENSE.TXT for details. 7275072Semaste// 8275072Semaste//===----------------------------------------------------------------------===// 9275072Semaste 10275072Semaste#ifndef liblldb_NativeRegisterContext_h_ 11275072Semaste#define liblldb_NativeRegisterContext_h_ 12275072Semaste 13275072Semaste// C Includes 14275072Semaste// C++ Includes 15275072Semaste// Other libraries and framework includes 16275072Semaste// Project includes 17275072Semaste#include "lldb/lldb-private.h" 18275072Semaste 19275072Semastenamespace lldb_private { 20275072Semaste 21275072Semasteclass NativeThreadProtocol; 22275072Semaste 23275072Semasteclass NativeRegisterContext: 24275072Semaste public std::enable_shared_from_this<NativeRegisterContext> 25275072Semaste{ 26275072Semastepublic: 27275072Semaste //------------------------------------------------------------------ 28275072Semaste // Constructors and Destructors 29275072Semaste //------------------------------------------------------------------ 30275072Semaste NativeRegisterContext (NativeThreadProtocol &thread, uint32_t concrete_frame_idx); 31275072Semaste 32275072Semaste virtual 33275072Semaste ~NativeRegisterContext (); 34275072Semaste 35275072Semaste // void 36275072Semaste // InvalidateIfNeeded (bool force); 37275072Semaste 38275072Semaste //------------------------------------------------------------------ 39275072Semaste // Subclasses must override these functions 40275072Semaste //------------------------------------------------------------------ 41275072Semaste // virtual void 42275072Semaste // InvalidateAllRegisters () = 0; 43275072Semaste 44275072Semaste virtual uint32_t 45275072Semaste GetRegisterCount () const = 0; 46275072Semaste 47275072Semaste virtual const RegisterInfo * 48275072Semaste GetRegisterInfoAtIndex (uint32_t reg) const = 0; 49275072Semaste 50275072Semaste const char * 51275072Semaste GetRegisterSetNameForRegisterAtIndex (uint32_t reg_index) const; 52275072Semaste 53275072Semaste virtual uint32_t 54275072Semaste GetRegisterSetCount () const = 0; 55275072Semaste 56275072Semaste virtual const RegisterSet * 57275072Semaste GetRegisterSet (uint32_t set_index) const = 0; 58275072Semaste 59275072Semaste virtual Error 60275072Semaste ReadRegister (const RegisterInfo *reg_info, RegisterValue ®_value) = 0; 61275072Semaste 62275072Semaste virtual Error 63275072Semaste WriteRegister (const RegisterInfo *reg_info, const RegisterValue ®_value) = 0; 64275072Semaste 65275072Semaste virtual Error 66275072Semaste ReadAllRegisterValues (lldb::DataBufferSP &data_sp) = 0; 67275072Semaste 68275072Semaste virtual Error 69275072Semaste WriteAllRegisterValues (const lldb::DataBufferSP &data_sp) = 0; 70275072Semaste 71275072Semaste uint32_t 72275072Semaste ConvertRegisterKindToRegisterNumber (uint32_t kind, uint32_t num) const; 73275072Semaste 74275072Semaste //------------------------------------------------------------------ 75275072Semaste // Subclasses can override these functions if desired 76275072Semaste //------------------------------------------------------------------ 77275072Semaste virtual uint32_t 78275072Semaste NumSupportedHardwareBreakpoints (); 79275072Semaste 80275072Semaste virtual uint32_t 81275072Semaste SetHardwareBreakpoint (lldb::addr_t addr, size_t size); 82275072Semaste 83275072Semaste virtual bool 84275072Semaste ClearHardwareBreakpoint (uint32_t hw_idx); 85275072Semaste 86275072Semaste virtual uint32_t 87275072Semaste NumSupportedHardwareWatchpoints (); 88275072Semaste 89275072Semaste virtual uint32_t 90275072Semaste SetHardwareWatchpoint (lldb::addr_t addr, size_t size, uint32_t watch_flags); 91275072Semaste 92275072Semaste virtual bool 93275072Semaste ClearHardwareWatchpoint (uint32_t hw_index); 94275072Semaste 95275072Semaste virtual bool 96275072Semaste HardwareSingleStep (bool enable); 97275072Semaste 98275072Semaste virtual Error 99275072Semaste ReadRegisterValueFromMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t src_addr, lldb::addr_t src_len, RegisterValue ®_value); 100275072Semaste 101275072Semaste virtual Error 102275072Semaste WriteRegisterValueToMemory (const lldb_private::RegisterInfo *reg_info, lldb::addr_t dst_addr, lldb::addr_t dst_len, const RegisterValue ®_value); 103275072Semaste 104275072Semaste //------------------------------------------------------------------ 105275072Semaste // Subclasses should not override these 106275072Semaste //------------------------------------------------------------------ 107275072Semaste virtual lldb::tid_t 108275072Semaste GetThreadID() const; 109275072Semaste 110275072Semaste virtual NativeThreadProtocol & 111275072Semaste GetThread () 112275072Semaste { 113275072Semaste return m_thread; 114275072Semaste } 115275072Semaste 116275072Semaste const RegisterInfo * 117275072Semaste GetRegisterInfoByName (const char *reg_name, uint32_t start_idx = 0); 118275072Semaste 119275072Semaste const RegisterInfo * 120275072Semaste GetRegisterInfo (uint32_t reg_kind, uint32_t reg_num); 121275072Semaste 122275072Semaste lldb::addr_t 123275072Semaste GetPC (lldb::addr_t fail_value = LLDB_INVALID_ADDRESS); 124275072Semaste 125275072Semaste Error 126275072Semaste SetPC (lldb::addr_t pc); 127275072Semaste 128275072Semaste lldb::addr_t 129275072Semaste GetSP (lldb::addr_t fail_value = LLDB_INVALID_ADDRESS); 130275072Semaste 131275072Semaste Error 132275072Semaste SetSP (lldb::addr_t sp); 133275072Semaste 134275072Semaste lldb::addr_t 135275072Semaste GetFP (lldb::addr_t fail_value = LLDB_INVALID_ADDRESS); 136275072Semaste 137275072Semaste Error 138275072Semaste SetFP (lldb::addr_t fp); 139275072Semaste 140275072Semaste const char * 141275072Semaste GetRegisterName (uint32_t reg); 142275072Semaste 143275072Semaste lldb::addr_t 144275072Semaste GetReturnAddress (lldb::addr_t fail_value = LLDB_INVALID_ADDRESS); 145275072Semaste 146275072Semaste lldb::addr_t 147275072Semaste GetFlags (lldb::addr_t fail_value = 0); 148275072Semaste 149275072Semaste lldb::addr_t 150275072Semaste ReadRegisterAsUnsigned (uint32_t reg, lldb::addr_t fail_value); 151275072Semaste 152275072Semaste lldb::addr_t 153275072Semaste ReadRegisterAsUnsigned (const RegisterInfo *reg_info, lldb::addr_t fail_value); 154275072Semaste 155275072Semaste Error 156275072Semaste WriteRegisterFromUnsigned (uint32_t reg, uint64_t uval); 157275072Semaste 158275072Semaste Error 159275072Semaste WriteRegisterFromUnsigned (const RegisterInfo *reg_info, uint64_t uval); 160275072Semaste 161275072Semaste // uint32_t 162275072Semaste // GetStopID () const 163275072Semaste // { 164275072Semaste // return m_stop_id; 165275072Semaste // } 166275072Semaste 167275072Semaste // void 168275072Semaste // SetStopID (uint32_t stop_id) 169275072Semaste // { 170275072Semaste // m_stop_id = stop_id; 171275072Semaste // } 172275072Semaste 173275072Semasteprotected: 174275072Semaste //------------------------------------------------------------------ 175275072Semaste // Classes that inherit from RegisterContext can see and modify these 176275072Semaste //------------------------------------------------------------------ 177275072Semaste NativeThreadProtocol &m_thread; // The thread that this register context belongs to. 178275072Semaste uint32_t m_concrete_frame_idx; // The concrete frame index for this register context 179275072Semaste // uint32_t m_stop_id; // The stop ID that any data in this context is valid for 180275072Semaste 181275072Semasteprivate: 182275072Semaste //------------------------------------------------------------------ 183275072Semaste // For RegisterContext only 184275072Semaste //------------------------------------------------------------------ 185275072Semaste DISALLOW_COPY_AND_ASSIGN (NativeRegisterContext); 186275072Semaste}; 187275072Semaste 188275072Semaste} // namespace lldb_private 189275072Semaste 190275072Semaste#endif // liblldb_NativeRegisterContext_h_ 191