Revert "[lldb] [gdb-remote] Support getting siginfo via API"

This reverts commit 1a8f60f5f5.
The API requires further work.
This commit is contained in:
Michał Górny 2022-01-28 09:18:14 +01:00
parent d1c124e6e7
commit 59a3f65f5e
12 changed files with 0 additions and 197 deletions

View File

@ -405,12 +405,6 @@ public:
bool
SafeToCallFunctions ();
%feature("autodoc","
Retruns a SBValue object representing the siginfo for the current signal.
") GetSiginfo;
lldb::SBValue
GetSiginfo(SBError &error);
STRING_EXTENSION(SBThread)
#ifdef SWIGPYTHON

View File

@ -172,7 +172,6 @@ public:
protected:
friend class SBDebugger;
friend class SBTarget;
friend class SBThread;
lldb::PlatformSP GetSP() const;

View File

@ -875,7 +875,6 @@ protected:
friend class SBSection;
friend class SBSourceManager;
friend class SBSymbol;
friend class SBThread;
friend class SBValue;
friend class SBVariablesOptions;

View File

@ -208,8 +208,6 @@ public:
bool SafeToCallFunctions();
SBValue GetSiginfo(SBError &error);
private:
friend class SBBreakpoint;
friend class SBBreakpointLocation;

View File

@ -225,7 +225,6 @@ protected:
friend class SBFunction;
friend class SBModule;
friend class SBTarget;
friend class SBThread;
friend class SBTypeEnumMember;
friend class SBTypeEnumMemberList;
friend class SBTypeNameSpecifier;

View File

@ -22,7 +22,6 @@
#include "lldb/Utility/CompletionRequest.h"
#include "lldb/Utility/Event.h"
#include "lldb/Utility/StructuredData.h"
#include "lldb/Utility/UnimplementedError.h"
#include "lldb/Utility/UserID.h"
#include "lldb/lldb-private.h"
@ -1185,11 +1184,6 @@ public:
lldb::ThreadSP GetCurrentExceptionBacktrace();
virtual llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
GetSiginfo(size_t max_size) const {
return llvm::make_error<UnimplementedError>();
}
protected:
friend class ThreadPlan;
friend class ThreadList;

View File

@ -1317,50 +1317,3 @@ lldb_private::Thread *SBThread::operator->() {
lldb_private::Thread *SBThread::get() {
return m_opaque_sp->GetThreadSP().get();
}
SBValue SBThread::GetSiginfo(SBError &error) {
LLDB_INSTRUMENT_VA(this, error);
SBValue value;
SBProcess process = GetProcess();
if (!process.IsValid()) {
error.SetErrorString("no process");
return value;
}
SBTarget target = process.GetTarget();
if (!target.IsValid()) {
error.SetErrorString("unable to get target");
return value;
}
SBPlatform platform = target.GetPlatform();
if (!platform.IsValid()) {
error.SetErrorString("unable to get platform");
return value;
}
CompilerType type = platform.GetSP()->GetSiginfoType(
target.GetSP()->GetArchitecture().GetTriple());
if (!type.IsValid()) {
error.SetErrorString("no siginfo_t for the platform");
return value;
}
llvm::Optional<uint64_t> type_size = type.GetByteSize(nullptr);
assert(type_size);
ThreadSP thread_sp = m_opaque_sp->GetThreadSP();
if (!thread_sp) {
error.SetErrorString("unable to get thread");
return value;
}
llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>> data =
thread_sp->GetSiginfo(type_size.getValue());
if (!data) {
error.SetErrorString(llvm::toString(data.takeError()).c_str());
return value;
}
SBData sb_data;
sb_data.SetData(error, data.get()->getBufferStart(),
data.get()->getBufferSize(), process.GetByteOrder(), 0);
if (!sb_data.IsValid())
return value;
return target.CreateValueFromData("siginfo", sb_data, type);
}

View File

@ -173,13 +173,6 @@ bool GDBRemoteCommunicationClient::GetQXferMemoryMapReadSupported() {
return m_supports_qXfer_memory_map_read == eLazyBoolYes;
}
bool GDBRemoteCommunicationClient::GetQXferSigInfoReadSupported() {
if (m_supports_qXfer_siginfo_read == eLazyBoolCalculate) {
GetRemoteQSupported();
}
return m_supports_qXfer_siginfo_read == eLazyBoolYes;
}
uint64_t GDBRemoteCommunicationClient::GetRemoteMaxPacketSize() {
if (m_max_packet_size == 0) {
GetRemoteQSupported();
@ -280,7 +273,6 @@ void GDBRemoteCommunicationClient::ResetDiscoverableSettings(bool did_exec) {
m_supports_qXfer_libraries_svr4_read = eLazyBoolCalculate;
m_supports_qXfer_features_read = eLazyBoolCalculate;
m_supports_qXfer_memory_map_read = eLazyBoolCalculate;
m_supports_qXfer_siginfo_read = eLazyBoolCalculate;
m_supports_augmented_libraries_svr4_read = eLazyBoolCalculate;
m_uses_native_signals = eLazyBoolCalculate;
m_supports_qProcessInfoPID = true;
@ -328,7 +320,6 @@ void GDBRemoteCommunicationClient::GetRemoteQSupported() {
m_supports_augmented_libraries_svr4_read = eLazyBoolNo;
m_supports_qXfer_features_read = eLazyBoolNo;
m_supports_qXfer_memory_map_read = eLazyBoolNo;
m_supports_qXfer_siginfo_read = eLazyBoolNo;
m_supports_multiprocess = eLazyBoolNo;
m_supports_qEcho = eLazyBoolNo;
m_supports_QPassSignals = eLazyBoolNo;
@ -371,8 +362,6 @@ void GDBRemoteCommunicationClient::GetRemoteQSupported() {
m_supports_qXfer_features_read = eLazyBoolYes;
else if (x == "qXfer:memory-map:read+")
m_supports_qXfer_memory_map_read = eLazyBoolYes;
else if (x == "qXfer:siginfo:read+")
m_supports_qXfer_siginfo_read = eLazyBoolYes;
else if (x == "qEcho")
m_supports_qEcho = eLazyBoolYes;
else if (x == "QPassSignals+")

View File

@ -337,8 +337,6 @@ public:
bool GetQXferMemoryMapReadSupported();
bool GetQXferSigInfoReadSupported();
LazyBool SupportsAllocDeallocMemory() // const
{
// Uncomment this to have lldb pretend the debug server doesn't respond to
@ -553,7 +551,6 @@ protected:
LazyBool m_supports_qXfer_libraries_svr4_read = eLazyBoolCalculate;
LazyBool m_supports_qXfer_features_read = eLazyBoolCalculate;
LazyBool m_supports_qXfer_memory_map_read = eLazyBoolCalculate;
LazyBool m_supports_qXfer_siginfo_read = eLazyBoolCalculate;
LazyBool m_supports_augmented_libraries_svr4_read = eLazyBoolCalculate;
LazyBool m_supports_jThreadExtendedInfo = eLazyBoolCalculate;
LazyBool m_supports_jLoadedDynamicLibrariesInfos = eLazyBoolCalculate;

View File

@ -346,23 +346,3 @@ 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());
}

View File

@ -90,9 +90,6 @@ public:
StructuredData::ObjectSP FetchThreadExtendedInfo() override;
llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
GetSiginfo(size_t max_size) const override;
protected:
friend class ProcessGDBRemote;

View File

@ -490,99 +490,3 @@ class TestGDBRemoteClient(GDBRemoteTestBase):
lldb.eStopReasonSignal)
self.assertEqual(process.threads[0].GetStopDescription(100),
'signal SIGUSR1')
def do_siginfo_test(self, platform, target_yaml, raw_data, expected):
class MyResponder(MockGDBServerResponder):
def qSupported(self, client_supported):
return "PacketSize=3fff;QStartNoAckMode+;qXfer:siginfo:read+"
def qXferRead(self, obj, annex, offset, length):
if obj == "siginfo":
return raw_data, False
else:
return None, False
def haltReason(self):
return "T02"
def cont(self):
return self.haltReason()
self.server.responder = MyResponder()
self.runCmd("platform select " + platform)
target = self.createTarget(target_yaml)
process = self.connect(target)
error = lldb.SBError()
siginfo = process.threads[0].GetSiginfo(error)
self.assertTrue(siginfo, error)
for key, value in expected.items():
self.assertEqual(siginfo.GetValueForExpressionPath("." + key)
.GetValueAsUnsigned(),
value)
def test_siginfo_linux_amd64(self):
data = (
# si_signo si_errno si_code
"\x11\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
# __pad0 si_pid si_uid
"\x00\x00\x00\x00\xbf\xf7\x0b\x00\xe8\x03\x00\x00"
# si_status
"\x0c\x00\x00\x00" + "\x00" * 100)
expected = {
"si_signo": 17, # SIGCHLD
"si_errno": 0,
"si_code": 1, # CLD_EXITED
"_sifields._sigchld.si_pid": 784319,
"_sifields._sigchld.si_uid": 1000,
"_sifields._sigchld.si_status": 12,
"_sifields._sigchld.si_utime": 0,
"_sifields._sigchld.si_stime": 0,
}
self.do_siginfo_test("remote-linux", "basic_eh_frame.yaml",
data, expected)
def test_siginfo_linux_i386(self):
data = (
# si_signo si_errno si_code
"\x11\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
# si_pid si_uid si_status
"\x49\x43\x07\x00\xe8\x03\x00\x00\x0c\x00\x00\x00"
+ "\x00" * 104)
expected = {
"si_signo": 17, # SIGCHLD
"si_errno": 0,
"si_code": 1, # CLD_EXITED
"_sifields._sigchld.si_pid": 475977,
"_sifields._sigchld.si_uid": 1000,
"_sifields._sigchld.si_status": 12,
"_sifields._sigchld.si_utime": 0,
"_sifields._sigchld.si_stime": 0,
}
self.do_siginfo_test("remote-linux", "basic_eh_frame-i386.yaml",
data, expected)
def test_siginfo_freebsd_amd64(self):
data = (
# si_signo si_errno si_code
"\x0b\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
# si_pid si_uid si_status
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
# si_addr
"\x76\x98\xba\xdc\xfe\x00\x00\x00"
# si_status si_trapno
"\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00"
+ "\x00" * 36)
expected = {
"si_signo": 11, # SIGSEGV
"si_errno": 0,
"si_code": 1, # SEGV_MAPERR
"si_addr": 0xfedcba9876,
"_reason._fault._trapno": 12,
}
self.do_siginfo_test("remote-freebsd", "basic_eh_frame.yaml",
data, expected)