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-28 17:47:47 +0100 |
commit | ac666d1799c45a1ecd59f7503e1fc649deffd4d4 (patch) | |
tree | 470f5d279cd6b236a8f906dbb1bc024549a27894 /lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp | |
parent | a858e25f1cf384af9f7350b92594467321070cf1 (diff) | |
download | llvm-ac666d1799c45a1ecd59f7503e1fc649deffd4d4.zip llvm-ac666d1799c45a1ecd59f7503e1fc649deffd4d4.tar.gz llvm-ac666d1799c45a1ecd59f7503e1fc649deffd4d4.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()); +} |