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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits