[Lldb-commits] [lldb] r354631 - [Reproducers] Initialize reproducers before initializing the debugger.

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Thu Feb 21 14:26:16 PST 2019


Author: jdevlieghere
Date: Thu Feb 21 14:26:16 2019
New Revision: 354631

URL: http://llvm.org/viewvc/llvm-project?rev=354631&view=rev
Log:
[Reproducers] Initialize reproducers before initializing the debugger.

As per the discussion on the mailing list:
http://lists.llvm.org/pipermail/lldb-commits/Week-of-Mon-20190218/048007.html

This commit implements option (3):

> Go back to initializing the reproducer before the rest of the debugger.
> The method wouldn't be instrumented and guarantee no other SB methods are
> called or SB objects are constructed. The initialization then becomes part
> of the replay.

Differential revision: https://reviews.llvm.org/D58410

Removed:
    lldb/trunk/include/lldb/API/SBInitializerOptions.h
    lldb/trunk/scripts/interface/SBInitializerOptions.i
    lldb/trunk/source/API/SBInitializerOptions.cpp
Modified:
    lldb/trunk/include/lldb/API/SBDebugger.h
    lldb/trunk/include/lldb/API/SBDefines.h
    lldb/trunk/include/lldb/API/SBError.h
    lldb/trunk/include/lldb/API/SBFileSpec.h
    lldb/trunk/include/lldb/API/SBReproducer.h
    lldb/trunk/include/lldb/Initialization/SystemInitializer.h
    lldb/trunk/include/lldb/Initialization/SystemInitializerCommon.h
    lldb/trunk/include/lldb/Initialization/SystemLifetimeManager.h
    lldb/trunk/include/lldb/Utility/Reproducer.h
    lldb/trunk/lldb.xcodeproj/project.pbxproj
    lldb/trunk/scripts/interface/SBDebugger.i
    lldb/trunk/scripts/lldb.swig
    lldb/trunk/source/API/CMakeLists.txt
    lldb/trunk/source/API/SBDebugger.cpp
    lldb/trunk/source/API/SBReproducer.cpp
    lldb/trunk/source/API/SystemInitializerFull.cpp
    lldb/trunk/source/API/SystemInitializerFull.h
    lldb/trunk/source/Initialization/SystemInitializerCommon.cpp
    lldb/trunk/source/Initialization/SystemLifetimeManager.cpp
    lldb/trunk/source/Utility/Reproducer.cpp
    lldb/trunk/tools/driver/Driver.cpp
    lldb/trunk/tools/lldb-server/SystemInitializerLLGS.cpp
    lldb/trunk/tools/lldb-server/SystemInitializerLLGS.h
    lldb/trunk/tools/lldb-server/lldb-server.cpp
    lldb/trunk/tools/lldb-test/SystemInitializerTest.cpp
    lldb/trunk/tools/lldb-test/SystemInitializerTest.h
    lldb/trunk/tools/lldb-test/lldb-test.cpp

Modified: lldb/trunk/include/lldb/API/SBDebugger.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBDebugger.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBDebugger.h (original)
+++ lldb/trunk/include/lldb/API/SBDebugger.h Thu Feb 21 14:26:16 2019
@@ -12,7 +12,6 @@
 #include <stdio.h>
 
 #include "lldb/API/SBDefines.h"
-#include "lldb/API/SBInitializerOptions.h"
 #include "lldb/API/SBPlatform.h"
 
 namespace lldb {
@@ -45,7 +44,8 @@ public:
   lldb::SBDebugger &operator=(const lldb::SBDebugger &rhs);
 
   static void Initialize();
-  static lldb::SBError Initialize(SBInitializerOptions &options);
+
+  static lldb::SBError InitializeWithErrorHandling();
 
   static void Terminate();
 

Modified: lldb/trunk/include/lldb/API/SBDefines.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBDefines.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBDefines.h (original)
+++ lldb/trunk/include/lldb/API/SBDefines.h Thu Feb 21 14:26:16 2019
@@ -50,7 +50,6 @@ class LLDB_API SBFileSpecList;
 class LLDB_API SBFrame;
 class LLDB_API SBFunction;
 class LLDB_API SBHostOS;
-class LLDB_API SBInitializerOptions;
 class LLDB_API SBInstruction;
 class LLDB_API SBInstructionList;
 class LLDB_API SBLanguageRuntime;

Modified: lldb/trunk/include/lldb/API/SBError.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBError.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBError.h (original)
+++ lldb/trunk/include/lldb/API/SBError.h Thu Feb 21 14:26:16 2019
@@ -51,22 +51,23 @@ public:
   bool GetDescription(lldb::SBStream &description);
 
 protected:
+  friend class SBBreakpoint;
+  friend class SBBreakpointLocation;
+  friend class SBBreakpointName;
   friend class SBCommandReturnObject;
+  friend class SBCommunication;
   friend class SBData;
   friend class SBDebugger;
-  friend class SBCommunication;
   friend class SBHostOS;
   friend class SBPlatform;
   friend class SBProcess;
+  friend class SBReproducer;
   friend class SBStructuredData;
+  friend class SBTarget;
   friend class SBThread;
   friend class SBTrace;
-  friend class SBTarget;
   friend class SBValue;
   friend class SBWatchpoint;
-  friend class SBBreakpoint;
-  friend class SBBreakpointLocation;
-  friend class SBBreakpointName;
 
   lldb_private::Status *get();
 

Modified: lldb/trunk/include/lldb/API/SBFileSpec.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBFileSpec.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBFileSpec.h (original)
+++ lldb/trunk/include/lldb/API/SBFileSpec.h Thu Feb 21 14:26:16 2019
@@ -58,7 +58,6 @@ private:
   friend class SBDeclaration;
   friend class SBFileSpecList;
   friend class SBHostOS;
-  friend class SBInitializerOptions;
   friend class SBLaunchInfo;
   friend class SBLineEntry;
   friend class SBModule;

Removed: lldb/trunk/include/lldb/API/SBInitializerOptions.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBInitializerOptions.h?rev=354630&view=auto
==============================================================================
--- lldb/trunk/include/lldb/API/SBInitializerOptions.h (original)
+++ lldb/trunk/include/lldb/API/SBInitializerOptions.h (removed)
@@ -1,42 +0,0 @@
-//===-- SBInitializerOptions.h ----------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLDB_SBInitializerOptuions_h_
-#define LLDB_SBInitializerOptuions_h_
-
-#include "lldb/API/SBDefines.h"
-#include "lldb/API/SBFileSpec.h"
-
-namespace lldb_private {
-struct InitializerOptions;
-}
-
-namespace lldb {
-
-class LLDB_API SBInitializerOptions {
-public:
-  SBInitializerOptions();
-  SBInitializerOptions(const lldb::SBInitializerOptions &rhs);
-  ~SBInitializerOptions();
-  const SBInitializerOptions &operator=(const lldb::SBInitializerOptions &rhs);
-
-  void SetCaptureReproducer(bool b);
-  void SetReplayReproducer(bool b);
-  void SetReproducerPath(const char *path);
-
-  lldb_private::InitializerOptions &ref() const;
-
-private:
-  friend class SBDebugger;
-
-  std::unique_ptr<lldb_private::InitializerOptions> m_opaque_up;
-};
-
-} // namespace lldb
-
-#endif // LLDB_SBInitializerOptuions_h_

Modified: lldb/trunk/include/lldb/API/SBReproducer.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBReproducer.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBReproducer.h (original)
+++ lldb/trunk/include/lldb/API/SBReproducer.h Thu Feb 21 14:26:16 2019
@@ -9,13 +9,17 @@
 #ifndef LLDB_API_SBREPRODUCER_H
 #define LLDB_API_SBREPRODUCER_H
 
-#include "lldb/lldb-defines.h"
+#include "lldb/API/SBDefines.h"
 
 namespace lldb {
 
+/// The SBReproducer class is special because it bootstraps the capture and
+/// replay of SB API calls. As a result we cannot rely on any other SB objects
+/// in the interface or implementation of this class.
 class LLDB_API SBReproducer {
 public:
-  static bool Replay();
+  static const char *Capture(const char *path);
+  static const char *Replay(const char *path);
 };
 
 } // namespace lldb

Modified: lldb/trunk/include/lldb/Initialization/SystemInitializer.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Initialization/SystemInitializer.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Initialization/SystemInitializer.h (original)
+++ lldb/trunk/include/lldb/Initialization/SystemInitializer.h Thu Feb 21 14:26:16 2019
@@ -15,18 +15,12 @@
 
 namespace lldb_private {
 
-struct InitializerOptions {
-  bool reproducer_capture = false;
-  bool reproducer_replay = false;
-  std::string reproducer_path;
-};
-
 class SystemInitializer {
 public:
   SystemInitializer();
   virtual ~SystemInitializer();
 
-  virtual llvm::Error Initialize(const InitializerOptions &options) = 0;
+  virtual llvm::Error Initialize() = 0;
   virtual void Terminate() = 0;
 };
 }

Modified: lldb/trunk/include/lldb/Initialization/SystemInitializerCommon.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Initialization/SystemInitializerCommon.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Initialization/SystemInitializerCommon.h (original)
+++ lldb/trunk/include/lldb/Initialization/SystemInitializerCommon.h Thu Feb 21 14:26:16 2019
@@ -27,7 +27,7 @@ public:
   SystemInitializerCommon();
   ~SystemInitializerCommon() override;
 
-  llvm::Error Initialize(const InitializerOptions &options) override;
+  llvm::Error Initialize() override;
   void Terminate() override;
 };
 

Modified: lldb/trunk/include/lldb/Initialization/SystemLifetimeManager.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Initialization/SystemLifetimeManager.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Initialization/SystemLifetimeManager.h (original)
+++ lldb/trunk/include/lldb/Initialization/SystemLifetimeManager.h Thu Feb 21 14:26:16 2019
@@ -24,7 +24,6 @@ public:
   ~SystemLifetimeManager();
 
   llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer,
-                         const InitializerOptions &options,
                          LoadPluginCallbackType plugin_callback);
   void Terminate();
 

Modified: lldb/trunk/include/lldb/Utility/Reproducer.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/Reproducer.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Utility/Reproducer.h (original)
+++ lldb/trunk/include/lldb/Utility/Reproducer.h Thu Feb 21 14:26:16 2019
@@ -201,6 +201,7 @@ public:
   static Reproducer &Instance();
   static llvm::Error Initialize(ReproducerMode mode,
                                 llvm::Optional<FileSpec> root);
+  static bool Initialized();
   static void Terminate();
 
   Reproducer() = default;

Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Thu Feb 21 14:26:16 2019
@@ -793,8 +793,6 @@
 		26DE205311618FAC00A093E2 /* SBFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 26DE205211618FAC00A093E2 /* SBFunction.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		9A3576AA116E9AC700E8ED2F /* SBHostOS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9A3576A9116E9AC700E8ED2F /* SBHostOS.cpp */; };
 		9A3576A8116E9AB700E8ED2F /* SBHostOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A3576A7116E9AB700E8ED2F /* SBHostOS.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		AFB2F2F621B71AF30078DEF1 /* SBInitializerOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AFB2F2F421B71AE90078DEF1 /* SBInitializerOptions.cpp */; };
-		4C38996D21BA11CA002BAEF4 /* SBInitializerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C38996C21BA11CA002BAEF4 /* SBInitializerOptions.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		9AC703AF117675410086C050 /* SBInstruction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC703AE117675410086C050 /* SBInstruction.cpp */; };
 		9AC7038E117674FB0086C050 /* SBInstruction.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AC7038D117674EB0086C050 /* SBInstruction.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		9AC703B1117675490086C050 /* SBInstructionList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AC703B0117675490086C050 /* SBInstructionList.cpp */; };
@@ -2801,8 +2799,6 @@
 		9A3576A9116E9AC700E8ED2F /* SBHostOS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBHostOS.cpp; path = source/API/SBHostOS.cpp; sourceTree = "<group>"; };
 		9A3576A7116E9AB700E8ED2F /* SBHostOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBHostOS.h; path = include/lldb/API/SBHostOS.h; sourceTree = "<group>"; };
 		2611FF00142D83060017FEA3 /* SBHostOS.i */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c.preprocessed; path = SBHostOS.i; sourceTree = "<group>"; };
-		AFB2F2F421B71AE90078DEF1 /* SBInitializerOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBInitializerOptions.cpp; path = source/API/SBInitializerOptions.cpp; sourceTree = "<group>"; };
-		4C38996C21BA11CA002BAEF4 /* SBInitializerOptions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBInitializerOptions.h; path = include/lldb/API/SBInitializerOptions.h; sourceTree = "<group>"; };
 		9AC703AE117675410086C050 /* SBInstruction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBInstruction.cpp; path = source/API/SBInstruction.cpp; sourceTree = "<group>"; };
 		9AC7038D117674EB0086C050 /* SBInstruction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SBInstruction.h; path = include/lldb/API/SBInstruction.h; sourceTree = "<group>"; };
 		2611FF02142D83060017FEA3 /* SBInstruction.i */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c.preprocessed; path = SBInstruction.i; sourceTree = "<group>"; };
@@ -4362,8 +4358,6 @@
 				26DE205C1161901400A093E2 /* SBFunction.cpp */,
 				9A3576A7116E9AB700E8ED2F /* SBHostOS.h */,
 				9A3576A9116E9AC700E8ED2F /* SBHostOS.cpp */,
-				AFB2F2F421B71AE90078DEF1 /* SBInitializerOptions.cpp */,
-				4C38996C21BA11CA002BAEF4 /* SBInitializerOptions.h */,
 				9AC7038D117674EB0086C050 /* SBInstruction.h */,
 				9AC703AE117675410086C050 /* SBInstruction.cpp */,
 				9AC7038F117675270086C050 /* SBInstructionList.h */,
@@ -7079,7 +7073,6 @@
 				4C56543519D2297A002E9C44 /* SBThreadPlan.h in Headers */,
 				263C493A178B50CF0070F12D /* SBModuleSpec.h in Headers */,
 				2617447A11685869005ADD65 /* SBType.h in Headers */,
-				4C38996D21BA11CA002BAEF4 /* SBInitializerOptions.h in Headers */,
 				9475C18914E5EA08001BFC6D /* SBTypeCategory.h in Headers */,
 				941BCC7F14E48C4000BB969C /* SBTypeFilter.h in Headers */,
 				941BCC8014E48C4000BB969C /* SBTypeFormat.h in Headers */,
@@ -7902,7 +7895,6 @@
 				26680336116005EF008E1FE4 /* SBBreakpointLocation.cpp in Sources */,
 				26680337116005F1008E1FE4 /* SBBreakpoint.cpp in Sources */,
 				26DE204511618ADA00A093E2 /* SBAddress.cpp in Sources */,
-				AFB2F2F621B71AF30078DEF1 /* SBInitializerOptions.cpp in Sources */,
 				26DE204711618AED00A093E2 /* SBSymbolContext.cpp in Sources */,
 				26DE204D11618E7A00A093E2 /* SBModule.cpp in Sources */,
 				26DE205D1161901400A093E2 /* SBFunction.cpp in Sources */,

Modified: lldb/trunk/scripts/interface/SBDebugger.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBDebugger.i?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/scripts/interface/SBDebugger.i (original)
+++ lldb/trunk/scripts/interface/SBDebugger.i Thu Feb 21 14:26:16 2019
@@ -122,8 +122,8 @@ public:
     static void
     Initialize();
 
-    static void
-    Initialize(lldb::SBInitializerOptions& options);
+    static SBError
+    InitializeWithErrorHandling();
 
     static void
     Terminate();

Removed: lldb/trunk/scripts/interface/SBInitializerOptions.i
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/interface/SBInitializerOptions.i?rev=354630&view=auto
==============================================================================
--- lldb/trunk/scripts/interface/SBInitializerOptions.i (original)
+++ lldb/trunk/scripts/interface/SBInitializerOptions.i (removed)
@@ -1,23 +0,0 @@
-//===-- SWIG Interface for SBInitializerOptions -----------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-namespace lldb {
-
-class SBInitializerOptions
-{
-public:
-  SBInitializerOptions ();
-  SBInitializerOptions (const lldb::SBInitializerOptions &rhs);
-  ~SBInitializerOptions();
-
-  void SetCaptureReproducer(bool b);
-  void SetReplayReproducer(bool b);
-  void SetReproducerPath(const char* path);
-};
-
-} // namespace lldb

Modified: lldb/trunk/scripts/lldb.swig
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/lldb.swig?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/scripts/lldb.swig (original)
+++ lldb/trunk/scripts/lldb.swig Thu Feb 21 14:26:16 2019
@@ -202,7 +202,6 @@ EMBED_VERSION(SWIG_VERSION)
 %include "./interface/SBFrame.i"
 %include "./interface/SBFunction.i"
 %include "./interface/SBHostOS.i"
-%include "./interface/SBInitializerOptions.i"
 %include "./interface/SBInstruction.i"
 %include "./interface/SBInstructionList.i"
 %include "./interface/SBLanguageRuntime.i"

Modified: lldb/trunk/source/API/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/CMakeLists.txt?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/API/CMakeLists.txt (original)
+++ lldb/trunk/source/API/CMakeLists.txt Thu Feb 21 14:26:16 2019
@@ -34,7 +34,6 @@ add_lldb_library(liblldb SHARED
   SBFrame.cpp
   SBFunction.cpp
   SBHostOS.cpp
-  SBInitializerOptions.cpp
   SBInstruction.cpp
   SBInstructionList.cpp
   SBLanguageRuntime.cpp

Modified: lldb/trunk/source/API/SBDebugger.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBDebugger.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/API/SBDebugger.cpp (original)
+++ lldb/trunk/source/API/SBDebugger.cpp Thu Feb 21 14:26:16 2019
@@ -124,11 +124,10 @@ SBDebugger &SBDebugger::operator=(const
 }
 
 void SBDebugger::Initialize() {
-  SBInitializerOptions options;
-  SBDebugger::Initialize(options);
+  SBError ignored = SBDebugger::InitializeWithErrorHandling();
 }
 
-lldb::SBError SBDebugger::Initialize(SBInitializerOptions &options) {
+lldb::SBError SBDebugger::InitializeWithErrorHandling() {
   Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
 
   if (log)
@@ -136,8 +135,7 @@ lldb::SBError SBDebugger::Initialize(SBI
 
   SBError error;
   if (auto e = g_debugger_lifetime->Initialize(
-          llvm::make_unique<SystemInitializerFull>(), *options.m_opaque_up,
-          LoadPlugin)) {
+          llvm::make_unique<SystemInitializerFull>(), LoadPlugin)) {
     error.SetError(Status(std::move(e)));
   }
   return error;

Removed: lldb/trunk/source/API/SBInitializerOptions.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBInitializerOptions.cpp?rev=354630&view=auto
==============================================================================
--- lldb/trunk/source/API/SBInitializerOptions.cpp (original)
+++ lldb/trunk/source/API/SBInitializerOptions.cpp (removed)
@@ -1,48 +0,0 @@
-//===-- SBInitializerOptions.cpp --------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "lldb/API/SBInitializerOptions.h"
-#include "lldb/Initialization/SystemInitializer.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-SBInitializerOptions::SBInitializerOptions(const SBInitializerOptions &rhs) {
-  m_opaque_up.reset(new InitializerOptions());
-  *(m_opaque_up.get()) = rhs.ref();
-}
-
-const SBInitializerOptions &SBInitializerOptions::
-operator=(const SBInitializerOptions &rhs) {
-  if (this != &rhs) {
-    this->ref() = rhs.ref();
-  }
-  return *this;
-}
-
-SBInitializerOptions::~SBInitializerOptions() {}
-
-SBInitializerOptions::SBInitializerOptions() {
-  m_opaque_up.reset(new InitializerOptions());
-}
-
-void SBInitializerOptions::SetCaptureReproducer(bool b) {
-  m_opaque_up->reproducer_capture = b;
-}
-
-void SBInitializerOptions::SetReplayReproducer(bool b) {
-  m_opaque_up->reproducer_replay = b;
-}
-
-void SBInitializerOptions::SetReproducerPath(const char *path) {
-  m_opaque_up->reproducer_path = path;
-}
-
-InitializerOptions &SBInitializerOptions::ref() const {
-  return *(m_opaque_up.get());
-}

Modified: lldb/trunk/source/API/SBReproducer.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBReproducer.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/API/SBReproducer.cpp (original)
+++ lldb/trunk/source/API/SBReproducer.cpp Thu Feb 21 14:26:16 2019
@@ -30,19 +30,42 @@ using namespace lldb_private::repro;
 
 SBRegistry::SBRegistry() {}
 
-bool SBReproducer::Replay() {
+const char *SBReproducer::Capture(const char *path) {
+  static std::string error;
+  if (auto e =
+          Reproducer::Initialize(ReproducerMode::Capture, FileSpec(path))) {
+    error = llvm::toString(std::move(e));
+    return error.c_str();
+  }
+  return nullptr;
+}
+
+const char *SBReproducer::Replay(const char *path) {
+  static std::string error;
+  if (auto e = Reproducer::Initialize(ReproducerMode::Replay, FileSpec(path))) {
+    error = llvm::toString(std::move(e));
+    return error.c_str();
+  }
+
   repro::Loader *loader = repro::Reproducer::Instance().GetLoader();
-  if (!loader)
-    return false;
+  if (!loader) {
+    error = "unable to get replay loader.";
+    return error.c_str();
+  }
 
+  // FIXME: Enable the following code once the SB reproducer has landed.
+#if 0
   FileSpec file = loader->GetFile<SBInfo>();
-  if (!file)
-    return false;
+  if (!file) {
+    error = "unable to get replay data from reproducer.";
+    return error.c_str();
+  }
 
   SBRegistry registry;
   registry.Replay(file);
+#endif
 
-  return true;
+  return nullptr;
 }
 
 char lldb_private::repro::SBProvider::ID = 0;

Modified: lldb/trunk/source/API/SystemInitializerFull.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SystemInitializerFull.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/API/SystemInitializerFull.cpp (original)
+++ lldb/trunk/source/API/SystemInitializerFull.cpp Thu Feb 21 14:26:16 2019
@@ -265,9 +265,8 @@ SystemInitializerFull::SystemInitializer
 
 SystemInitializerFull::~SystemInitializerFull() {}
 
-llvm::Error
-SystemInitializerFull::Initialize(const InitializerOptions &options) {
-  if (auto e = SystemInitializerCommon::Initialize(options))
+llvm::Error SystemInitializerFull::Initialize() {
+  if (auto e = SystemInitializerCommon::Initialize())
     return e;
 
   breakpad::ObjectFileBreakpad::Initialize();

Modified: lldb/trunk/source/API/SystemInitializerFull.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SystemInitializerFull.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/API/SystemInitializerFull.h (original)
+++ lldb/trunk/source/API/SystemInitializerFull.h Thu Feb 21 14:26:16 2019
@@ -25,7 +25,7 @@ public:
   SystemInitializerFull();
   ~SystemInitializerFull() override;
 
-  llvm::Error Initialize(const InitializerOptions &options) override;
+  llvm::Error Initialize() override;
   void Terminate() override;
 
 private:

Modified: lldb/trunk/source/Initialization/SystemInitializerCommon.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Initialization/SystemInitializerCommon.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/Initialization/SystemInitializerCommon.cpp (original)
+++ lldb/trunk/source/Initialization/SystemInitializerCommon.cpp Thu Feb 21 14:26:16 2019
@@ -41,8 +41,7 @@ SystemInitializerCommon::SystemInitializ
 
 SystemInitializerCommon::~SystemInitializerCommon() {}
 
-llvm::Error
-SystemInitializerCommon::Initialize(const InitializerOptions &options) {
+llvm::Error SystemInitializerCommon::Initialize() {
 #if defined(_MSC_VER)
   const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG");
   if (disable_crash_dialog_var &&
@@ -65,15 +64,12 @@ SystemInitializerCommon::Initialize(cons
   }
 #endif
 
-  // Initialize the reproducer.
-  ReproducerMode mode = ReproducerMode::Off;
-  if (options.reproducer_capture)
-    mode = ReproducerMode::Capture;
-  if (options.reproducer_replay)
-    mode = ReproducerMode::Replay;
-
-  if (auto e = Reproducer::Initialize(mode, FileSpec(options.reproducer_path)))
-    return e;
+  // If the reproducer wasn't initialized before, we can safely assume it's
+  // off.
+  if (!Reproducer::Initialized()) {
+    if (auto e = Reproducer::Initialize(ReproducerMode::Off, llvm::None))
+      return e;
+  }
 
   // Initialize the file system.
   auto &r = repro::Reproducer::Instance();

Modified: lldb/trunk/source/Initialization/SystemLifetimeManager.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Initialization/SystemLifetimeManager.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/Initialization/SystemLifetimeManager.cpp (original)
+++ lldb/trunk/source/Initialization/SystemLifetimeManager.cpp Thu Feb 21 14:26:16 2019
@@ -25,7 +25,7 @@ SystemLifetimeManager::~SystemLifetimeMa
 
 llvm::Error SystemLifetimeManager::Initialize(
     std::unique_ptr<SystemInitializer> initializer,
-    const InitializerOptions &options, LoadPluginCallbackType plugin_callback) {
+    LoadPluginCallbackType plugin_callback) {
   std::lock_guard<std::recursive_mutex> guard(m_mutex);
   if (!m_initialized) {
     assert(!m_initializer && "Attempting to call "
@@ -34,7 +34,7 @@ llvm::Error SystemLifetimeManager::Initi
     m_initialized = true;
     m_initializer = std::move(initializer);
 
-    if (auto e = m_initializer->Initialize(options))
+    if (auto e = m_initializer->Initialize())
       return e;
 
     Debugger::Initialize(plugin_callback);

Modified: lldb/trunk/source/Utility/Reproducer.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/Reproducer.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/source/Utility/Reproducer.cpp (original)
+++ lldb/trunk/source/Utility/Reproducer.cpp Thu Feb 21 14:26:16 2019
@@ -51,6 +51,8 @@ llvm::Error Reproducer::Initialize(Repro
   return Error::success();
 }
 
+bool Reproducer::Initialized() { return InstanceImpl().operator bool(); }
+
 void Reproducer::Terminate() {
   lldbassert(InstanceImpl() && "Already terminated.");
   InstanceImpl().reset();

Modified: lldb/trunk/tools/driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/driver/Driver.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/driver/Driver.cpp (original)
+++ lldb/trunk/tools/driver/Driver.cpp Thu Feb 21 14:26:16 2019
@@ -13,6 +13,7 @@
 #include "lldb/API/SBDebugger.h"
 #include "lldb/API/SBHostOS.h"
 #include "lldb/API/SBLanguageRuntime.h"
+#include "lldb/API/SBReproducer.h"
 #include "lldb/API/SBStream.h"
 #include "lldb/API/SBStringList.h"
 
@@ -888,26 +889,31 @@ main(int argc, char const *argv[])
                          << '\n';
   }
 
-  SBInitializerOptions options;
   if (auto *arg = input_args.getLastArg(OPT_capture)) {
     auto arg_value = arg->getValue();
-    options.SetReproducerPath(arg_value);
-    options.SetCaptureReproducer(true);
+    const char *error = SBReproducer::Capture(arg_value);
+    if (error) {
+      WithColor::error() << "reproducer capture failed: " << error << '\n';
+      return 1;
+    }
   }
 
   if (auto *arg = input_args.getLastArg(OPT_replay)) {
     auto arg_value = arg->getValue();
-    options.SetReplayReproducer(true);
-    options.SetReproducerPath(arg_value);
+    const char *error = SBReproducer::Replay(arg_value);
+    if (error) {
+      WithColor::error() << "reproducer replay failed: " << error << '\n';
+      return 1;
+    }
+    // FIXME: Return once SBReproducer::Replay actually performs the replay.
   }
 
-  SBError error = SBDebugger::Initialize(options);
+  SBError error = SBDebugger::InitializeWithErrorHandling();
   if (error.Fail()) {
     WithColor::error() << "initialization failed: " << error.GetCString()
                        << '\n';
     return 1;
   }
-
   SBHostOS::ThreadCreated("<lldb.driver.main-thread>");
 
   signal(SIGINT, sigint_handler);

Modified: lldb/trunk/tools/lldb-server/SystemInitializerLLGS.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-server/SystemInitializerLLGS.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-server/SystemInitializerLLGS.cpp (original)
+++ lldb/trunk/tools/lldb-server/SystemInitializerLLGS.cpp Thu Feb 21 14:26:16 2019
@@ -21,9 +21,8 @@ using HostObjectFile = ObjectFileELF;
 
 using namespace lldb_private;
 
-llvm::Error
-SystemInitializerLLGS::Initialize(const InitializerOptions &options) {
-  if (auto e = SystemInitializerCommon::Initialize(options))
+llvm::Error SystemInitializerLLGS::Initialize() {
+  if (auto e = SystemInitializerCommon::Initialize())
     return e;
 
   HostObjectFile::Initialize();

Modified: lldb/trunk/tools/lldb-server/SystemInitializerLLGS.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-server/SystemInitializerLLGS.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-server/SystemInitializerLLGS.h (original)
+++ lldb/trunk/tools/lldb-server/SystemInitializerLLGS.h Thu Feb 21 14:26:16 2019
@@ -14,8 +14,7 @@
 
 class SystemInitializerLLGS : public lldb_private::SystemInitializerCommon {
 public:
-  llvm::Error
-  Initialize(const lldb_private::InitializerOptions &options) override;
+  llvm::Error Initialize() override;
   void Terminate() override;
 };
 

Modified: lldb/trunk/tools/lldb-server/lldb-server.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-server/lldb-server.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-server/lldb-server.cpp (original)
+++ lldb/trunk/tools/lldb-server/lldb-server.cpp Thu Feb 21 14:26:16 2019
@@ -38,7 +38,7 @@ int main_platform(int argc, char *argv[]
 
 static void initialize() {
   if (auto e = g_debugger_lifetime->Initialize(
-          llvm::make_unique<SystemInitializerLLGS>(), {}, nullptr))
+          llvm::make_unique<SystemInitializerLLGS>(), nullptr))
     llvm::consumeError(std::move(e));
 }
 

Modified: lldb/trunk/tools/lldb-test/SystemInitializerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-test/SystemInitializerTest.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-test/SystemInitializerTest.cpp (original)
+++ lldb/trunk/tools/lldb-test/SystemInitializerTest.cpp Thu Feb 21 14:26:16 2019
@@ -112,9 +112,8 @@ SystemInitializerTest::SystemInitializer
 
 SystemInitializerTest::~SystemInitializerTest() {}
 
-llvm::Error
-SystemInitializerTest::Initialize(const InitializerOptions &options) {
-  if (auto e = SystemInitializerCommon::Initialize(options))
+llvm::Error SystemInitializerTest::Initialize() {
+  if (auto e = SystemInitializerCommon::Initialize())
     return e;
 
   breakpad::ObjectFileBreakpad::Initialize();

Modified: lldb/trunk/tools/lldb-test/SystemInitializerTest.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-test/SystemInitializerTest.h?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-test/SystemInitializerTest.h (original)
+++ lldb/trunk/tools/lldb-test/SystemInitializerTest.h Thu Feb 21 14:26:16 2019
@@ -25,7 +25,7 @@ public:
   SystemInitializerTest();
   ~SystemInitializerTest() override;
 
-  llvm::Error Initialize(const InitializerOptions &options) override;
+  llvm::Error Initialize() override;
   void Terminate() override;
 };
 

Modified: lldb/trunk/tools/lldb-test/lldb-test.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/lldb-test/lldb-test.cpp?rev=354631&r1=354630&r2=354631&view=diff
==============================================================================
--- lldb/trunk/tools/lldb-test/lldb-test.cpp (original)
+++ lldb/trunk/tools/lldb-test/lldb-test.cpp Thu Feb 21 14:26:16 2019
@@ -963,7 +963,7 @@ int main(int argc, const char *argv[]) {
 
   SystemLifetimeManager DebuggerLifetime;
   if (auto e = DebuggerLifetime.Initialize(
-          llvm::make_unique<SystemInitializerTest>(), {}, nullptr)) {
+          llvm::make_unique<SystemInitializerTest>(), nullptr)) {
     WithColor::error() << "initialization failed: " << toString(std::move(e))
                        << '\n';
     return 1;




More information about the lldb-commits mailing list