//===---------- AbsoluteSymbols.cpp - Absolute symbols utilities ----------===// // // 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 "llvm/ExecutionEngine/Orc/AbsoluteSymbols.h" #include "llvm/ExecutionEngine/Orc/Core.h" #define DEBUG_TYPE "orc" namespace llvm::orc { AbsoluteSymbolsMaterializationUnit::AbsoluteSymbolsMaterializationUnit( SymbolMap Symbols) : MaterializationUnit(extractFlags(Symbols)), Symbols(std::move(Symbols)) {} StringRef AbsoluteSymbolsMaterializationUnit::getName() const { return ""; } void AbsoluteSymbolsMaterializationUnit::materialize( std::unique_ptr R) { // Even though these are just absolute symbols we need to check for failure // to resolve/emit: the tracker for these symbols may have been removed while // the materialization was in flight (e.g. due to a failure in some action // triggered by the queries attached to the resolution/emission of these // symbols). if (auto Err = R->notifyResolved(Symbols)) { R->getExecutionSession().reportError(std::move(Err)); R->failMaterialization(); return; } if (auto Err = R->notifyEmitted({})) { R->getExecutionSession().reportError(std::move(Err)); R->failMaterialization(); return; } } void AbsoluteSymbolsMaterializationUnit::discard(const JITDylib &JD, const SymbolStringPtr &Name) { assert(Symbols.count(Name) && "Symbol is not part of this MU"); Symbols.erase(Name); } MaterializationUnit::Interface AbsoluteSymbolsMaterializationUnit::extractFlags(const SymbolMap &Symbols) { SymbolFlagsMap Flags; for (const auto &[Name, Def] : Symbols) Flags[Name] = Def.getFlags(); return MaterializationUnit::Interface(std::move(Flags), nullptr); } } // namespace llvm::orc