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.
///
PlatformDarwinKernel::~PlatformDarwinKernel() = default;
void PlatformDarwinKernel::GetStatus(Stream &strm) {
+ UpdateKextandKernelsLocalScan();
Platform::GetStatus(strm);
strm.Printf(" Debug session type: ");
if (m_ios_debug_session == eLazyBoolYes)
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,
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) {
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.
LazyBool m_ios_debug_session;
+ std::once_flag m_kext_scan_flag;
+
PlatformDarwinKernel(const PlatformDarwinKernel &) = delete;
const PlatformDarwinKernel &operator=(const PlatformDarwinKernel &) = delete;
};