forked from OSchip/llvm-project
Revert "[lldb] [gdb-remote] Support getting siginfo via API"
This reverts commit 1a8f60f5f5
.
The API requires further work.
This commit is contained in:
parent
d1c124e6e7
commit
59a3f65f5e
|
@ -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
|
||||
|
|
|
@ -172,7 +172,6 @@ public:
|
|||
protected:
|
||||
friend class SBDebugger;
|
||||
friend class SBTarget;
|
||||
friend class SBThread;
|
||||
|
||||
lldb::PlatformSP GetSP() const;
|
||||
|
||||
|
|
|
@ -875,7 +875,6 @@ protected:
|
|||
friend class SBSection;
|
||||
friend class SBSourceManager;
|
||||
friend class SBSymbol;
|
||||
friend class SBThread;
|
||||
friend class SBValue;
|
||||
friend class SBVariablesOptions;
|
||||
|
||||
|
|
|
@ -208,8 +208,6 @@ public:
|
|||
|
||||
bool SafeToCallFunctions();
|
||||
|
||||
SBValue GetSiginfo(SBError &error);
|
||||
|
||||
private:
|
||||
friend class SBBreakpoint;
|
||||
friend class SBBreakpointLocation;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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+")
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue