diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp')
-rw-r--r-- | gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp b/gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp new file mode 100644 index 00000000000..adf7040c621 --- /dev/null +++ b/gnu/llvm/lldb/source/Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.cpp @@ -0,0 +1,102 @@ +//===-- NativeRegisterContextOpenBSD.cpp -------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "NativeRegisterContextOpenBSD.h" + +#include "lldb/Host/common/NativeProcessProtocol.h" + +using namespace lldb_private; +using namespace lldb_private::process_openbsd; + +// clang-format off +#include <sys/types.h> +#include <sys/ptrace.h> +// clang-format on + +NativeRegisterContextOpenBSD::NativeRegisterContextOpenBSD( + NativeThreadProtocol &native_thread, + RegisterInfoInterface *reg_info_interface_p) + : NativeRegisterContextRegisterInfo(native_thread, + reg_info_interface_p) {} + +Status NativeRegisterContextOpenBSD::ReadGPR() { + void *buf = GetGPRBuffer(); + if (!buf) + return Status("GPR buffer is NULL"); + + return DoReadGPR(buf); +} + +Status NativeRegisterContextOpenBSD::WriteGPR() { + void *buf = GetGPRBuffer(); + if (!buf) + return Status("GPR buffer is NULL"); + + return DoWriteGPR(buf); +} + +Status NativeRegisterContextOpenBSD::ReadFPR() { + void *buf = GetFPRBuffer(); + if (!buf) + return Status("FPR buffer is NULL"); + + return DoReadFPR(buf); +} + +Status NativeRegisterContextOpenBSD::WriteFPR() { + void *buf = GetFPRBuffer(); + if (!buf) + return Status("FPR buffer is NULL"); + + return DoWriteFPR(buf); +} + +Status NativeRegisterContextOpenBSD::DoReadGPR(void *buf) { +#ifdef PT_GETREGS + return NativeProcessOpenBSD::PtraceWrapper(PT_GETREGS, GetProcessPid(), buf, + m_thread.GetID()); +#else + return Status("PT_GETREGS not supported on this platform"); +#endif +} + +Status NativeRegisterContextOpenBSD::DoWriteGPR(void *buf) { +#ifdef PT_SETREGS + return NativeProcessOpenBSD::PtraceWrapper(PT_SETREGS, GetProcessPid(), buf, + m_thread.GetID()); +#else + return Status("PT_SETREGS not supported on this platform"); +#endif +} + +Status NativeRegisterContextOpenBSD::DoReadFPR(void *buf) { +#ifdef PT_GETFPREGS + return NativeProcessOpenBSD::PtraceWrapper(PT_GETFPREGS, GetProcessPid(), buf, + m_thread.GetID()); +#else + return Status("PT_GETFPREGS not supported on this platform"); +#endif +} + +Status NativeRegisterContextOpenBSD::DoWriteFPR(void *buf) { +#ifdef PT_SETFPREGS + return NativeProcessOpenBSD::PtraceWrapper(PT_SETFPREGS, GetProcessPid(), buf, + m_thread.GetID()); +#else + return Status("PT_SETFPREGS not supported on this platform"); +#endif +} + +NativeProcessOpenBSD &NativeRegisterContextOpenBSD::GetProcess() { + return static_cast<NativeProcessOpenBSD &>(m_thread.GetProcess()); +} + +::pid_t NativeRegisterContextOpenBSD::GetProcessPid() { + return GetProcess().GetID(); +} |