1 //===-- NativeRegisterContextOpenBSD.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 "NativeRegisterContextOpenBSD.h" 11 12 #include "lldb/Host/common/NativeProcessProtocol.h" 13 14 using namespace lldb_private; 15 using namespace lldb_private::process_openbsd; 16 17 // clang-format off 18 #include <sys/types.h> 19 #include <sys/ptrace.h> 20 // clang-format on 21 22 NativeRegisterContextOpenBSD::NativeRegisterContextOpenBSD( 23 NativeThreadProtocol &native_thread, 24 RegisterInfoInterface *reg_info_interface_p) 25 : NativeRegisterContextRegisterInfo(native_thread, 26 reg_info_interface_p) {} 27 28 Status NativeRegisterContextOpenBSD::ReadGPR() { 29 void *buf = GetGPRBuffer(); 30 if (!buf) 31 return Status("GPR buffer is NULL"); 32 33 return DoReadGPR(buf); 34 } 35 36 Status NativeRegisterContextOpenBSD::WriteGPR() { 37 void *buf = GetGPRBuffer(); 38 if (!buf) 39 return Status("GPR buffer is NULL"); 40 41 return DoWriteGPR(buf); 42 } 43 44 Status NativeRegisterContextOpenBSD::ReadFPR() { 45 void *buf = GetFPRBuffer(); 46 if (!buf) 47 return Status("FPR buffer is NULL"); 48 49 return DoReadFPR(buf); 50 } 51 52 Status NativeRegisterContextOpenBSD::WriteFPR() { 53 void *buf = GetFPRBuffer(); 54 if (!buf) 55 return Status("FPR buffer is NULL"); 56 57 return DoWriteFPR(buf); 58 } 59 60 Status NativeRegisterContextOpenBSD::DoReadGPR(void *buf) { 61 #ifdef PT_GETREGS 62 return NativeProcessOpenBSD::PtraceWrapper(PT_GETREGS, GetProcessPid(), buf, 63 m_thread.GetID()); 64 #else 65 return Status("PT_GETREGS not supported on this platform"); 66 #endif 67 } 68 69 Status NativeRegisterContextOpenBSD::DoWriteGPR(void *buf) { 70 #ifdef PT_SETREGS 71 return NativeProcessOpenBSD::PtraceWrapper(PT_SETREGS, GetProcessPid(), buf, 72 m_thread.GetID()); 73 #else 74 return Status("PT_SETREGS not supported on this platform"); 75 #endif 76 } 77 78 Status NativeRegisterContextOpenBSD::DoReadFPR(void *buf) { 79 #ifdef PT_GETFPREGS 80 return NativeProcessOpenBSD::PtraceWrapper(PT_GETFPREGS, GetProcessPid(), buf, 81 m_thread.GetID()); 82 #else 83 return Status("PT_GETFPREGS not supported on this platform"); 84 #endif 85 } 86 87 Status NativeRegisterContextOpenBSD::DoWriteFPR(void *buf) { 88 #ifdef PT_SETFPREGS 89 return NativeProcessOpenBSD::PtraceWrapper(PT_SETFPREGS, GetProcessPid(), buf, 90 m_thread.GetID()); 91 #else 92 return Status("PT_SETFPREGS not supported on this platform"); 93 #endif 94 } 95 96 NativeProcessOpenBSD &NativeRegisterContextOpenBSD::GetProcess() { 97 return static_cast<NativeProcessOpenBSD &>(m_thread.GetProcess()); 98 } 99 100 ::pid_t NativeRegisterContextOpenBSD::GetProcessPid() { 101 return GetProcess().GetID(); 102 } 103