| //===-- NativeThreadProtocol.cpp --------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "lldb/Host/common/NativeThreadProtocol.h" |
| |
| #include "lldb/Host/common/NativeProcessProtocol.h" |
| #include "lldb/Host/common/NativeRegisterContext.h" |
| #include "lldb/Host/common/SoftwareBreakpoint.h" |
| |
| using namespace lldb; |
| using namespace lldb_private; |
| |
| NativeThreadProtocol::NativeThreadProtocol (NativeProcessProtocol *process, lldb::tid_t tid) : |
| m_process_wp (process->shared_from_this ()), |
| m_tid (tid) |
| { |
| } |
| |
| Error |
| NativeThreadProtocol::ReadRegister (uint32_t reg, RegisterValue ®_value) |
| { |
| NativeRegisterContextSP register_context_sp = GetRegisterContext (); |
| if (!register_context_sp) |
| return Error ("no register context"); |
| |
| const RegisterInfo *const reg_info = register_context_sp->GetRegisterInfoAtIndex (reg); |
| if (!reg_info) |
| return Error ("no register info for reg num %" PRIu32, reg); |
| |
| return register_context_sp->ReadRegister (reg_info, reg_value);; |
| } |
| |
| Error |
| NativeThreadProtocol::WriteRegister (uint32_t reg, const RegisterValue ®_value) |
| { |
| NativeRegisterContextSP register_context_sp = GetRegisterContext (); |
| if (!register_context_sp) |
| return Error ("no register context"); |
| |
| const RegisterInfo *const reg_info = register_context_sp->GetRegisterInfoAtIndex (reg); |
| if (!reg_info) |
| return Error ("no register info for reg num %" PRIu32, reg); |
| |
| return register_context_sp->WriteRegister (reg_info, reg_value); |
| } |
| |
| Error |
| NativeThreadProtocol::SaveAllRegisters (lldb::DataBufferSP &data_sp) |
| { |
| NativeRegisterContextSP register_context_sp = GetRegisterContext (); |
| if (!register_context_sp) |
| return Error ("no register context"); |
| return register_context_sp->WriteAllRegisterValues (data_sp); |
| } |
| |
| Error |
| NativeThreadProtocol::RestoreAllRegisters (lldb::DataBufferSP &data_sp) |
| { |
| NativeRegisterContextSP register_context_sp = GetRegisterContext (); |
| if (!register_context_sp) |
| return Error ("no register context"); |
| return register_context_sp->ReadAllRegisterValues (data_sp); |
| } |
| |
| NativeProcessProtocolSP |
| NativeThreadProtocol::GetProcess () |
| { |
| return m_process_wp.lock (); |
| } |