[Lldb-commits] [lldb] r372046 - [Reproducer] Implement dumping packets.

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Mon Sep 16 16:31:06 PDT 2019


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;
     }




More information about the lldb-commits mailing list