diff options
author | Todd Fiala <todd.fiala@gmail.com> | 2016-08-19 04:21:48 +0000 |
---|---|---|
committer | Todd Fiala <todd.fiala@gmail.com> | 2016-08-19 04:21:48 +0000 |
commit | 759300192abe8e38e8a40ab95934ba602a78c252 (patch) | |
tree | d284c51cf10c23d3023ab8e1308e26ad1ee218a7 /lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp | |
parent | e2ca3b65fcba7c4c5dbd10c1e8925177b7718806 (diff) | |
download | bcm5719-llvm-759300192abe8e38e8a40ab95934ba602a78c252.tar.gz bcm5719-llvm-759300192abe8e38e8a40ab95934ba602a78c252.zip |
Add StructuredData plugin type; showcase with new DarwinLog feature
Take 2, with missing cmake line fixed. Build tested on
Ubuntu 14.04 with clang-3.6.
See docs/structured_data/StructuredDataPlugins.md for details.
differential review: https://reviews.llvm.org/D22976
reviewers: clayborg, jingham
llvm-svn: 279202
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp index 786d80176c6..fde38037d9a 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteClientBase.cpp @@ -11,6 +11,7 @@ #include "llvm/ADT/StringExtras.h" +#include "lldb/Target/Process.h" #include "lldb/Target/UnixSignals.h" #include "lldb/Utility/LLDBAssert.h" @@ -100,6 +101,41 @@ GDBRemoteClientBase::SendContinuePacketAndWaitForResponse(ContinueDelegate &dele case 'A': delegate.HandleAsyncMisc(llvm::StringRef(response.GetStringRef()).substr(1)); break; + + case 'J': + // Asynchronous JSON packet, destined for a + // StructuredDataPlugin. + { + // Parse the content into a StructuredData instance. + auto payload_index = strlen("JSON-async:"); + StructuredData::ObjectSP json_sp = + StructuredData::ParseJSON(response.GetStringRef() + .substr(payload_index)); + if (log) + { + if (json_sp) + log->Printf( + "GDBRemoteCommmunicationClientBase::%s() " + "received Async StructuredData packet: %s", + __FUNCTION__, + response.GetStringRef(). + substr(payload_index).c_str()); + else + log->Printf("GDBRemoteCommmunicationClientBase::%s" + "() received StructuredData packet:" + " parse failure", __FUNCTION__); + } + + // Pass the data to the process to route to the + // appropriate plugin. The plugin controls what happens + // to it from there. + bool routed = delegate.HandleAsyncStructuredData(json_sp); + if (log) + log->Printf("GDBRemoteCommmunicationClientBase::%s()" + " packet %s", __FUNCTION__, + routed ? "handled" : "not handled"); + break; + } case 'T': case 'S': // Do this with the continue lock held. |