JDevlieghere updated this revision to Diff 303581. JDevlieghere added a comment.
clang-format CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90987/new/ https://reviews.llvm.org/D90987 Files: lldb/source/API/SystemInitializerFull.cpp Index: lldb/source/API/SystemInitializerFull.cpp =================================================================== --- lldb/source/API/SystemInitializerFull.cpp +++ lldb/source/API/SystemInitializerFull.cpp @@ -15,6 +15,7 @@ #include "lldb/Initialization/SystemInitializerCommon.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Target/ProcessTrace.h" +#include "lldb/Utility/Reproducer.h" #include "lldb/Utility/Timer.h" #include "llvm/Support/TargetSelect.h" @@ -23,6 +24,7 @@ #include "llvm/ExecutionEngine/MCJIT.h" #pragma clang diagnostic pop +#include <cstdlib> #include <string> #define LLDB_PLUGIN(p) LLDB_PLUGIN_DECLARE(p) @@ -34,8 +36,16 @@ SystemInitializerFull::~SystemInitializerFull() = default; llvm::Error SystemInitializerFull::Initialize() { - if (auto e = SystemInitializerCommon::Initialize()) - return e; + llvm::Error error = SystemInitializerCommon::Initialize(); + if (error) { + // During active replay, the ::Initialize call is replayed like any other + // SB API call and the return value is ignored. Since we can't intercept + // this, we terminate here before the uninitialized debugger inevitably + // crashes. + if (repro::Reproducer::Instance().IsReplaying()) + std::_Exit(EXIT_FAILURE); + return error; + } // Initialize LLVM and Clang llvm::InitializeAllTargets();
Index: lldb/source/API/SystemInitializerFull.cpp =================================================================== --- lldb/source/API/SystemInitializerFull.cpp +++ lldb/source/API/SystemInitializerFull.cpp @@ -15,6 +15,7 @@ #include "lldb/Initialization/SystemInitializerCommon.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Target/ProcessTrace.h" +#include "lldb/Utility/Reproducer.h" #include "lldb/Utility/Timer.h" #include "llvm/Support/TargetSelect.h" @@ -23,6 +24,7 @@ #include "llvm/ExecutionEngine/MCJIT.h" #pragma clang diagnostic pop +#include <cstdlib> #include <string> #define LLDB_PLUGIN(p) LLDB_PLUGIN_DECLARE(p) @@ -34,8 +36,16 @@ SystemInitializerFull::~SystemInitializerFull() = default; llvm::Error SystemInitializerFull::Initialize() { - if (auto e = SystemInitializerCommon::Initialize()) - return e; + llvm::Error error = SystemInitializerCommon::Initialize(); + if (error) { + // During active replay, the ::Initialize call is replayed like any other + // SB API call and the return value is ignored. Since we can't intercept + // this, we terminate here before the uninitialized debugger inevitably + // crashes. + if (repro::Reproducer::Instance().IsReplaying()) + std::_Exit(EXIT_FAILURE); + return error; + } // Initialize LLVM and Clang llvm::InitializeAllTargets();
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits