Author: jdevlieghere Date: Mon Sep 16 16:31:06 2019 New Revision: 372046 URL: http://llvm.org/viewvc/llvm-project?rev=372046&view=rev Log: [Reproducer] Implement dumping packets.
This patch completes the dump functionality by adding support for dumping a reproducer's GDB remote packets. Differential revision: https://reviews.llvm.org/D67636 Modified: lldb/trunk/lit/Reproducer/TestDump.test lldb/trunk/source/Commands/CommandObjectReproducer.cpp Modified: lldb/trunk/lit/Reproducer/TestDump.test URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lit/Reproducer/TestDump.test?rev=372046&r1=372045&r2=372046&view=diff ============================================================================== --- lldb/trunk/lit/Reproducer/TestDump.test (original) +++ lldb/trunk/lit/Reproducer/TestDump.test Mon Sep 16 16:31:06 2019 @@ -18,4 +18,8 @@ # COMMANDS: target create # COMMANDS: command source +# RUN: %lldb -b -o 'reproducer dump -p gdb -f %t.repro' | FileCheck %s --check-prefix GDB +# GDB: send packet: $QStartNoAckMode#b0 +# GDB: read packet: $OK#9a + # RUN: %lldb --replay %t.repro | FileCheck %s --check-prefix FILES Modified: lldb/trunk/source/Commands/CommandObjectReproducer.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectReproducer.cpp?rev=372046&r1=372045&r2=372046&view=diff ============================================================================== --- lldb/trunk/source/Commands/CommandObjectReproducer.cpp (original) +++ lldb/trunk/source/Commands/CommandObjectReproducer.cpp Mon Sep 16 16:31:06 2019 @@ -10,6 +10,7 @@ #include "lldb/Host/OptionParser.h" #include "lldb/Utility/Reproducer.h" +#include "lldb/Utility/GDBRemote.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandReturnObject.h" @@ -310,9 +311,26 @@ protected: return true; } case eReproducerProviderGDB: { - // FIXME: Dumping the GDB remote packets means moving the - // (de)serialization code out of the GDB-remote plugin. - result.AppendMessage("Dumping GDB remote packets isn't implemented yet."); + FileSpec gdb_file = loader->GetFile<ProcessGDBRemoteProvider::Info>(); + auto error_or_file = MemoryBuffer::getFile(gdb_file.GetPath()); + if (auto err = error_or_file.getError()) { + SetError(result, errorCodeToError(err)); + return false; + } + + std::vector<GDBRemotePacket> packets; + yaml::Input yin((*error_or_file)->getBuffer()); + yin >> packets; + + if (auto err = yin.error()) { + SetError(result, errorCodeToError(err)); + return false; + } + + for (GDBRemotePacket& packet : packets) { + packet.Dump(result.GetOutputStream()); + } + result.SetStatus(eReturnStatusSuccessFinishResult); return true; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits