diff --git a/lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp b/lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp index 60f7d5458b234..3317265aae638 100644 --- a/lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp +++ b/lldb/tools/lldb-fuzzer/lldb-commandinterpreter-fuzzer/lldb-commandinterpreter-fuzzer.cpp @@ -19,8 +19,14 @@ using namespace lldb; using namespace lldb_fuzzer; +extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { + SBDebugger::Initialize(); + return 0; +} + extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) { - static SBDebuggerContextManager ctx_manager = SBDebuggerContextManager(); + static thread_local SBDebuggerContextManager ctx_manager = + SBDebuggerContextManager(); // Convert the data into a null-terminated string std::string str((char *)data, size); diff --git a/lldb/tools/lldb-fuzzer/lldb-target-fuzzer/lldb-target-fuzzer.cpp b/lldb/tools/lldb-fuzzer/lldb-target-fuzzer/lldb-target-fuzzer.cpp index 6b8ea1f361398..ff2000b0f0b6d 100644 --- a/lldb/tools/lldb-fuzzer/lldb-target-fuzzer/lldb-target-fuzzer.cpp +++ b/lldb/tools/lldb-fuzzer/lldb-target-fuzzer/lldb-target-fuzzer.cpp @@ -16,8 +16,14 @@ using namespace lldb; using namespace lldb_fuzzer; using namespace llvm; +extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { + SBDebugger::Initialize(); + return 0; +} + extern "C" int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) { - static SBDebuggerContextManager ctx_manager = SBDebuggerContextManager(); + static thread_local SBDebuggerContextManager ctx_manager = + SBDebuggerContextManager(); std::unique_ptr file = TempFile::Create(data, size); if (!file) diff --git a/lldb/tools/lldb-fuzzer/utils/SBDebuggerContextManager.h b/lldb/tools/lldb-fuzzer/utils/SBDebuggerContextManager.h index ecc1e2dfa74d9..c7de7e595c796 100644 --- a/lldb/tools/lldb-fuzzer/utils/SBDebuggerContextManager.h +++ b/lldb/tools/lldb-fuzzer/utils/SBDebuggerContextManager.h @@ -13,10 +13,16 @@ using namespace lldb; namespace lldb_fuzzer { class SBDebuggerContextManager { + inline static int instance_count; + public: - SBDebuggerContextManager() { SBDebugger::Initialize(); } + SBDebuggerContextManager() { ++instance_count; } - ~SBDebuggerContextManager() { SBDebugger::Terminate(); } + ~SBDebuggerContextManager() { + --instance_count; + if (instance_count == 0) + SBDebugger::Terminate(); + } }; } // namespace lldb_fuzzer