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 ®_value) { 25 NativeRegisterContext ®ister_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 ®_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