jasonmolenda updated this revision to Diff 522813. jasonmolenda added a comment.
Update patch to use a std::once operation instead of hand-rolling it, as suggested by Jonas and Alex. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D150621/new/ https://reviews.llvm.org/D150621 Files: lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h @@ -158,6 +158,8 @@ bool LoadPlatformBinaryAndSetup(Process *process, lldb::addr_t addr, bool notify) override; + void UpdateKextandKernelsLocalScan(); + // Most of the ivars are assembled under FileSystem::EnumerateDirectory calls // where the function being called for each file/directory must be static. // We'll pass a this pointer as a baton and access the ivars directly. @@ -194,6 +196,8 @@ LazyBool m_ios_debug_session; + std::once_flag m_kext_scan_flag; + PlatformDarwinKernel(const PlatformDarwinKernel &) = delete; const PlatformDarwinKernel &operator=(const PlatformDarwinKernel &) = delete; }; Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp @@ -229,12 +229,8 @@ m_name_to_kext_path_map_without_dsyms(), m_search_directories(), m_search_directories_no_recursing(), m_kernel_binaries_with_dsyms(), m_kernel_binaries_without_dsyms(), m_kernel_dsyms_no_binaries(), - m_kernel_dsyms_yaas(), m_ios_debug_session(is_ios_debug_session) - -{ - CollectKextAndKernelDirectories(); - SearchForKextsAndKernelsRecursively(); -} + m_kernel_dsyms_yaas(), m_ios_debug_session(is_ios_debug_session), + m_kext_scan_flag() {} /// Destructor. /// @@ -243,6 +239,7 @@ PlatformDarwinKernel::~PlatformDarwinKernel() = default; void PlatformDarwinKernel::GetStatus(Stream &strm) { + UpdateKextandKernelsLocalScan(); Platform::GetStatus(strm); strm.Printf(" Debug session type: "); if (m_ios_debug_session == eLazyBoolYes) @@ -709,6 +706,13 @@ return results; } +void PlatformDarwinKernel::UpdateKextandKernelsLocalScan() { + std::call_once(m_kext_scan_flag, [this]() { + CollectKextAndKernelDirectories(); + SearchForKextsAndKernelsRecursively(); + }); +} + Status PlatformDarwinKernel::GetSharedModule( const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, @@ -789,6 +793,7 @@ llvm::SmallVectorImpl<ModuleSP> *old_modules, bool *did_create_ptr) { Status error; module_sp.reset(); + UpdateKextandKernelsLocalScan(); // First try all kernel binaries that have a dSYM next to them for (auto possible_kernel : m_kernel_binaries_with_dsyms) {
Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.h @@ -158,6 +158,8 @@ bool LoadPlatformBinaryAndSetup(Process *process, lldb::addr_t addr, bool notify) override; + void UpdateKextandKernelsLocalScan(); + // Most of the ivars are assembled under FileSystem::EnumerateDirectory calls // where the function being called for each file/directory must be static. // We'll pass a this pointer as a baton and access the ivars directly. @@ -194,6 +196,8 @@ LazyBool m_ios_debug_session; + std::once_flag m_kext_scan_flag; + PlatformDarwinKernel(const PlatformDarwinKernel &) = delete; const PlatformDarwinKernel &operator=(const PlatformDarwinKernel &) = delete; }; Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwinKernel.cpp @@ -229,12 +229,8 @@ m_name_to_kext_path_map_without_dsyms(), m_search_directories(), m_search_directories_no_recursing(), m_kernel_binaries_with_dsyms(), m_kernel_binaries_without_dsyms(), m_kernel_dsyms_no_binaries(), - m_kernel_dsyms_yaas(), m_ios_debug_session(is_ios_debug_session) - -{ - CollectKextAndKernelDirectories(); - SearchForKextsAndKernelsRecursively(); -} + m_kernel_dsyms_yaas(), m_ios_debug_session(is_ios_debug_session), + m_kext_scan_flag() {} /// Destructor. /// @@ -243,6 +239,7 @@ PlatformDarwinKernel::~PlatformDarwinKernel() = default; void PlatformDarwinKernel::GetStatus(Stream &strm) { + UpdateKextandKernelsLocalScan(); Platform::GetStatus(strm); strm.Printf(" Debug session type: "); if (m_ios_debug_session == eLazyBoolYes) @@ -709,6 +706,13 @@ return results; } +void PlatformDarwinKernel::UpdateKextandKernelsLocalScan() { + std::call_once(m_kext_scan_flag, [this]() { + CollectKextAndKernelDirectories(); + SearchForKextsAndKernelsRecursively(); + }); +} + Status PlatformDarwinKernel::GetSharedModule( const ModuleSpec &module_spec, Process *process, ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, @@ -789,6 +793,7 @@ llvm::SmallVectorImpl<ModuleSP> *old_modules, bool *did_create_ptr) { Status error; module_sp.reset(); + UpdateKextandKernelsLocalScan(); // First try all kernel binaries that have a dSYM next to them for (auto possible_kernel : m_kernel_binaries_with_dsyms) {
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits