[llvm] [llvm] annotate interfaces in llvm/ExecutionEngine for DLL export (PR #140809)
via llvm-commits
llvm-commits at lists.llvm.org
Wed May 21 17:38:19 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Andrew Rogers (andrurogerz)
<details>
<summary>Changes</summary>
## Purpose
This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the `llvm/ExecutionEngine` library. These annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build.
## Background
This effort is tracked in #<!-- -->109483. Additional context is provided in [this discourse](https://discourse.llvm.org/t/psa-annotating-llvm-public-interface/85307), and documentation for `LLVM_ABI` and related annotations is found in the LLVM repo [here](https://github.com/llvm/llvm-project/blob/main/llvm/docs/InterfaceExportAnnotations.rst).
The bulk of these changes were generated automatically using the [Interface Definition Scanner (IDS)](https://github.com/compnerd/ids) tool, followed formatting with `git clang-format`.
The following manual adjustments were also applied after running IDS on Linux:
- Add `LLVM_ABI_FRIEND` to friend member functions declared with `LLVM_ABI`
- Add `LLVM_ABI` to a subset of private class methods and fields that require export
- Add `LLVM_ABI` to a small number of symbols that require export but are not declared in headers
- Add `LLVM_ABI` to a number of `extern "C"` methods that IDS missed because they're implicitly exported
## Validation
Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations:
- Windows with MSVC
- Windows with Clang
- Linux with GCC
- Linux with Clang
- Darwin with Clang
---
Patch is 228.30 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/140809.diff
101 Files Affected:
- (modified) llvm/include/llvm/ExecutionEngine/ExecutionEngine.h (+16-14)
- (modified) llvm/include/llvm/ExecutionEngine/Interpreter.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/JITEventListener.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h (+3-2)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h (+29-27)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h (+17-16)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/MachO.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/MachO_arm64.h (+7-5)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/MachO_x86_64.h (+7-5)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/aarch32.h (+21-18)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/aarch64.h (+10-9)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/loongarch.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/ppc64.h (+7-6)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/riscv.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/x86.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h (+8-7)
- (modified) llvm/include/llvm/ExecutionEngine/JITSymbol.h (+8-6)
- (modified) llvm/include/llvm/ExecutionEngine/MCJIT.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/ObjectCache.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/AbsoluteSymbols.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/COFFPlatform.h (+3-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/COFFVCRuntimeSupport.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/CompileUtils.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Core.h (+116-104)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/DebugObjectManagerPlugin.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/DebugUtils.h (+38-25)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Debugging/DebugInfoSupport.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Debugging/DebuggerSupport.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Debugging/DebuggerSupportPlugin.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Debugging/PerfSupportPlugin.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Debugging/VTuneSupportPlugin.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/DylibManager.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EHFrameRegistrationPlugin.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h (+3-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EPCDebugObjectRegistrar.h (+4-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EPCDynamicLibrarySearchGenerator.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EPCGenericDylibManager.h (+9-6)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h (+21-20)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ExecutorProcessControl.h (+8-6)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/GetDylibInterface.h (+7-5)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h (+3-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/IRPartitionLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h (+24-21)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/JITLinkRedirectableSymbolManager.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/JITLinkReentryTrampolines.h (+7-6)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LLJIT.h (+14-12)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Layer.h (+7-5)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LazyObjectLinkingLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LazyReexports.h (+16-12)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LinkGraphLayer.h (+3-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LinkGraphLinkingLayer.h (+4-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LoadLinkableFile.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/MachO.h (+9-8)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h (+6-5)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Mangling.h (+7-5)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/MapperJITLinkMemoryManager.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/MaterializationUnit.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/MemoryMapper.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ObjectFileInterface.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h (+4-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/OrcABISupport.h (+83-88)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ReOptimizeLayer.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/RedirectionManager.h (+4-2)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/SectCreate.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/AllocationActions.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/MachOObjectFormat.h (+36-35)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/ObjectFormats.h (+13-12)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcError.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h (+33-30)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Shared/SimpleRemoteEPCUtils.h (+6-5)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/SimpleRemoteEPC.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/Speculation.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h (+8-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/DefaultHostBootstrapValues.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorBootstrapService.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/ExecutorSharedMemoryMapperService.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.h (+4-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleExecutorDylibManager.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleExecutorMemoryManager.h (+2-1)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/SimpleRemoteEPCServer.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/TargetExecutionUtils.h (+5-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.h (+11-8)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/TaskDispatch.h (+8-7)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/ThreadSafeModule.h (+3-4)
- (modified) llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h (+3-1)
- (modified) llvm/include/llvm/ExecutionEngine/RTDyldMemoryManager.h (+4-3)
- (modified) llvm/include/llvm/ExecutionEngine/RuntimeDyld.h (+25-22)
- (modified) llvm/include/llvm/ExecutionEngine/RuntimeDyldChecker.h (+14-14)
- (modified) llvm/include/llvm/ExecutionEngine/SectionMemoryManager.h (+3-2)
- (modified) llvm/lib/ExecutionEngine/JITLink/ELF_aarch32.cpp (+3-2)
- (modified) llvm/lib/ExecutionEngine/JITLink/aarch32.cpp (+13-12)
- (modified) llvm/lib/ExecutionEngine/Orc/TargetProcess/JITLoaderGDB.cpp (+4-5)
- (modified) llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp (+1-1)
``````````diff
diff --git a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
index ee6084ada1dd4..27399d93fe587 100644
--- a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
+++ b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
@@ -25,6 +25,7 @@
#include "llvm/Object/Binary.h"
#include "llvm/Support/CBindingWrapping.h"
#include "llvm/Support/CodeGen.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/Mutex.h"
#include "llvm/Target/TargetMachine.h"
@@ -88,7 +89,7 @@ class ExecutionEngineState {
/// Erase an entry from the mapping table.
///
/// \returns The address that \p ToUnmap was mapped to.
- uint64_t RemoveMapping(StringRef Name);
+ LLVM_ABI uint64_t RemoveMapping(StringRef Name);
};
using FunctionCreator = std::function<void *(const std::string &)>;
@@ -96,7 +97,7 @@ using FunctionCreator = std::function<void *(const std::string &)>;
/// Abstract interface for implementation execution of LLVM modules,
/// designed to support both interpreter and just-in-time (JIT) compiler
/// implementations.
-class ExecutionEngine {
+class LLVM_ABI ExecutionEngine {
/// The state object holding the global address mapping, which must be
/// accessed synchronously.
//
@@ -550,13 +551,13 @@ class EngineBuilder {
public:
/// Default constructor for EngineBuilder.
- EngineBuilder();
+ LLVM_ABI EngineBuilder();
/// Constructor for EngineBuilder.
- EngineBuilder(std::unique_ptr<Module> M);
+ LLVM_ABI EngineBuilder(std::unique_ptr<Module> M);
// Out-of-line since we don't have the def'n of RTDyldMemoryManager here.
- ~EngineBuilder();
+ LLVM_ABI ~EngineBuilder();
/// setEngineKind - Controls whether the user wants the interpreter, the JIT,
/// or whichever engine works. This option defaults to EngineKind::Either.
@@ -571,12 +572,14 @@ class EngineBuilder {
/// to create anything other than MCJIT will cause a runtime error. If create()
/// is called and is successful, the created engine takes ownership of the
/// memory manager. This option defaults to NULL.
- EngineBuilder &setMCJITMemoryManager(std::unique_ptr<RTDyldMemoryManager> mcjmm);
+ LLVM_ABI EngineBuilder &
+ setMCJITMemoryManager(std::unique_ptr<RTDyldMemoryManager> mcjmm);
- EngineBuilder&
+ LLVM_ABI EngineBuilder &
setMemoryManager(std::unique_ptr<MCJITMemoryManager> MM);
- EngineBuilder &setSymbolResolver(std::unique_ptr<LegacyJITSymbolResolver> SR);
+ LLVM_ABI EngineBuilder &
+ setSymbolResolver(std::unique_ptr<LegacyJITSymbolResolver> SR);
/// setErrorStr - Set the error string to write to on error. This option
/// defaults to NULL.
@@ -645,20 +648,19 @@ class EngineBuilder {
this->EmulatedTLS = EmulatedTLS;
}
- TargetMachine *selectTarget();
+ LLVM_ABI TargetMachine *selectTarget();
/// selectTarget - Pick a target either via -march or by guessing the native
/// arch. Add any CPU features specified via -mcpu or -mattr.
- TargetMachine *selectTarget(const Triple &TargetTriple,
- StringRef MArch,
- StringRef MCPU,
- const SmallVectorImpl<std::string>& MAttrs);
+ LLVM_ABI TargetMachine *
+ selectTarget(const Triple &TargetTriple, StringRef MArch, StringRef MCPU,
+ const SmallVectorImpl<std::string> &MAttrs);
ExecutionEngine *create() {
return create(selectTarget());
}
- ExecutionEngine *create(TargetMachine *TM);
+ LLVM_ABI ExecutionEngine *create(TargetMachine *TM);
};
// Create wrappers for C Binding types (see CBindingWrapping.h).
diff --git a/llvm/include/llvm/ExecutionEngine/Interpreter.h b/llvm/include/llvm/ExecutionEngine/Interpreter.h
index 0749409766e39..b499cd6e0927c 100644
--- a/llvm/include/llvm/ExecutionEngine/Interpreter.h
+++ b/llvm/include/llvm/ExecutionEngine/Interpreter.h
@@ -15,8 +15,9 @@
#define LLVM_EXECUTIONENGINE_INTERPRETER_H
#include "llvm/ExecutionEngine/ExecutionEngine.h"
+#include "llvm/Support/Compiler.h"
-extern "C" void LLVMLinkInInterpreter();
+extern "C" LLVM_ABI void LLVMLinkInInterpreter();
namespace {
struct ForceInterpreterLinking {
diff --git a/llvm/include/llvm/ExecutionEngine/JITEventListener.h b/llvm/include/llvm/ExecutionEngine/JITEventListener.h
index 7ccf8ff0d503d..e13ac1d3e976b 100644
--- a/llvm/include/llvm/ExecutionEngine/JITEventListener.h
+++ b/llvm/include/llvm/ExecutionEngine/JITEventListener.h
@@ -19,6 +19,7 @@
#include "llvm/ExecutionEngine/RuntimeDyld.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/Support/CBindingWrapping.h"
+#include "llvm/Support/Compiler.h"
#include <cstdint>
namespace llvm {
@@ -37,7 +38,7 @@ class ObjectFile;
/// profilers and debuggers that need to know where functions have been emitted.
///
/// The default implementation of each method does nothing.
-class JITEventListener {
+class LLVM_ABI JITEventListener {
public:
using ObjectKey = uint64_t;
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h b/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
index 6bfa5506017df..3c6b7bbd1a87f 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
@@ -15,6 +15,7 @@
#include "llvm/ExecutionEngine/JITLink/JITLink.h"
#include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/TargetParser/Triple.h"
@@ -36,7 +37,7 @@ class EHFrameCFIBlockInspector {
/// second to PC-begin, third (if present) to LSDA.
///
/// It is illegal to call this function on a block with four or more edges.
- static EHFrameCFIBlockInspector FromEdgeScan(Block &B);
+ LLVM_ABI static EHFrameCFIBlockInspector FromEdgeScan(Block &B);
/// Returns true if this frame is an FDE, false for a CIE.
bool isFDE() const { return CIEEdge != nullptr; }
@@ -85,7 +86,7 @@ class EHFrameCFIBlockInspector {
/// Returns a pointer to the DWARF eh-frame section if the graph contains a
/// non-empty one, otherwise returns null.
-Section *getEHFrameSection(LinkGraph &G);
+LLVM_ABI Section *getEHFrameSection(LinkGraph &G);
} // end namespace jitlink
} // end namespace llvm
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index 8f0dfea0c97ac..b6b43c38b005f 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -27,6 +27,7 @@
#include "llvm/Support/Allocator.h"
#include "llvm/Support/BinaryStreamReader.h"
#include "llvm/Support/BinaryStreamWriter.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/FormatVariadic.h"
@@ -49,7 +50,7 @@ class Section;
/// Base class for errors originating in JIT linker, e.g. missing relocation
/// support.
-class JITLinkError : public ErrorInfo<JITLinkError> {
+class LLVM_ABI JITLinkError : public ErrorInfo<JITLinkError> {
public:
static char ID;
@@ -105,7 +106,7 @@ class Edge {
/// Returns the string name of the given generic edge kind, or "unknown"
/// otherwise. Useful for debugging.
-const char *getGenericEdgeKindName(Edge::Kind K);
+LLVM_ABI const char *getGenericEdgeKindName(Edge::Kind K);
/// Base class for Addressable entities (externals, absolutes, blocks).
class Addressable {
@@ -389,7 +390,7 @@ inline orc::ExecutorAddr alignToBlock(orc::ExecutorAddr Addr, const Block &B) {
// Returns true if the given blocks contains exactly one valid c-string.
// Zero-fill blocks of size 1 count as valid empty strings. Content blocks
// must end with a zero, and contain no zeros before the end.
-bool isCStringBlock(Block &B);
+LLVM_ABI bool isCStringBlock(Block &B);
/// Describes symbol linkage. This can be used to resolve definition clashes.
enum class Linkage : uint8_t {
@@ -401,7 +402,7 @@ enum class Linkage : uint8_t {
using TargetFlagsType = uint8_t;
/// For errors and debugging output.
-const char *getLinkageName(Linkage L);
+LLVM_ABI const char *getLinkageName(Linkage L);
/// Defines the scope in which this symbol should be visible:
/// Default -- Visible in the public interface of the linkage unit.
@@ -412,9 +413,9 @@ const char *getLinkageName(Linkage L);
enum class Scope : uint8_t { Default, Hidden, SideEffectsOnly, Local };
/// For debugging output.
-const char *getScopeName(Scope S);
+LLVM_ABI const char *getScopeName(Scope S);
-raw_ostream &operator<<(raw_ostream &OS, const Block &B);
+LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const Block &B);
/// Symbol representation.
///
@@ -708,10 +709,10 @@ class Symbol {
size_t Size = 0;
};
-raw_ostream &operator<<(raw_ostream &OS, const Symbol &A);
+LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const Symbol &A);
-void printEdge(raw_ostream &OS, const Block &B, const Edge &E,
- StringRef EdgeKindName);
+LLVM_ABI void printEdge(raw_ostream &OS, const Block &B, const Edge &E,
+ StringRef EdgeKindName);
/// Represents an object file section.
class Section {
@@ -731,7 +732,7 @@ class Section {
using block_iterator = BlockSet::iterator;
using const_block_iterator = BlockSet::const_iterator;
- ~Section();
+ LLVM_ABI ~Section();
// Sections are not movable or copyable.
Section(const Section &) = delete;
@@ -1039,7 +1040,7 @@ class LinkGraph {
LinkGraph &operator=(const LinkGraph &) = delete;
LinkGraph(LinkGraph &&) = delete;
LinkGraph &operator=(LinkGraph &&) = delete;
- ~LinkGraph();
+ LLVM_ABI ~LinkGraph();
/// Returns the name of this graph (usually the name of the original
/// underlying MemoryBuffer).
@@ -1658,11 +1659,11 @@ class LinkGraph {
orc::shared::AllocActions &allocActions() { return AAs; }
/// Dump the graph.
- void dump(raw_ostream &OS);
+ LLVM_ABI void dump(raw_ostream &OS);
private:
- std::vector<Block *> splitBlockImpl(std::vector<Block *> Blocks,
- SplitBlockCache *Cache);
+ LLVM_ABI std::vector<Block *> splitBlockImpl(std::vector<Block *> Blocks,
+ SplitBlockCache *Cache);
// Put the BumpPtrAllocator first so that we don't free any of the underlying
// memory until the Symbol/Addressable destructors have been run.
@@ -1894,7 +1895,7 @@ struct PassConfiguration {
/// the two types once we have an OrcSupport library.
enum class SymbolLookupFlags { RequiredSymbol, WeaklyReferencedSymbol };
-raw_ostream &operator<<(raw_ostream &OS, const SymbolLookupFlags &LF);
+LLVM_ABI raw_ostream &operator<<(raw_ostream &OS, const SymbolLookupFlags &LF);
/// A map of symbol names to resolved addresses.
using AsyncLookupResult =
@@ -1902,7 +1903,7 @@ using AsyncLookupResult =
/// A function object to call with a resolved symbol map (See AsyncLookupResult)
/// or an error if resolution failed.
-class JITLinkAsyncLookupContinuation {
+class LLVM_ABI JITLinkAsyncLookupContinuation {
public:
virtual ~JITLinkAsyncLookupContinuation() = default;
virtual void run(Expected<AsyncLookupResult> LR) = 0;
@@ -1929,7 +1930,7 @@ createLookupContinuation(Continuation Cont) {
}
/// Holds context for a single jitLink invocation.
-class JITLinkContext {
+class LLVM_ABI JITLinkContext {
public:
using LookupMap = DenseMap<orc::SymbolStringPtr, SymbolLookupFlags>;
@@ -1995,14 +1996,14 @@ class JITLinkContext {
/// Marks all symbols in a graph live. This can be used as a default,
/// conservative mark-live implementation.
-Error markAllSymbolsLive(LinkGraph &G);
+LLVM_ABI Error markAllSymbolsLive(LinkGraph &G);
/// Create an out of range error for the given edge in the given block.
-Error makeTargetOutOfRangeError(const LinkGraph &G, const Block &B,
- const Edge &E);
+LLVM_ABI Error makeTargetOutOfRangeError(const LinkGraph &G, const Block &B,
+ const Edge &E);
-Error makeAlignmentError(llvm::orc::ExecutorAddr Loc, uint64_t Value, int N,
- const Edge &E);
+LLVM_ABI Error makeAlignmentError(llvm::orc::ExecutorAddr Loc, uint64_t Value,
+ int N, const Edge &E);
/// Creates a new pointer block in the given section and returns an
/// Anonymous symbol pointing to it.
@@ -2016,7 +2017,7 @@ using AnonymousPointerCreator =
Symbol *InitialTarget, uint64_t InitialAddend)>;
/// Get target-specific AnonymousPointerCreator
-AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
+LLVM_ABI AnonymousPointerCreator getAnonymousPointerCreator(const Triple &TT);
/// Create a jump stub that jumps via the pointer at the given symbol and
/// an anonymous symbol pointing to it. Return the anonymous symbol.
@@ -2026,7 +2027,7 @@ using PointerJumpStubCreator = unique_function<Symbol &(
LinkGraph &G, Section &StubSection, Symbol &PointerSymbol)>;
/// Get target-specific PointerJumpStubCreator
-PointerJumpStubCreator getPointerJumpStubCreator(const Triple &TT);
+LLVM_ABI PointerJumpStubCreator getPointerJumpStubCreator(const Triple &TT);
/// Base case for edge-visitors where the visitor-list is empty.
inline void visitEdge(LinkGraph &G, Block *B, Edge &E) {}
@@ -2063,17 +2064,18 @@ void visitExistingEdges(LinkGraph &G, VisitorTs &&...Vs) {
/// Note: The graph does not take ownership of the underlying buffer, nor copy
/// its contents. The caller is responsible for ensuring that the object buffer
/// outlives the graph.
-Expected<std::unique_ptr<LinkGraph>>
+LLVM_ABI Expected<std::unique_ptr<LinkGraph>>
createLinkGraphFromObject(MemoryBufferRef ObjectBuffer,
std::shared_ptr<orc::SymbolStringPool> SSP);
/// Create a \c LinkGraph defining the given absolute symbols.
-std::unique_ptr<LinkGraph>
+LLVM_ABI std::unique_ptr<LinkGraph>
absoluteSymbolsLinkGraph(Triple TT, std::shared_ptr<orc::SymbolStringPool> SSP,
orc::SymbolMap Symbols);
/// Link the given graph.
-void link(std::unique_ptr<LinkGraph> G, std::unique_ptr<JITLinkContext> Ctx);
+LLVM_ABI void link(std::unique_ptr<LinkGraph> G,
+ std::unique_ptr<JITLinkContext> Ctx);
} // end namespace jitlink
} // end namespace llvm
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
index 3242055020f7d..c7b1f6e0b2c36 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
@@ -21,6 +21,7 @@
#include "llvm/ExecutionEngine/Orc/Shared/MemoryFlags.h"
#include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
#include "llvm/Support/Allocator.h"
+#include "llvm/Support/Compiler.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/MSVCErrorWorkarounds.h"
#include "llvm/Support/Memory.h"
@@ -43,7 +44,7 @@ class Section;
///
/// Instances of this class may be accessed concurrently from multiple threads
/// and their implemetations should include any necessary synchronization.
-class JITLinkMemoryManager {
+class LLVM_ABI JITLinkMemoryManager {
public:
/// Represents a finalized allocation.
@@ -118,7 +119,7 @@ class JITLinkMemoryManager {
///
/// If abandon is called then working memory and executor memory should both
/// be freed.
- class InFlightAlloc {
+ class LLVM_ABI InFlightAlloc {
public:
using OnFinalizedFunction = unique_function<void(Expected<FinalizedAlloc>)>;
using OnAbandonedFunction = unique_function<void(Error)>;
@@ -250,7 +251,7 @@ class BasicLayout {
using SegmentMap = orc::AllocGroupSmallMap<Segment>;
public:
- BasicLayout(LinkGraph &G);
+ LLVM_ABI BasicLayout(LinkGraph &G);
/// Return a reference to the graph this allocation was created from.
LinkGraph &getGraph() { return G; }
@@ -264,7 +265,7 @@ class BasicLayout {
///
/// This function will return an error if any segment has an alignment that
/// is higher than a page.
- Expected<ContiguousPageBasedLayoutSizes>
+ LLVM_ABI Expected<ContiguousPageBasedLayoutSizes>
getContiguousPageBasedLayoutSizes(uint64_t PageSize);
/// Returns an iterator over the segments of the layout.
@@ -273,12 +274,12 @@ class BasicLayout {
}
/// Apply the layout to the graph.
- Error apply();
+ LLVM_ABI Error apply();
/// Returns a reference to the AllocActions in the graph.
/// This convenience function saves callers from having to #include
/// LinkGraph.h if all they need are allocation actions.
- orc::shared::AllocActions &graphAllocActions();
+ LLVM_ABI orc::shared::AllocActions &graphAllocActions();
private:
LinkGraph &G;
@@ -320,22 +321,22 @@ class SimpleSegmentAlloc {
using OnFinalizedFunction =
JITLinkMemoryManager::InFlightAlloc::OnFinalizedFunction;
- static void Create(JITLinkMemoryManager &MemMgr,
- std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
- const JITLinkDylib *JD, SegmentMap Segments,
- OnCreatedFunction OnCreated);
+ LLVM_ABI static void Create(JITLinkMemoryManager &MemMgr,
+ std::shared_ptr<orc::SymbolStringPool> SSP,
+ Triple TT, const JITLinkDylib *JD,
+ SegmentMap Segments, OnCreatedFunction OnCreated);
- static Expected<SimpleSegmentAlloc>
+ LLVM_ABI static Expected<SimpleSegmentAlloc>
Create(JITLinkMemoryManager &MemMgr,
std::shared_ptr<orc::SymbolStringPool> SSP, Triple TT,
const JITLinkDylib *JD, SegmentMap Segments);
- SimpleSegmentAlloc(SimpleSegmentAlloc &&);
- SimpleSegmentAlloc &operator=(SimpleSegmentAlloc &&);
- ~SimpleSegmentAlloc();
+ LLVM_ABI SimpleSegmentAlloc(SimpleSegmentAlloc &&);
+ LLVM_ABI SimpleSegmentAlloc &operator=(SimpleSegmentAlloc &&);
+ LLVM_ABI ~SimpleSegmentAlloc();
/// Returns the SegmentInfo for the given group.
- SegmentInfo getSegInfo(orc::AllocGroup AG);
+ LLVM_ABI SegmentInfo getSegInfo(orc::AllocGroup AG);
/// Finalize all groups (async version).
void finalize(OnFinalizedFunction OnFinalized) {
@@ -359,7 +360,7 @@ class SimpleSegmentAlloc {
};
/// A JITLinkMemoryManager that allocates in-process memory.
-class InProcessMemoryManager : public JITLinkMemoryManager {
+class LLVM_ABI InProcessMemoryManager : public JITLinkMemoryManager {
public:
class IPInFlightAlloc;
diff --git a/llvm/include/llvm/ExecutionEngine/JITLink/MachO.h b/llvm/include/llvm/ExecutionEngine/JITLink/MachO.h
index b3bf96b8549f2..6a499b0f62556 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/MachO.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/MachO.h
@@ -15,6 +15,7 @@
#include "llvm/ExecutionEngine/JITLink/JITLink.h"
#include "llvm/ExecutionEngine/Orc/Shared/MachOObjectFormat.h"
+#include "llvm/Support/Compiler.h"
namespace llvm {
namespace jitlink {
@@ -24,7 +25,7 @@ namespace jitlink {
/// Note: The graph does not take ownership of the underlying buffer, nor copy
/// its contents. The caller is responsible for ensuring that the object buffer
/// outlives the graph.
-Expected<std::unique_ptr<LinkGraph>>
+LLVM_ABI Expected<std::unique_ptr<LinkGraph>>
createLinkGraphFromMachOObject(MemoryBufferRef ObjectBuffer,
std::shared_ptr<orc::SymbolStringPool> SSP);
@@ -32,8 +33,8 @@ createLinkGraphFromMachOObject(MemoryBufferRef ObjectBuffer,
///
/// Uses conservative defaults for GOT and stub handling based on the target
/// platform.
-void link_MachO(std::unique_ptr<LinkGraph> G,
- std::unique_ptr<JITLinkContext> Ctx);
+LLVM_ABI void link_MachO(std::unique_ptr<LinkGraph> G,
+ std::unique_ptr<JITLinkContext> Ctx);
/// Get a pointer to the standard MachO data section (creates an empty
/// section with RW- permissions and standard lifetime if one does not
@@ -56,7 +57,7 @@ inline Section &getMachODefaultTextSection(LinkGraph &G) {
}
/// Gets or creates a MachO header for the current LinkGraph.
-Expected<Symbol &> getOrCreateLocalMachOHeader(LinkGraph &G);
+LLVM_ABI Expected<Symbol &> getOrCreateLocalMachOHeader(LinkGraph &G);
} // end namespace jitlink
...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/140809
More information about the llvm-commits
mailing list