1 //===-- NativeThreadProtocol.cpp --------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/Host/common/NativeThreadProtocol.h"
12 #include "lldb/Host/common/NativeProcessProtocol.h"
13 #include "lldb/Host/common/NativeRegisterContext.h"
14 #include "lldb/Host/common/SoftwareBreakpoint.h"
17 using namespace lldb_private;
19 NativeThreadProtocol::NativeThreadProtocol(NativeProcessProtocol &process,
21 : m_process(process), m_tid(tid) {}
23 Status NativeThreadProtocol::ReadRegister(uint32_t reg,
24 RegisterValue ®_value) {
25 NativeRegisterContextSP register_context_sp = GetRegisterContext();
26 if (!register_context_sp)
27 return Status("no register context");
29 const RegisterInfo *const reg_info =
30 register_context_sp->GetRegisterInfoAtIndex(reg);
32 return Status("no register info for reg num %" PRIu32, reg);
34 return register_context_sp->ReadRegister(reg_info, reg_value);
38 Status NativeThreadProtocol::WriteRegister(uint32_t reg,
39 const RegisterValue ®_value) {
40 NativeRegisterContextSP register_context_sp = GetRegisterContext();
41 if (!register_context_sp)
42 return Status("no register context");
44 const RegisterInfo *const reg_info =
45 register_context_sp->GetRegisterInfoAtIndex(reg);
47 return Status("no register info for reg num %" PRIu32, reg);
49 return register_context_sp->WriteRegister(reg_info, reg_value);
52 Status NativeThreadProtocol::SaveAllRegisters(lldb::DataBufferSP &data_sp) {
53 NativeRegisterContextSP register_context_sp = GetRegisterContext();
54 if (!register_context_sp)
55 return Status("no register context");
56 return register_context_sp->WriteAllRegisterValues(data_sp);
59 Status NativeThreadProtocol::RestoreAllRegisters(lldb::DataBufferSP &data_sp) {
60 NativeRegisterContextSP register_context_sp = GetRegisterContext();
61 if (!register_context_sp)
62 return Status("no register context");
63 return register_context_sp->ReadAllRegisterValues(data_sp);