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 60f7d5458b23..3317265aae63 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 6b8ea1f36139..ff2000b0f0b6 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 ecc1e2dfa74d..c7de7e595c79 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 { -public: - SBDebuggerContextManager() { SBDebugger::Initialize(); } + inline static int instance_count; - ~SBDebuggerContextManager() { SBDebugger::Terminate(); } +public: + SBDebuggerContextManager() { ++instance_count; } + + ~SBDebuggerContextManager() { + --instance_count; + if (instance_count == 0) + SBDebugger::Terminate(); + } }; } // namespace lldb_fuzzer