aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp')
-rw-r--r--contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp b/contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp
new file mode 100644
index 000000000000..93a5bc428b61
--- /dev/null
+++ b/contrib/llvm-project/lldb/source/Symbol/SymbolLocator.cpp
@@ -0,0 +1,57 @@
+//===-- symbolLocator.cpp -------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Symbol/SymbolLocator.h"
+
+#include "lldb/Core/Debugger.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Host/Host.h"
+
+#include "llvm/ADT/SmallSet.h"
+#include "llvm/Support/ThreadPool.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+void SymbolLocator::DownloadSymbolFileAsync(const UUID &uuid) {
+ static llvm::SmallSet<UUID, 8> g_seen_uuids;
+ static std::mutex g_mutex;
+
+ auto lookup = [=]() {
+ {
+ std::lock_guard<std::mutex> guard(g_mutex);
+ if (g_seen_uuids.count(uuid))
+ return;
+ g_seen_uuids.insert(uuid);
+ }
+
+ Status error;
+ ModuleSpec module_spec;
+ module_spec.GetUUID() = uuid;
+ if (!PluginManager::DownloadObjectAndSymbolFile(module_spec, error,
+ /*force_lookup=*/true,
+ /*copy_executable=*/true))
+ return;
+
+ if (error.Fail())
+ return;
+
+ Debugger::ReportSymbolChange(module_spec);
+ };
+
+ switch (ModuleList::GetGlobalModuleListProperties().GetSymbolAutoDownload()) {
+ case eSymbolDownloadOff:
+ break;
+ case eSymbolDownloadBackground:
+ Debugger::GetThreadPool().async(lookup);
+ break;
+ case eSymbolDownloadForeground:
+ lookup();
+ break;
+ };
+}