1 //===-- NativeThreadProtocol.cpp --------------------------------*- 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 #include "lldb/Host/common/NativeThreadProtocol.h"
11 
12 #include "lldb/Host/common/NativeProcessProtocol.h"
13 #include "lldb/Host/common/NativeRegisterContext.h"
14 #include "lldb/Host/common/SoftwareBreakpoint.h"
15 
16 using namespace lldb;
17 using namespace lldb_private;
18 
19 NativeThreadProtocol::NativeThreadProtocol(NativeProcessProtocol &process,
20                                            lldb::tid_t tid)
21     : m_process(process), m_tid(tid) {}
22 
23 Status NativeThreadProtocol::ReadRegister(uint32_t reg,
24                                           RegisterValue &reg_value) {
25   NativeRegisterContext &register_context = GetRegisterContext();
26 
27   const RegisterInfo *const reg_info =
28       register_context.GetRegisterInfoAtIndex(reg);
29   if (!reg_info)
30     return Status("no register info for reg num %" PRIu32, reg);
31 
32   return register_context.ReadRegister(reg_info, reg_value);
33   ;
34 }
35 
36 Status NativeThreadProtocol::WriteRegister(uint32_t reg,
37                                            const RegisterValue &reg_value) {
38   NativeRegisterContext& register_context = GetRegisterContext();
39 
40   const RegisterInfo *const reg_info =
41       register_context.GetRegisterInfoAtIndex(reg);
42   if (!reg_info)
43     return Status("no register info for reg num %" PRIu32, reg);
44 
45   return register_context.WriteRegister(reg_info, reg_value);
46 }
47 
48 Status NativeThreadProtocol::SaveAllRegisters(lldb::DataBufferSP &data_sp) {
49   return GetRegisterContext().WriteAllRegisterValues(data_sp);
50 }
51 
52 Status NativeThreadProtocol::RestoreAllRegisters(lldb::DataBufferSP &data_sp) {
53   return GetRegisterContext().ReadAllRegisterValues(data_sp);
54 }
55