- //===-- LookupAndRecordAddrs.h - Symbol lookup support utility --*- C++ -*-===// 
- // 
- // 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 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // Record the addresses of a set of symbols into ExecutorAddr objects. 
- // 
- // This can be used to avoid repeated lookup (via ExecutionSession::lookup) of 
- // the given symbols. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_EXECUTIONENGINE_ORC_LOOKUPANDRECORDADDRS_H 
- #define LLVM_EXECUTIONENGINE_ORC_LOOKUPANDRECORDADDRS_H 
-   
- #include "llvm/ADT/FunctionExtras.h" 
- #include "llvm/ExecutionEngine/Orc/Core.h" 
- #include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h" 
-   
- #include <vector> 
-   
- namespace llvm { 
- namespace orc { 
-   
- /// Record addresses of the given symbols in the given ExecutorAddrs. 
- /// 
- /// Useful for making permanent records of symbol addreses to call or 
- /// access in the executor (e.g. runtime support functions in Platform 
- /// subclasses). 
- /// 
- /// By default the symbols are looked up using 
- /// SymbolLookupFlags::RequiredSymbol, and an error will be generated if any of 
- /// the requested symbols are not defined. 
- /// 
- /// If SymbolLookupFlags::WeaklyReferencedSymbol is used then any missing 
- /// symbols will have their corresponding address objects set to zero, and 
- /// this function will never generate an error (the caller will need to check 
- /// addresses before using them). 
- /// 
- /// Asynchronous version. 
- void lookupAndRecordAddrs( 
-     unique_function<void(Error)> OnRecorded, ExecutionSession &ES, LookupKind K, 
-     const JITDylibSearchOrder &SearchOrder, 
-     std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs, 
-     SymbolLookupFlags LookupFlags = SymbolLookupFlags::RequiredSymbol); 
-   
- /// Record addresses of the given symbols in the given ExecutorAddrs. 
- /// 
- /// Blocking version. 
- Error lookupAndRecordAddrs( 
-     ExecutionSession &ES, LookupKind K, const JITDylibSearchOrder &SearchOrder, 
-     std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs, 
-     SymbolLookupFlags LookupFlags = SymbolLookupFlags::RequiredSymbol); 
-   
- /// Record addresses of given symbols in the given ExecutorAddrs. 
- /// 
- /// ExecutorProcessControl lookup version. Lookups are always implicitly 
- /// weak. 
- Error lookupAndRecordAddrs( 
-     ExecutorProcessControl &EPC, tpctypes::DylibHandle H, 
-     std::vector<std::pair<SymbolStringPtr, ExecutorAddr *>> Pairs, 
-     SymbolLookupFlags LookupFlags = SymbolLookupFlags::RequiredSymbol); 
-   
- } // End namespace orc 
- } // End namespace llvm 
-   
- #endif // LLVM_EXECUTIONENGINE_ORC_LOOKUPANDRECORDADDRS_H 
-