Index: include/lldb/Core/Debugger.h =================================================================== --- include/lldb/Core/Debugger.h +++ include/lldb/Core/Debugger.h @@ -34,6 +34,8 @@ #include "lldb/Target/TargetList.h" #include "lldb/lldb-public.h" +#include "llvm/Support/Threading.h" + namespace llvm { namespace sys { class DynamicLibrary; @@ -374,7 +376,7 @@ HostThread m_io_handler_thread; Broadcaster m_sync_broadcaster; lldb::ListenerSP m_forward_listener_sp; - std::once_flag m_clear_once; + llvm::once_flag m_clear_once; //---------------------------------------------------------------------- // Events for m_sync_broadcaster Index: source/Commands/CommandObjectPlatform.cpp =================================================================== --- source/Commands/CommandObjectPlatform.cpp +++ source/Commands/CommandObjectPlatform.cpp @@ -29,6 +29,7 @@ #include "lldb/Target/Process.h" #include "llvm/ADT/SmallString.h" +#include "llvm/Support/Threading.h" using namespace lldb; using namespace lldb_private; @@ -1248,8 +1249,8 @@ public: CommandOptions() : Options(), match_info(), show_args(false), verbose(false) { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { PosixPlatformCommandOptionValidator *posix_validator = new PosixPlatformCommandOptionValidator(); for (auto &Option : g_platform_process_list_options) { Index: source/Core/Debugger.cpp =================================================================== --- source/Core/Debugger.cpp +++ source/Core/Debugger.cpp @@ -17,6 +17,7 @@ // Other libraries and framework includes #include "llvm/ADT/StringRef.h" #include "llvm/Support/DynamicLibrary.h" +#include "llvm/Support/Threading.h" // Project includes #include "lldb/Core/FormatEntity.h" @@ -762,7 +763,7 @@ // static void Debugger::Destroy(lldb::DebuggerSP &debugger_sp); // static void Debugger::Terminate(); //---------------------------------------------------------------------- - std::call_once(m_clear_once, [this]() { + llvm::call_once(m_clear_once, [this]() { ClearIOHandlers(); StopIOHandlerThread(); StopEventHandlerThread(); Index: source/Core/ModuleList.cpp =================================================================== --- source/Core/ModuleList.cpp +++ source/Core/ModuleList.cpp @@ -26,6 +26,8 @@ #include "lldb/Symbol/SymbolFile.h" #include "lldb/Symbol/VariableList.h" +#include "llvm/Support/Threading.h" + using namespace lldb; using namespace lldb_private; @@ -644,8 +646,8 @@ static ModuleList &GetSharedModuleList() { static ModuleList *g_shared_module_list = nullptr; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { // NOTE: Intentionally leak the module list so a program doesn't have to // cleanup all modules and object files as it exits. This just wastes time // doing a bunch of cleanup that isn't required. Index: source/Host/common/Editline.cpp =================================================================== --- source/Host/common/Editline.cpp +++ source/Host/common/Editline.cpp @@ -22,6 +22,8 @@ #include "lldb/Utility/SelectHelper.h" #include "lldb/Utility/StreamString.h" +#include "llvm/Support/Threading.h" + using namespace lldb_private; using namespace lldb_private::line_editor; @@ -1151,8 +1153,8 @@ if (term_fd != -1) { static std::mutex *g_init_terminal_fds_mutex_ptr = nullptr; static std::set *g_init_terminal_fds_ptr = nullptr; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, [&]() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, [&]() { g_init_terminal_fds_mutex_ptr = new std::mutex(); // NOTE: Leak to avoid C++ destructor chain issues g_init_terminal_fds_ptr = new std::set(); // NOTE: Leak to avoid Index: source/Host/common/HostInfoBase.cpp =================================================================== --- source/Host/common/HostInfoBase.cpp +++ source/Host/common/HostInfoBase.cpp @@ -22,9 +22,10 @@ #include "llvm/Support/Host.h" #include "llvm/Support/Path.h" #include "llvm/Support/ScopedPrinter.h" +#include "llvm/Support/Threading.h" #include "llvm/Support/raw_ostream.h" -#include // std::once +#include #include using namespace lldb; @@ -79,8 +80,8 @@ } uint32_t HostInfoBase::GetNumberCPUS() { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { g_fields->m_number_cpus = std::thread::hardware_concurrency(); }); return g_fields->m_number_cpus; @@ -89,8 +90,8 @@ uint32_t HostInfoBase::GetMaxThreadNameLength() { return 0; } llvm::StringRef HostInfoBase::GetVendorString() { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { g_fields->m_vendor_string = HostInfo::GetArchitecture().GetTriple().getVendorName().str(); }); @@ -98,8 +99,8 @@ } llvm::StringRef HostInfoBase::GetOSString() { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { g_fields->m_os_string = std::move(HostInfo::GetArchitecture().GetTriple().getOSName()); }); @@ -107,8 +108,8 @@ } llvm::StringRef HostInfoBase::GetTargetTriple() { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { g_fields->m_host_triple = HostInfo::GetArchitecture().GetTriple().getTriple(); }); @@ -116,8 +117,8 @@ } const ArchSpec &HostInfoBase::GetArchitecture(ArchitectureKind arch_kind) { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { HostInfo::ComputeHostArchitectureSupport(g_fields->m_host_arch_32, g_fields->m_host_arch_64); }); @@ -144,9 +145,9 @@ FileSpec *result = nullptr; switch (type) { case lldb::ePathTypeLLDBShlibDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeSharedLibraryDirectory(g_fields->m_lldb_so_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -158,9 +159,9 @@ result = &g_fields->m_lldb_so_dir; } break; case lldb::ePathTypeSupportExecutableDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeSupportExeDirectory( g_fields->m_lldb_support_exe_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -173,9 +174,9 @@ result = &g_fields->m_lldb_support_exe_dir; } break; case lldb::ePathTypeHeaderDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeHeaderDirectory(g_fields->m_lldb_headers_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (log) @@ -186,9 +187,9 @@ result = &g_fields->m_lldb_headers_dir; } break; case lldb::ePathTypePythonDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputePythonDirectory(g_fields->m_lldb_python_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); if (log) @@ -199,9 +200,9 @@ result = &g_fields->m_lldb_python_dir; } break; case lldb::ePathTypeClangDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeClangDirectory(g_fields->m_lldb_clang_resource_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -214,9 +215,9 @@ result = &g_fields->m_lldb_clang_resource_dir; } break; case lldb::ePathTypeLLDBSystemPlugins: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeSystemPluginsDirectory( g_fields->m_lldb_system_plugin_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -229,9 +230,9 @@ result = &g_fields->m_lldb_system_plugin_dir; } break; case lldb::ePathTypeLLDBUserPlugins: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeUserPluginsDirectory( g_fields->m_lldb_user_plugin_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -244,9 +245,9 @@ result = &g_fields->m_lldb_user_plugin_dir; } break; case lldb::ePathTypeLLDBTempSystemDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeProcessTempFileDirectory( g_fields->m_lldb_process_tmp_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); @@ -259,9 +260,9 @@ result = &g_fields->m_lldb_process_tmp_dir; } break; case lldb::ePathTypeGlobalLLDBTempSystemDir: { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); static bool success = false; - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { success = HostInfo::ComputeGlobalTempFileDirectory( g_fields->m_lldb_global_tmp_dir); Log *log = lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST); Index: source/Host/linux/HostInfoLinux.cpp =================================================================== --- source/Host/linux/HostInfoLinux.cpp +++ source/Host/linux/HostInfoLinux.cpp @@ -10,6 +10,8 @@ #include "lldb/Host/linux/HostInfoLinux.h" #include "lldb/Core/Log.h" +#include "llvm/Support/Threading.h" + #include #include #include @@ -44,8 +46,8 @@ bool HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update) { static bool success = false; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { struct utsname un; if (uname(&un) == 0) { @@ -100,8 +102,8 @@ llvm::StringRef HostInfoLinux::GetDistributionId() { // Try to run 'lbs_release -i', and use that response // for the distribution id. - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_HOST)); if (log) Index: source/Host/windows/HostInfoWindows.cpp =================================================================== --- source/Host/windows/HostInfoWindows.cpp +++ source/Host/windows/HostInfoWindows.cpp @@ -18,6 +18,7 @@ #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" +#include "llvm/Support/Threading.h" #include "llvm/Support/raw_ostream.h" using namespace lldb_private; @@ -90,8 +91,8 @@ } FileSpec HostInfoWindows::GetProgramFileSpec() { - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { std::vector buffer(PATH_MAX); ::GetModuleFileNameW(NULL, buffer.data(), buffer.size()); std::string path; Index: source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp =================================================================== --- source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp +++ source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp @@ -21,6 +21,7 @@ #include "clang/Sema/Lookup.h" #include "clang/Serialization/ASTReader.h" #include "llvm/Support/Path.h" +#include "llvm/Support/Threading.h" // Project includes #include "ClangModulesDeclVendor.h" @@ -143,9 +144,9 @@ static FileSpec GetResourceDir() { static FileSpec g_cached_resource_dir; - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { HostInfo::GetLLDBPath(lldb::ePathTypeClangDir, g_cached_resource_dir); }); Index: source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp =================================================================== --- source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -21,6 +21,7 @@ // Other libraries and framework includes #include "llvm/ADT/StringRef.h" +#include "llvm/Support/Threading.h" // Project includes #include "lldb/Core/FastDemangle.h" @@ -1036,10 +1037,10 @@ } lldb::TypeCategoryImplSP CPlusPlusLanguage::GetFormatters() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static TypeCategoryImplSP g_category; - std::call_once(g_initialize, [this]() -> void { + llvm::call_once(g_initialize, [this]() -> void { DataVisualization::Categories::GetCategory(GetPluginName(), g_category); if (g_category) { LoadLibCxxFormatters(g_category); @@ -1052,11 +1053,11 @@ HardcodedFormatters::HardcodedSummaryFinder CPlusPlusLanguage::GetHardcodedSummaries() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static ConstString g_vectortypes("VectorTypes"); static HardcodedFormatters::HardcodedSummaryFinder g_formatters; - std::call_once(g_initialize, []() -> void { + llvm::call_once(g_initialize, []() -> void { g_formatters.push_back( [](lldb_private::ValueObject &valobj, lldb::DynamicValueType, FormatManager &) -> TypeSummaryImpl::SharedPointer { @@ -1116,11 +1117,11 @@ HardcodedFormatters::HardcodedSyntheticFinder CPlusPlusLanguage::GetHardcodedSynthetics() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static ConstString g_vectortypes("VectorTypes"); static HardcodedFormatters::HardcodedSyntheticFinder g_formatters; - std::call_once(g_initialize, []() -> void { + llvm::call_once(g_initialize, []() -> void { g_formatters.push_back([](lldb_private::ValueObject &valobj, lldb::DynamicValueType, FormatManager & Index: source/Plugins/Language/Go/GoLanguage.cpp =================================================================== --- source/Plugins/Language/Go/GoLanguage.cpp +++ source/Plugins/Language/Go/GoLanguage.cpp @@ -15,6 +15,7 @@ // Other libraries and framework includes #include "llvm/ADT/StringRef.h" +#include "llvm/Support/Threading.h" // Project includes #include "GoLanguage.h" @@ -62,10 +63,10 @@ HardcodedFormatters::HardcodedSummaryFinder GoLanguage::GetHardcodedSummaries() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static HardcodedFormatters::HardcodedSummaryFinder g_formatters; - std::call_once(g_initialize, []() -> void { + llvm::call_once(g_initialize, []() -> void { g_formatters.push_back( [](lldb_private::ValueObject &valobj, lldb::DynamicValueType, FormatManager &) -> TypeSummaryImpl::SharedPointer { @@ -104,10 +105,10 @@ HardcodedFormatters::HardcodedSyntheticFinder GoLanguage::GetHardcodedSynthetics() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static HardcodedFormatters::HardcodedSyntheticFinder g_formatters; - std::call_once(g_initialize, []() -> void { + llvm::call_once(g_initialize, []() -> void { g_formatters.push_back( [](lldb_private::ValueObject &valobj, lldb::DynamicValueType, FormatManager &fmt_mgr) -> SyntheticChildren::SharedPointer { Index: source/Plugins/Language/Java/JavaLanguage.cpp =================================================================== --- source/Plugins/Language/Java/JavaLanguage.cpp +++ source/Plugins/Language/Java/JavaLanguage.cpp @@ -15,6 +15,7 @@ // Other libraries and framework includes #include "llvm/ADT/StringRef.h" +#include "llvm/Support/Threading.h" // Project includes #include "JavaFormatterFunctions.h" @@ -64,10 +65,10 @@ } lldb::TypeCategoryImplSP JavaLanguage::GetFormatters() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static TypeCategoryImplSP g_category; - std::call_once(g_initialize, [this]() -> void { + llvm::call_once(g_initialize, [this]() -> void { DataVisualization::Categories::GetCategory(GetPluginName(), g_category); if (g_category) { llvm::StringRef array_regexp("^.*\\[\\]&?$"); Index: source/Plugins/Language/ObjC/ObjCLanguage.cpp =================================================================== --- source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -26,6 +26,8 @@ #include "lldb/Utility/ConstString.h" #include "lldb/Utility/StreamString.h" +#include "llvm/Support/Threading.h" + #include "CF.h" #include "Cocoa.h" #include "CoreMedia.h" @@ -857,10 +859,10 @@ } lldb::TypeCategoryImplSP ObjCLanguage::GetFormatters() { - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); static TypeCategoryImplSP g_category; - std::call_once(g_initialize, [this]() -> void { + llvm::call_once(g_initialize, [this]() -> void { DataVisualization::Categories::GetCategory(GetPluginName(), g_category); if (g_category) { LoadCoreMediaFormatters(g_category); Index: source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp =================================================================== --- source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp +++ source/Plugins/Platform/MacOSX/PlatformAppleSimulator.cpp @@ -242,8 +242,8 @@ void PlatformAppleSimulator::LoadCoreSimulator() { #if defined(__APPLE__) - static std::once_flag g_load_core_sim_flag; - std::call_once(g_load_core_sim_flag, [this] { + LLVM_DEFINE_ONCE_FLAG(g_load_core_sim_flag); + llvm::call_once(g_load_core_sim_flag, [this] { const std::string core_sim_path(GetCoreSimulatorPath().GetPath()); if (core_sim_path.size()) dlopen(core_sim_path.c_str(), RTLD_LAZY); Index: source/Plugins/Platform/MacOSX/PlatformDarwin.cpp =================================================================== --- source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -40,6 +40,7 @@ #include "lldb/Target/Target.h" #include "lldb/Utility/Error.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/Support/Threading.h" #if defined(__APPLE__) #include // for TARGET_OS_TV, TARGET_OS_WATCH @@ -1310,8 +1311,8 @@ static FileSpec GetXcodeContentsPath() { static FileSpec g_xcode_filespec; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { FileSpec fspec; @@ -1693,8 +1694,8 @@ // Find the global list of directories that we will search for // executables once so we don't keep doing the work over and over. - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { // When locating executables, trust the DEVELOPER_DIR first if it is set FileSpec xcode_contents_dir = GetXcodeContentsPath(); Index: source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp =================================================================== --- source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp +++ source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp @@ -46,6 +46,8 @@ #include "lldb/Host/posix/Fcntl.h" +#include "llvm/Support/Threading.h" + using namespace lldb; using namespace lldb_private; @@ -71,9 +73,9 @@ } void ProcessFreeBSD::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance); ProcessPOSIXLog::Initialize(GetPluginNameStatic()); Index: source/Plugins/Process/Linux/NativeProcessLinux.cpp =================================================================== --- source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -75,9 +75,9 @@ static bool ProcessVmReadvSupported() { static bool is_supported; - static std::once_flag flag; + LLVM_DEFINE_ONCE_FLAG(flag); - std::call_once(flag, [] { + llvm::call_once(flag, [] { Log *log(ProcessPOSIXLog::GetLogIfAllCategoriesSet(POSIX_LOG_PROCESS)); uint32_t source = 0x47424742; Index: source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp =================================================================== --- source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp +++ source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp @@ -39,6 +39,8 @@ #include "lldb/Target/Thread.h" #include "lldb/Utility/StringExtractor.h" +#include "llvm/Support/Threading.h" + #define USEC_PER_SEC 1000000 // Project includes @@ -718,9 +720,9 @@ } void ProcessKDP::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance, DebuggerInitialize); Index: source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp =================================================================== --- source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp +++ source/Plugins/Process/POSIX/ProcessPOSIXLog.cpp @@ -15,6 +15,8 @@ #include "lldb/Core/StreamFile.h" #include "lldb/Interpreter/Args.h" +#include "llvm/Support/Threading.h" + #include "ProcessPOSIXLog.h" using namespace lldb; @@ -33,9 +35,9 @@ } void ProcessPOSIXLog::Initialize(ConstString name) { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, [name]() { + llvm::call_once(g_once_flag, [name]() { Log::Callbacks log_callbacks = {DisableLog, EnableLog, ListLogCategories}; Log::RegisterLogChannel(name, log_callbacks); Index: source/Plugins/Process/Windows/Common/ProcessWindows.cpp =================================================================== --- source/Plugins/Process/Windows/Common/ProcessWindows.cpp +++ source/Plugins/Process/Windows/Common/ProcessWindows.cpp @@ -30,6 +30,7 @@ #include "llvm/Support/ConvertUTF.h" #include "llvm/Support/Format.h" +#include "llvm/Support/Threading.h" #include "llvm/Support/raw_ostream.h" #include "DebuggerThread.h" @@ -102,9 +103,9 @@ } void ProcessWindows::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance); }); Index: source/Plugins/Process/Windows/Common/ProcessWindowsLog.cpp =================================================================== --- source/Plugins/Process/Windows/Common/ProcessWindowsLog.cpp +++ source/Plugins/Process/Windows/Common/ProcessWindowsLog.cpp @@ -14,6 +14,7 @@ #include "lldb/Core/StreamFile.h" #include "lldb/Interpreter/Args.h" #include "llvm/Support/ManagedStatic.h" +#include "llvm/Support/Threading.h" using namespace lldb; using namespace lldb_private; @@ -25,12 +26,12 @@ static bool g_log_enabled = false; static Log *g_log = nullptr; -static llvm::ManagedStatic g_once_flag; +static llvm::ManagedStatic g_once_flag; void ProcessWindowsLog::Initialize() { static ConstString g_name("windows"); - std::call_once(*g_once_flag, []() { + llvm::call_once(g_once_flag, []() { Log::Callbacks log_callbacks = {DisableLog, EnableLog, ListLogCategories}; Log::RegisterLogChannel(g_name, log_callbacks); Index: source/Plugins/Process/elf-core/ProcessElfCore.cpp =================================================================== --- source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -27,6 +27,7 @@ #include "lldb/Target/UnixSignals.h" #include "llvm/Support/ELF.h" +#include "llvm/Support/Threading.h" #include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h" #include "Plugins/ObjectFile/ELF/ObjectFileELF.h" @@ -400,9 +401,9 @@ } void ProcessElfCore::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance); }); Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp =================================================================== --- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp +++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerPlatform.cpp @@ -20,6 +20,7 @@ // Other libraries and framework includes #include "llvm/Support/FileSystem.h" +#include "llvm/Support/Threading.h" #include "lldb/Core/Log.h" #include "lldb/Core/StreamGDBRemote.h" @@ -528,9 +529,9 @@ const FileSpec &GDBRemoteCommunicationServerPlatform::GetDomainSocketDir() { static FileSpec g_domainsocket_dir; - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { const char *domainsocket_dir_env = ::getenv("LLDB_DEBUGSERVER_DOMAINSOCKET_DIR"); if (domainsocket_dir_env != nullptr) Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp =================================================================== --- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -81,6 +81,7 @@ #include "llvm/ADT/StringSwitch.h" #include "llvm/Support/raw_ostream.h" +#include "llvm/Support/Threading.h" #define DEBUGSERVER_BASENAME "debugserver" using namespace lldb; @@ -3434,9 +3435,9 @@ } void ProcessGDBRemote::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance, DebuggerInitialize); Index: source/Plugins/Process/gdb-remote/ProcessGDBRemoteLog.cpp =================================================================== --- source/Plugins/Process/gdb-remote/ProcessGDBRemoteLog.cpp +++ source/Plugins/Process/gdb-remote/ProcessGDBRemoteLog.cpp @@ -14,6 +14,8 @@ #include "lldb/Core/StreamFile.h" #include "lldb/Interpreter/Args.h" +#include "llvm/Support/Threading.h" + #include "ProcessGDBRemote.h" using namespace lldb; @@ -34,9 +36,9 @@ void ProcessGDBRemoteLog::Initialize() { static ConstString g_name("gdb-remote"); - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { Log::Callbacks log_callbacks = {DisableLog, EnableLog, ListLogCategories}; Log::RegisterLogChannel(g_name, log_callbacks); Index: source/Plugins/Process/mach-core/ProcessMachCore.cpp =================================================================== --- source/Plugins/Process/mach-core/ProcessMachCore.cpp +++ source/Plugins/Process/mach-core/ProcessMachCore.cpp @@ -14,6 +14,7 @@ // C++ Includes #include "llvm/Support/MathExtras.h" +#include "llvm/Support/Threading.h" #include // Other libraries and framework includes @@ -579,9 +580,9 @@ void ProcessMachCore::Clear() { m_thread_list.Clear(); } void ProcessMachCore::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance); }); Index: source/Plugins/Process/minidump/ProcessMinidump.cpp =================================================================== --- source/Plugins/Process/minidump/ProcessMinidump.cpp +++ source/Plugins/Process/minidump/ProcessMinidump.cpp @@ -25,6 +25,8 @@ #include "lldb/Target/UnixSignals.h" #include "lldb/Utility/LLDBAssert.h" +#include "llvm/Support/Threading.h" + // C includes // C++ includes @@ -92,9 +94,9 @@ } void ProcessMinidump::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), ProcessMinidump::CreateInstance); Index: source/Plugins/ScriptInterpreter/None/ScriptInterpreterNone.cpp =================================================================== --- source/Plugins/ScriptInterpreter/None/ScriptInterpreterNone.cpp +++ source/Plugins/ScriptInterpreter/None/ScriptInterpreterNone.cpp @@ -15,6 +15,8 @@ #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Utility/Stream.h" +#include "llvm/Support/Threading.h" + #include using namespace lldb; @@ -39,9 +41,9 @@ } void ScriptInterpreterNone::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), lldb::eScriptLanguageNone, CreateInstance); Index: source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp =================================================================== --- source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -338,9 +338,9 @@ } void ScriptInterpreterPython::Initialize() { - static std::once_flag g_once_flag; + LLVM_DEFINE_ONCE_FLAG(g_once_flag); - std::call_once(g_once_flag, []() { + llvm::call_once(g_once_flag, []() { PluginManager::RegisterPlugin(GetPluginNameStatic(), GetPluginDescriptionStatic(), lldb::eScriptLanguagePython, CreateInstance); Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -21,6 +21,7 @@ // Other libraries and framework includes #include "llvm/ADT/DenseMap.h" +#include "llvm/Support/Threading.h" #include "lldb/Core/Flags.h" #include "lldb/Core/RangeMap.h" @@ -305,7 +306,7 @@ typedef llvm::DenseMap ClangTypeToDIE; struct DWARFDataSegment { - std::once_flag m_flag; + llvm::once_flag m_flag; lldb_private::DWARFDataExtractor m_data; }; Index: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -11,6 +11,7 @@ // Other libraries and framework includes #include "llvm/Support/Casting.h" +#include "llvm/Support/Threading.h" #include "lldb/Core/ArchSpec.h" #include "lldb/Core/Module.h" @@ -553,8 +554,11 @@ const DWARFDataExtractor & SymbolFileDWARF::GetCachedSectionData(lldb::SectionType sect_type, DWARFDataSegment &data_segment) { - std::call_once(data_segment.m_flag, &SymbolFileDWARF::LoadSectionData, this, - sect_type, std::ref(data_segment.m_data)); + llvm::call_once(data_segment.m_flag, + [this, sect_type, &data_segment] { + this->LoadSectionData(sect_type, std::ref(data_segment.m_data)); + } + ); return data_segment.m_data; } Index: source/Symbol/ClangASTContext.cpp =================================================================== --- source/Symbol/ClangASTContext.cpp +++ source/Symbol/ClangASTContext.cpp @@ -14,7 +14,7 @@ // C Includes // C++ Includes -#include // std::once +#include #include #include @@ -65,6 +65,7 @@ #endif #include "llvm/Support/Signals.h" +#include "llvm/Support/Threading.h" #include "Plugins/ExpressionParser/Clang/ClangFunctionCaller.h" #include "Plugins/ExpressionParser/Clang/ClangUserExpression.h" @@ -127,8 +128,8 @@ static ClangASTMap &GetASTMap() { static ClangASTMap *g_map_ptr = nullptr; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { g_map_ptr = new ClangASTMap(); // leaked on purpose to avoid spins }); return *g_map_ptr; @@ -954,8 +955,8 @@ if (name) { typedef UniqueCStringMap TypeNameToBasicTypeMap; static TypeNameToBasicTypeMap g_type_map; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { // "void" g_type_map.Append(ConstString("void").GetStringRef(), eBasicTypeVoid); Index: source/Symbol/GoASTContext.cpp =================================================================== --- source/Symbol/GoASTContext.cpp +++ source/Symbol/GoASTContext.cpp @@ -25,6 +25,8 @@ #include "lldb/Target/ExecutionContext.h" #include "lldb/Target/Target.h" +#include "llvm/Support/Threading.h" + #include "Plugins/ExpressionParser/Go/GoUserExpression.h" #include "Plugins/SymbolFile/DWARF/DWARFASTParserGo.h" @@ -593,8 +595,8 @@ if (name) { typedef UniqueCStringMap TypeNameToBasicTypeMap; static TypeNameToBasicTypeMap g_type_map; - static std::once_flag g_once_flag; - std::call_once(g_once_flag, []() { + LLVM_DEFINE_ONCE_FLAG(g_once_flag); + llvm::call_once(g_once_flag, []() { // "void" g_type_map.Append(ConstString("void").GetStringRef(), eBasicTypeVoid); // "int" Index: source/Target/Language.cpp =================================================================== --- source/Target/Language.cpp +++ source/Target/Language.cpp @@ -20,6 +20,8 @@ #include "lldb/Target/Target.h" #include "lldb/Utility/Stream.h" +#include "llvm/Support/Threading.h" + using namespace lldb; using namespace lldb_private; using namespace lldb_private::formatters; @@ -29,9 +31,9 @@ static LanguagesMap &GetLanguagesMap() { static LanguagesMap *g_map = nullptr; - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); - std::call_once(g_initialize, [] { + llvm::call_once(g_initialize, [] { g_map = new LanguagesMap(); // NOTE: INTENTIONAL LEAK due to global // destructor chain }); @@ -40,9 +42,9 @@ } static std::mutex &GetLanguagesMutex() { static std::mutex *g_mutex = nullptr; - static std::once_flag g_initialize; + LLVM_DEFINE_ONCE_FLAG(g_initialize); - std::call_once(g_initialize, [] { + llvm::call_once(g_initialize, [] { g_mutex = new std::mutex(); // NOTE: INTENTIONAL LEAK due to global // destructor chain }); Index: source/Utility/ConstString.cpp =================================================================== --- source/Utility/ConstString.cpp +++ source/Utility/ConstString.cpp @@ -20,6 +20,7 @@ #include "llvm/Support/RWMutex.h" // Project includes +#include "llvm/Support/Threading.h" #include "lldb/Utility/Stream.h" using namespace lldb_private; @@ -191,10 +192,10 @@ // touch ConstStrings is difficult. So we leak the pool instead. //---------------------------------------------------------------------- static Pool &StringPool() { - static std::once_flag g_pool_initialization_flag; + LLVM_DEFINE_ONCE_FLAG(g_pool_initialization_flag); static Pool *g_string_pool = nullptr; - std::call_once(g_pool_initialization_flag, + llvm::call_once(g_pool_initialization_flag, []() { g_string_pool = new Pool(); }); return *g_string_pool; Index: tools/debugserver/source/MacOSX/DarwinLog/DarwinLogCollector.cpp =================================================================== --- tools/debugserver/source/MacOSX/DarwinLog/DarwinLogCollector.cpp +++ tools/debugserver/source/MacOSX/DarwinLog/DarwinLogCollector.cpp @@ -46,10 +46,10 @@ s_os_activity_stream_set_event_handler; bool LookupSPICalls() { - static std::once_flag s_once_flag; + LLVM_DEFINE_ONCE_FLAG(s_once_flag); static bool s_has_spi; - std::call_once(s_once_flag, [] { + llvm::call_once(s_once_flag, [] { dlopen ("/System/Library/PrivateFrameworks/LoggingSupport.framework/LoggingSupport", RTLD_NOW); s_os_activity_stream_for_pid = (os_activity_stream_for_pid_t)dlsym( RTLD_DEFAULT, "os_activity_stream_for_pid");