| //===-- NativeRegisterContextLinux.h ----------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef lldb_NativeRegisterContextLinux_h |
| #define lldb_NativeRegisterContextLinux_h |
| |
| #include "lldb/Host/common/NativeRegisterContextRegisterInfo.h" |
| #include "lldb/Host/common/NativeThreadProtocol.h" |
| |
| #include "Plugins/Process/Linux/NativeProcessLinux.h" |
| |
| namespace lldb_private { |
| namespace process_linux { |
| |
| class NativeRegisterContextLinux : public NativeRegisterContextRegisterInfo |
| { |
| public: |
| NativeRegisterContextLinux(NativeThreadProtocol &native_thread, |
| uint32_t concrete_frame_idx, |
| RegisterInfoInterface *reg_info_interface_p); |
| |
| // This function is implemented in the NativeRegisterContextLinux_* subclasses to create a new |
| // instance of the host specific NativeRegisterContextLinux. The implementations can't collide |
| // as only one NativeRegisterContextLinux_* variant should be compiled into the final |
| // executable. |
| static NativeRegisterContextLinux* |
| CreateHostNativeRegisterContextLinux(const ArchSpec& target_arch, |
| NativeThreadProtocol &native_thread, |
| uint32_t concrete_frame_idx); |
| |
| protected: |
| lldb::ByteOrder |
| GetByteOrder() const; |
| |
| virtual Error |
| ReadRegisterRaw(uint32_t reg_index, RegisterValue& reg_value); |
| |
| virtual Error |
| WriteRegisterRaw(uint32_t reg_index, const RegisterValue& reg_value); |
| |
| virtual Error |
| ReadRegisterSet(void *buf, size_t buf_size, unsigned int regset); |
| |
| virtual Error |
| WriteRegisterSet(void *buf, size_t buf_size, unsigned int regset); |
| |
| virtual Error |
| ReadGPR(); |
| |
| virtual Error |
| WriteGPR(); |
| |
| virtual Error |
| ReadFPR(); |
| |
| virtual Error |
| WriteFPR(); |
| |
| virtual void* |
| GetGPRBuffer() { return nullptr; } |
| |
| virtual size_t |
| GetGPRSize() { return GetRegisterInfoInterface().GetGPRSize(); } |
| |
| virtual void* |
| GetFPRBuffer() { return nullptr; } |
| |
| virtual size_t |
| GetFPRSize() { return 0; } |
| |
| |
| // The Do*** functions are executed on the privileged thread and can perform ptrace |
| // operations directly. |
| virtual Error |
| DoReadRegisterValue(uint32_t offset, |
| const char* reg_name, |
| uint32_t size, |
| RegisterValue &value); |
| |
| virtual Error |
| DoWriteRegisterValue(uint32_t offset, |
| const char* reg_name, |
| const RegisterValue &value); |
| |
| virtual Error |
| DoReadGPR(void *buf, size_t buf_size); |
| |
| virtual Error |
| DoWriteGPR(void *buf, size_t buf_size); |
| |
| virtual Error |
| DoReadFPR(void *buf, size_t buf_size); |
| |
| virtual Error |
| DoWriteFPR(void *buf, size_t buf_size); |
| }; |
| |
| } // namespace process_linux |
| } // namespace lldb_private |
| |
| #endif // #ifndef lldb_NativeRegisterContextLinux_h |