diff options
author | Michał Górny <mgorny@moritz.systems> | 2022-01-24 18:52:49 +0100 |
---|---|---|
committer | Michał Górny <mgorny@moritz.systems> | 2022-01-27 13:33:47 +0100 |
commit | 1a8f60f5f5b8638a3e8e7fb31ba7ae9e17a7ff2d (patch) | |
tree | f798b4dfd7ef1c861499e5f1e70abecdf7c68e25 /lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp | |
parent | 3053e143bef273a2e65519cea15be8f7ce6cd854 (diff) | |
download | llvm-1a8f60f5f5b8638a3e8e7fb31ba7ae9e17a7ff2d.zip llvm-1a8f60f5f5b8638a3e8e7fb31ba7ae9e17a7ff2d.tar.gz llvm-1a8f60f5f5b8638a3e8e7fb31ba7ae9e17a7ff2d.tar.bz2 |
[lldb] [gdb-remote] Support getting siginfo via API
Add Thread::GetSiginfo() and SBThread::GetSiginfo() methods to retrieve
the siginfo value from server.
Differential Revision: https://reviews.llvm.org/D118055
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp index ba73115..3d23c07 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp @@ -346,3 +346,23 @@ bool ThreadGDBRemote::CalculateStopInfo() { ->CalculateThreadStopInfo(this); return false; } + +llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> +ThreadGDBRemote::GetSiginfo(size_t max_size) const { + ProcessSP process_sp(GetProcess()); + if (!process_sp) + return llvm::createStringError(llvm::inconvertibleErrorCode(), + "no process"); + ProcessGDBRemote *gdb_process = + static_cast<ProcessGDBRemote *>(process_sp.get()); + if (!gdb_process->m_gdb_comm.GetQXferSigInfoReadSupported()) + return llvm::createStringError(llvm::inconvertibleErrorCode(), + "qXfer:siginfo:read not supported"); + + llvm::Expected<std::string> response = + gdb_process->m_gdb_comm.ReadExtFeature("siginfo", ""); + if (!response) + return response.takeError(); + + return llvm::MemoryBuffer::getMemBufferCopy(response.get()); +} |