brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 93a5bc4 Raw
58 lines · cpp
1//===-- symbolLocator.cpp -------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "lldb/Symbol/SymbolLocator.h"10 11#include "lldb/Core/Debugger.h"12#include "lldb/Core/PluginManager.h"13#include "lldb/Host/Host.h"14 15#include "llvm/ADT/SmallSet.h"16#include "llvm/Support/ThreadPool.h"17 18using namespace lldb;19using namespace lldb_private;20 21void SymbolLocator::DownloadSymbolFileAsync(const UUID &uuid) {22  static llvm::SmallSet<UUID, 8> g_seen_uuids;23  static std::mutex g_mutex;24 25  auto lookup = [=]() {26    {27      std::lock_guard<std::mutex> guard(g_mutex);28      if (g_seen_uuids.count(uuid))29        return;30      g_seen_uuids.insert(uuid);31    }32 33    Status error;34    ModuleSpec module_spec;35    module_spec.GetUUID() = uuid;36    if (!PluginManager::DownloadObjectAndSymbolFile(module_spec, error,37                                                    /*force_lookup=*/true,38                                                    /*copy_executable=*/true))39      return;40 41    if (error.Fail())42      return;43 44    Debugger::ReportSymbolChange(module_spec);45  };46 47  switch (ModuleList::GetGlobalModuleListProperties().GetSymbolAutoDownload()) {48  case eSymbolDownloadOff:49    break;50  case eSymbolDownloadBackground:51    Debugger::GetThreadPool().async(lookup);52    break;53  case eSymbolDownloadForeground:54    lookup();55    break;56  };57}58