[llvm] c5965a4 - Revert "[JITLink] Update JITLink to use ExecutorAddr rather than..."

Lang Hames via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 5 20:20:43 PST 2022


Author: Lang Hames
Date: 2022-01-06T15:20:21+11:00
New Revision: c5965a411c635106a47738b8d2e24db822b7416f

URL: https://github.com/llvm/llvm-project/commit/c5965a411c635106a47738b8d2e24db822b7416f
DIFF: https://github.com/llvm/llvm-project/commit/c5965a411c635106a47738b8d2e24db822b7416f.diff

LOG: Revert "[JITLink] Update JITLink to use ExecutorAddr rather than..."

This reverts commit 133f86e95492b2a00b944e070878424cfa73f87c while I investigate
the bot failures at https://lab.llvm.org/buildbot#builders/186/builds/3370.

Added: 
    

Modified: 
    llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp
    llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
    llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
    llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
    llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h
    llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h
    llvm/include/llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h
    llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h
    llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
    llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
    llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
    llvm/lib/ExecutionEngine/JITLink/DefineExternalSectionStartAndEndSymbols.h
    llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
    llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
    llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
    llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp
    llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
    llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
    llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
    llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
    llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
    llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
    llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h
    llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
    llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
    llvm/lib/ExecutionEngine/JITLink/PerGraphGOTAndPLTStubsBuilder.h
    llvm/lib/ExecutionEngine/JITLink/x86_64.cpp
    llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
    llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp
    llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
    llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
    llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
    llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
    llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
    llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
    llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
    llvm/tools/llvm-jitlink/llvm-jitlink.cpp
    llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
    llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp b/llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp
index 5a41a7c1e8a6c..2215e2507db3e 100644
--- a/llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp
+++ b/llvm/examples/OrcV2Examples/LLJITWithObjectLinkingLayerPlugin/LLJITWithObjectLinkingLayerPlugin.cpp
@@ -100,15 +100,14 @@ class MyPlugin : public ObjectLinkingLayer::Plugin {
       return;
     }
 
-    ExecutorAddr InitAddr(B.getAddress().getValue() & ~(LineWidth - 1));
-    ExecutorAddr StartAddr = B.getAddress();
-    ExecutorAddr EndAddr = B.getAddress() + B.getSize();
+    JITTargetAddress InitAddr = B.getAddress() & ~(LineWidth - 1);
+    JITTargetAddress StartAddr = B.getAddress();
+    JITTargetAddress EndAddr = B.getAddress() + B.getSize();
     auto *Data = reinterpret_cast<const uint8_t *>(B.getContent().data());
 
-    for (ExecutorAddr CurAddr = InitAddr; CurAddr != EndAddr; ++CurAddr) {
+    for (JITTargetAddress CurAddr = InitAddr; CurAddr != EndAddr; ++CurAddr) {
       if (CurAddr % LineWidth == 0)
-        outs() << "          " << formatv("{0:x16}", CurAddr.getValue())
-               << ": ";
+        outs() << "          " << formatv("{0:x16}", CurAddr) << ": ";
       if (CurAddr < StartAddr)
         outs() << "   ";
       else

diff  --git a/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h b/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
index e834042f8bb24..ec78d9db40b6c 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/EHFrameSupport.h
@@ -25,24 +25,25 @@ namespace jitlink {
 class EHFrameRegistrar {
 public:
   virtual ~EHFrameRegistrar();
-  virtual Error registerEHFrames(orc::ExecutorAddr EHFrameSectionAddr,
+  virtual Error registerEHFrames(JITTargetAddress EHFrameSectionAddr,
                                  size_t EHFrameSectionSize) = 0;
-  virtual Error deregisterEHFrames(orc::ExecutorAddr EHFrameSectionAddr,
+  virtual Error deregisterEHFrames(JITTargetAddress EHFrameSectionAddr,
                                    size_t EHFrameSectionSize) = 0;
 };
 
 /// Registers / Deregisters EH-frames in the current process.
 class InProcessEHFrameRegistrar final : public EHFrameRegistrar {
 public:
-  Error registerEHFrames(orc::ExecutorAddr EHFrameSectionAddr,
+  Error registerEHFrames(JITTargetAddress EHFrameSectionAddr,
                          size_t EHFrameSectionSize) override;
 
-  Error deregisterEHFrames(orc::ExecutorAddr EHFrameSectionAddr,
+  Error deregisterEHFrames(JITTargetAddress EHFrameSectionAddr,
                            size_t EHFrameSectionSize) override;
 };
 
-using StoreFrameRangeFunction = std::function<void(
-    orc::ExecutorAddr EHFrameSectionAddr, size_t EHFrameSectionSize)>;
+using StoreFrameRangeFunction =
+  std::function<void(JITTargetAddress EHFrameSectionAddr,
+                     size_t EHFrameSectionSize)>;
 
 /// Creates a pass that records the address and size of the EH frame section.
 /// If no eh-frame section is found then the address and size will both be given

diff  --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
index d0d497b75d9dd..69106fcb4c282 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLink.h
@@ -104,10 +104,10 @@ class Addressable {
   friend class LinkGraph;
 
 protected:
-  Addressable(orc::ExecutorAddr Address, bool IsDefined)
+  Addressable(JITTargetAddress Address, bool IsDefined)
       : Address(Address), IsDefined(IsDefined), IsAbsolute(false) {}
 
-  Addressable(orc::ExecutorAddr Address)
+  Addressable(JITTargetAddress Address)
       : Address(Address), IsDefined(false), IsAbsolute(true) {
     assert(!(IsDefined && IsAbsolute) &&
            "Block cannot be both defined and absolute");
@@ -119,8 +119,8 @@ class Addressable {
   Addressable(Addressable &&) = delete;
   Addressable &operator=(Addressable &&) = default;
 
-  orc::ExecutorAddr getAddress() const { return Address; }
-  void setAddress(orc::ExecutorAddr Address) { this->Address = Address; }
+  JITTargetAddress getAddress() const { return Address; }
+  void setAddress(JITTargetAddress Address) { this->Address = Address; }
 
   /// Returns true if this is a defined addressable, in which case you
   /// can downcast this to a Block.
@@ -133,7 +133,7 @@ class Addressable {
     this->IsAbsolute = IsAbsolute;
   }
 
-  orc::ExecutorAddr Address;
+  JITTargetAddress Address = 0;
   uint64_t IsDefined : 1;
   uint64_t IsAbsolute : 1;
 
@@ -152,7 +152,7 @@ class Block : public Addressable {
 
 private:
   /// Create a zero-fill defined addressable.
-  Block(Section &Parent, orc::ExecutorAddrDiff Size, orc::ExecutorAddr Address,
+  Block(Section &Parent, JITTargetAddress Size, JITTargetAddress Address,
         uint64_t Alignment, uint64_t AlignmentOffset)
       : Addressable(Address, true), Parent(&Parent), Size(Size) {
     assert(isPowerOf2_64(Alignment) && "Alignment must be power of 2");
@@ -168,7 +168,7 @@ class Block : public Addressable {
   /// Create a defined addressable for the given content.
   /// The Content is assumed to be non-writable, and will be copied when
   /// mutations are required.
-  Block(Section &Parent, ArrayRef<char> Content, orc::ExecutorAddr Address,
+  Block(Section &Parent, ArrayRef<char> Content, JITTargetAddress Address,
         uint64_t Alignment, uint64_t AlignmentOffset)
       : Addressable(Address, true), Parent(&Parent), Data(Content.data()),
         Size(Content.size()) {
@@ -188,7 +188,7 @@ class Block : public Addressable {
   /// The standard way to achieve this is to allocate it on the Graph's
   /// allocator.
   Block(Section &Parent, MutableArrayRef<char> Content,
-        orc::ExecutorAddr Address, uint64_t Alignment, uint64_t AlignmentOffset)
+        JITTargetAddress Address, uint64_t Alignment, uint64_t AlignmentOffset)
       : Addressable(Address, true), Parent(&Parent), Data(Content.data()),
         Size(Content.size()) {
     assert(isPowerOf2_64(Alignment) && "Alignment must be power of 2");
@@ -328,7 +328,7 @@ class Block : public Addressable {
 
   /// Returns the address of the fixup for the given edge, which is equal to
   /// this block's address plus the edge's offset.
-  orc::ExecutorAddr getFixupAddress(const Edge &E) const {
+  JITTargetAddress getFixupAddress(const Edge &E) const {
     return getAddress() + E.getOffset();
   }
 
@@ -343,17 +343,12 @@ class Block : public Addressable {
   std::vector<Edge> Edges;
 };
 
-// Align an address to conform with block alignment requirements.
-inline uint64_t alignToBlock(uint64_t Addr, Block &B) {
+// Align a JITTargetAddress to conform with block alignment requirements.
+inline JITTargetAddress alignToBlock(JITTargetAddress Addr, Block &B) {
   uint64_t Delta = (B.getAlignmentOffset() - Addr) % B.getAlignment();
   return Addr + Delta;
 }
 
-// Align a orc::ExecutorAddr to conform with block alignment requirements.
-inline orc::ExecutorAddr alignToBlock(orc::ExecutorAddr Addr, Block &B) {
-  return orc::ExecutorAddr(alignToBlock(Addr.getValue(), B));
-}
-
 /// Describes symbol linkage. This can be used to make resolve definition
 /// clashes.
 enum class Linkage : uint8_t {
@@ -396,8 +391,8 @@ class Symbol {
   friend class LinkGraph;
 
 private:
-  Symbol(Addressable &Base, orc::ExecutorAddrDiff Offset, StringRef Name,
-         orc::ExecutorAddrDiff Size, Linkage L, Scope S, bool IsLive,
+  Symbol(Addressable &Base, JITTargetAddress Offset, StringRef Name,
+         JITTargetAddress Size, Linkage L, Scope S, bool IsLive,
          bool IsCallable)
       : Name(Name), Base(&Base), Offset(Offset), Size(Size) {
     assert(Offset <= MaxOffset && "Offset out of range");
@@ -408,8 +403,7 @@ class Symbol {
   }
 
   static Symbol &constructCommon(void *SymStorage, Block &Base, StringRef Name,
-                                 orc::ExecutorAddrDiff Size, Scope S,
-                                 bool IsLive) {
+                                 JITTargetAddress Size, Scope S, bool IsLive) {
     assert(SymStorage && "Storage cannot be null");
     assert(!Name.empty() && "Common symbol name cannot be empty");
     assert(Base.isDefined() &&
@@ -422,7 +416,7 @@ class Symbol {
   }
 
   static Symbol &constructExternal(void *SymStorage, Addressable &Base,
-                                   StringRef Name, orc::ExecutorAddrDiff Size,
+                                   StringRef Name, JITTargetAddress Size,
                                    Linkage L) {
     assert(SymStorage && "Storage cannot be null");
     assert(!Base.isDefined() &&
@@ -434,7 +428,7 @@ class Symbol {
   }
 
   static Symbol &constructAbsolute(void *SymStorage, Addressable &Base,
-                                   StringRef Name, orc::ExecutorAddrDiff Size,
+                                   StringRef Name, JITTargetAddress Size,
                                    Linkage L, Scope S, bool IsLive) {
     assert(SymStorage && "Storage cannot be null");
     assert(!Base.isDefined() &&
@@ -445,8 +439,8 @@ class Symbol {
   }
 
   static Symbol &constructAnonDef(void *SymStorage, Block &Base,
-                                  orc::ExecutorAddrDiff Offset,
-                                  orc::ExecutorAddrDiff Size, bool IsCallable,
+                                  JITTargetAddress Offset,
+                                  JITTargetAddress Size, bool IsCallable,
                                   bool IsLive) {
     assert(SymStorage && "Storage cannot be null");
     assert((Offset + Size) <= Base.getSize() &&
@@ -458,9 +452,9 @@ class Symbol {
   }
 
   static Symbol &constructNamedDef(void *SymStorage, Block &Base,
-                                   orc::ExecutorAddrDiff Offset, StringRef Name,
-                                   orc::ExecutorAddrDiff Size, Linkage L,
-                                   Scope S, bool IsLive, bool IsCallable) {
+                                   JITTargetAddress Offset, StringRef Name,
+                                   JITTargetAddress Size, Linkage L, Scope S,
+                                   bool IsLive, bool IsCallable) {
     assert(SymStorage && "Storage cannot be null");
     assert((Offset + Size) <= Base.getSize() &&
            "Symbol extends past end of block");
@@ -558,16 +552,16 @@ class Symbol {
   }
 
   /// Returns the offset for this symbol within the underlying addressable.
-  orc::ExecutorAddrDiff getOffset() const { return Offset; }
+  JITTargetAddress getOffset() const { return Offset; }
 
   /// Returns the address of this symbol.
-  orc::ExecutorAddr getAddress() const { return Base->getAddress() + Offset; }
+  JITTargetAddress getAddress() const { return Base->getAddress() + Offset; }
 
   /// Returns the size of this symbol.
-  orc::ExecutorAddrDiff getSize() const { return Size; }
+  JITTargetAddress getSize() const { return Size; }
 
   /// Set the size of this symbol.
-  void setSize(orc::ExecutorAddrDiff Size) {
+  void setSize(JITTargetAddress Size) {
     assert(Base && "Cannot set size for null Symbol");
     assert((Size == 0 || Base->isDefined()) &&
            "Non-zero size can only be set for defined symbols");
@@ -628,7 +622,7 @@ class Symbol {
 
   void setBlock(Block &B) { Base = &B; }
 
-  void setOffset(orc::ExecutorAddrDiff NewOffset) {
+  void setOffset(uint64_t NewOffset) {
     assert(NewOffset <= MaxOffset && "Offset out of range");
     Offset = NewOffset;
   }
@@ -643,7 +637,7 @@ class Symbol {
   uint64_t S : 2;
   uint64_t IsLive : 1;
   uint64_t IsCallable : 1;
-  orc::ExecutorAddrDiff Size = 0;
+  JITTargetAddress Size = 0;
 };
 
 raw_ostream &operator<<(raw_ostream &OS, const Symbol &A);
@@ -789,13 +783,13 @@ class SectionRange {
     assert((First || !Last) && "Last can not be null if start is non-null");
     return !First;
   }
-  orc::ExecutorAddr getStart() const {
-    return First ? First->getAddress() : orc::ExecutorAddr();
+  JITTargetAddress getStart() const {
+    return First ? First->getAddress() : 0;
   }
-  orc::ExecutorAddr getEnd() const {
-    return Last ? Last->getAddress() + Last->getSize() : orc::ExecutorAddr();
+  JITTargetAddress getEnd() const {
+    return Last ? Last->getAddress() + Last->getSize() : 0;
   }
-  orc::ExecutorAddrDiff getSize() const { return getEnd() - getStart(); }
+  uint64_t getSize() const { return getEnd() - getStart(); }
 
 private:
   Block *First = nullptr;
@@ -1001,7 +995,7 @@ class LinkGraph {
 
   /// Create a content block.
   Block &createContentBlock(Section &Parent, ArrayRef<char> Content,
-                            orc::ExecutorAddr Address, uint64_t Alignment,
+                            uint64_t Address, uint64_t Alignment,
                             uint64_t AlignmentOffset) {
     return createBlock(Parent, Content, Address, Alignment, AlignmentOffset);
   }
@@ -1009,17 +1003,15 @@ class LinkGraph {
   /// Create a content block with initially mutable data.
   Block &createMutableContentBlock(Section &Parent,
                                    MutableArrayRef<char> MutableContent,
-                                   orc::ExecutorAddr Address,
-                                   uint64_t Alignment,
+                                   uint64_t Address, uint64_t Alignment,
                                    uint64_t AlignmentOffset) {
     return createBlock(Parent, MutableContent, Address, Alignment,
                        AlignmentOffset);
   }
 
   /// Create a zero-fill block.
-  Block &createZeroFillBlock(Section &Parent, orc::ExecutorAddrDiff Size,
-                             orc::ExecutorAddr Address, uint64_t Alignment,
-                             uint64_t AlignmentOffset) {
+  Block &createZeroFillBlock(Section &Parent, uint64_t Size, uint64_t Address,
+                             uint64_t Alignment, uint64_t AlignmentOffset) {
     return createBlock(Parent, Size, Address, Alignment, AlignmentOffset);
   }
 
@@ -1069,24 +1061,22 @@ class LinkGraph {
   /// present during lookup: Externals with strong linkage must be found or
   /// an error will be emitted. Externals with weak linkage are permitted to
   /// be undefined, in which case they are assigned a value of 0.
-  Symbol &addExternalSymbol(StringRef Name, orc::ExecutorAddrDiff Size,
-                            Linkage L) {
+  Symbol &addExternalSymbol(StringRef Name, uint64_t Size, Linkage L) {
     assert(llvm::count_if(ExternalSymbols,
                           [&](const Symbol *Sym) {
                             return Sym->getName() == Name;
                           }) == 0 &&
            "Duplicate external symbol");
-    auto &Sym = Symbol::constructExternal(
-        Allocator.Allocate<Symbol>(),
-        createAddressable(orc::ExecutorAddr(), false), Name, Size, L);
+    auto &Sym =
+        Symbol::constructExternal(Allocator.Allocate<Symbol>(),
+                                  createAddressable(0, false), Name, Size, L);
     ExternalSymbols.insert(&Sym);
     return Sym;
   }
 
   /// Add an absolute symbol.
-  Symbol &addAbsoluteSymbol(StringRef Name, orc::ExecutorAddr Address,
-                            orc::ExecutorAddrDiff Size, Linkage L, Scope S,
-                            bool IsLive) {
+  Symbol &addAbsoluteSymbol(StringRef Name, JITTargetAddress Address,
+                            uint64_t Size, Linkage L, Scope S, bool IsLive) {
     assert(llvm::count_if(AbsoluteSymbols,
                           [&](const Symbol *Sym) {
                             return Sym->getName() == Name;
@@ -1101,7 +1091,7 @@ class LinkGraph {
 
   /// Convenience method for adding a weak zero-fill symbol.
   Symbol &addCommonSymbol(StringRef Name, Scope S, Section &Section,
-                          orc::ExecutorAddr Address, orc::ExecutorAddrDiff Size,
+                          JITTargetAddress Address, uint64_t Size,
                           uint64_t Alignment, bool IsLive) {
     assert(llvm::count_if(defined_symbols(),
                           [&](const Symbol *Sym) {
@@ -1117,8 +1107,8 @@ class LinkGraph {
   }
 
   /// Add an anonymous symbol.
-  Symbol &addAnonymousSymbol(Block &Content, orc::ExecutorAddrDiff Offset,
-                             orc::ExecutorAddrDiff Size, bool IsCallable,
+  Symbol &addAnonymousSymbol(Block &Content, JITTargetAddress Offset,
+                             JITTargetAddress Size, bool IsCallable,
                              bool IsLive) {
     auto &Sym = Symbol::constructAnonDef(Allocator.Allocate<Symbol>(), Content,
                                          Offset, Size, IsCallable, IsLive);
@@ -1127,9 +1117,9 @@ class LinkGraph {
   }
 
   /// Add a named symbol.
-  Symbol &addDefinedSymbol(Block &Content, orc::ExecutorAddrDiff Offset,
-                           StringRef Name, orc::ExecutorAddrDiff Size,
-                           Linkage L, Scope S, bool IsCallable, bool IsLive) {
+  Symbol &addDefinedSymbol(Block &Content, JITTargetAddress Offset,
+                           StringRef Name, JITTargetAddress Size, Linkage L,
+                           Scope S, bool IsCallable, bool IsLive) {
     assert((S == Scope::Local || llvm::count_if(defined_symbols(),
                                                 [&](const Symbol *Sym) {
                                                   return Sym->getName() == Name;
@@ -1203,7 +1193,7 @@ class LinkGraph {
       assert(Sym.isDefined() && "Sym is not a defined symbol");
       Section &Sec = Sym.getBlock().getSection();
       Sec.removeSymbol(Sym);
-      Sym.makeExternal(createAddressable(orc::ExecutorAddr(), false));
+      Sym.makeExternal(createAddressable(0, false));
     }
     ExternalSymbols.insert(&Sym);
   }
@@ -1213,7 +1203,7 @@ class LinkGraph {
   ///
   /// Symbol size, linkage, scope, and callability, and liveness will be left
   /// unchanged. Symbol offset will be reset to 0.
-  void makeAbsolute(Symbol &Sym, orc::ExecutorAddr Address) {
+  void makeAbsolute(Symbol &Sym, JITTargetAddress Address) {
     assert(!Sym.isAbsolute() && "Symbol is already absolute");
     if (Sym.isExternal()) {
       assert(ExternalSymbols.count(&Sym) &&
@@ -1232,9 +1222,8 @@ class LinkGraph {
 
   /// Turn an absolute or external symbol into a defined one by attaching it to
   /// a block. Symbol must not already be defined.
-  void makeDefined(Symbol &Sym, Block &Content, orc::ExecutorAddrDiff Offset,
-                   orc::ExecutorAddrDiff Size, Linkage L, Scope S,
-                   bool IsLive) {
+  void makeDefined(Symbol &Sym, Block &Content, JITTargetAddress Offset,
+                   JITTargetAddress Size, Linkage L, Scope S, bool IsLive) {
     assert(!Sym.isDefined() && "Sym is already a defined symbol");
     if (Sym.isAbsolute()) {
       assert(AbsoluteSymbols.count(&Sym) &&
@@ -1266,15 +1255,15 @@ class LinkGraph {
   ///
   /// All other symbol attributes are unchanged.
   void transferDefinedSymbol(Symbol &Sym, Block &DestBlock,
-                             orc::ExecutorAddrDiff NewOffset,
-                             Optional<orc::ExecutorAddrDiff> ExplicitNewSize) {
+                             JITTargetAddress NewOffset,
+                             Optional<JITTargetAddress> ExplicitNewSize) {
     auto &OldSection = Sym.getBlock().getSection();
     Sym.setBlock(DestBlock);
     Sym.setOffset(NewOffset);
     if (ExplicitNewSize)
       Sym.setSize(*ExplicitNewSize);
     else {
-      auto RemainingBlockSize = DestBlock.getSize() - NewOffset;
+      JITTargetAddress RemainingBlockSize = DestBlock.getSize() - NewOffset;
       if (Sym.getSize() > RemainingBlockSize)
         Sym.setSize(RemainingBlockSize);
     }
@@ -1418,14 +1407,14 @@ inline MutableArrayRef<char> Block::getMutableContent(LinkGraph &G) {
 /// Enables easy lookup of blocks by addresses.
 class BlockAddressMap {
 public:
-  using AddrToBlockMap = std::map<orc::ExecutorAddr, Block *>;
+  using AddrToBlockMap = std::map<JITTargetAddress, Block *>;
   using const_iterator = AddrToBlockMap::const_iterator;
 
   /// A block predicate that always adds all blocks.
   static bool includeAllBlocks(const Block &B) { return true; }
 
   /// A block predicate that always includes blocks with non-null addresses.
-  static bool includeNonNull(const Block &B) { return !!B.getAddress(); }
+  static bool includeNonNull(const Block &B) { return B.getAddress(); }
 
   BlockAddressMap() = default;
 
@@ -1489,7 +1478,7 @@ class BlockAddressMap {
 
   /// Returns the block starting at the given address, or nullptr if no such
   /// block exists.
-  Block *getBlockAt(orc::ExecutorAddr Addr) const {
+  Block *getBlockAt(JITTargetAddress Addr) const {
     auto I = AddrToBlock.find(Addr);
     if (I == AddrToBlock.end())
       return nullptr;
@@ -1498,7 +1487,7 @@ class BlockAddressMap {
 
   /// Returns the block covering the given address, or nullptr if no such block
   /// exists.
-  Block *getBlockCovering(orc::ExecutorAddr Addr) const {
+  Block *getBlockCovering(JITTargetAddress Addr) const {
     auto I = AddrToBlock.upper_bound(Addr);
     if (I == AddrToBlock.begin())
       return nullptr;
@@ -1515,11 +1504,10 @@ class BlockAddressMap {
         ExistingBlock.getAddress() + ExistingBlock.getSize();
     return make_error<JITLinkError>(
         "Block at " +
-        formatv("{0:x16} -- {1:x16}", NewBlock.getAddress().getValue(),
-                NewBlockEnd.getValue()) +
+        formatv("{0:x16} -- {1:x16}", NewBlock.getAddress(), NewBlockEnd) +
         " overlaps " +
-        formatv("{0:x16} -- {1:x16}", ExistingBlock.getAddress().getValue(),
-                ExistingBlockEnd.getValue()));
+        formatv("{0:x16} -- {1:x16}", ExistingBlock.getAddress(),
+                ExistingBlockEnd));
   }
 
   AddrToBlockMap AddrToBlock;
@@ -1544,7 +1532,7 @@ class SymbolAddressMap {
 
   /// Returns the list of symbols that start at the given address, or nullptr if
   /// no such symbols exist.
-  const SymbolVector *getSymbolsAt(orc::ExecutorAddr Addr) const {
+  const SymbolVector *getSymbolsAt(JITTargetAddress Addr) const {
     auto I = AddrToSymbols.find(Addr);
     if (I == AddrToSymbols.end())
       return nullptr;
@@ -1552,7 +1540,7 @@ class SymbolAddressMap {
   }
 
 private:
-  std::map<orc::ExecutorAddr, SymbolVector> AddrToSymbols;
+  std::map<JITTargetAddress, SymbolVector> AddrToSymbols;
 };
 
 /// A function for mutating LinkGraphs.

diff  --git a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
index 179a8b946cf35..7dd382facde8a 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/JITLinkMemoryManager.h
@@ -13,10 +13,9 @@
 #ifndef LLVM_EXECUTIONENGINE_JITLINK_JITLINKMEMORYMANAGER_H
 #define LLVM_EXECUTIONENGINE_JITLINK_JITLINKMEMORYMANAGER_H
 
-#include "llvm/ADT/FunctionExtras.h"
 #include "llvm/ExecutionEngine/JITLink/JITLinkDylib.h"
 #include "llvm/ExecutionEngine/JITLink/MemoryFlags.h"
-#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"
+#include "llvm/ExecutionEngine/JITSymbol.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/MSVCErrorWorkarounds.h"
@@ -50,9 +49,9 @@ class Section;
 /// executor-side implementation code is responsible for freeing the error
 /// string).
 struct AllocActionCall {
-  orc::ExecutorAddr FnAddr;
-  orc::ExecutorAddr CtxAddr;
-  orc::ExecutorAddrDiff CtxSize;
+  JITTargetAddress FnAddr = 0;
+  JITTargetAddress CtxAddr = 0;
+  JITTargetAddress CtxSize = 0;
 };
 
 /// A pair of AllocActionCalls, one to be run at finalization time, one to be
@@ -94,48 +93,47 @@ class JITLinkMemoryManager {
   class FinalizedAlloc {
     friend class JITLinkMemoryManager;
 
-    static constexpr auto InvalidAddr = ~uint64_t(0);
-
   public:
+    static constexpr JITTargetAddress InvalidAddr = ~JITTargetAddress(0);
+
     FinalizedAlloc() = default;
-    explicit FinalizedAlloc(orc::ExecutorAddr A) : A(A) {
-      assert(A && "Explicitly creating an invalid allocation?");
+    explicit FinalizedAlloc(JITTargetAddress A) : A(A) {
+      assert(A != 0 && "Explicitly creating an invalid allocation?");
     }
     FinalizedAlloc(const FinalizedAlloc &) = delete;
     FinalizedAlloc(FinalizedAlloc &&Other) : A(Other.A) {
-      Other.A.setValue(InvalidAddr);
+      Other.A = InvalidAddr;
     }
     FinalizedAlloc &operator=(const FinalizedAlloc &) = delete;
     FinalizedAlloc &operator=(FinalizedAlloc &&Other) {
-      assert(A.getValue() == InvalidAddr &&
+      assert(A == InvalidAddr &&
              "Cannot overwrite active finalized allocation");
       std::swap(A, Other.A);
       return *this;
     }
     ~FinalizedAlloc() {
-      assert(A.getValue() == InvalidAddr &&
-             "Finalized allocation was not deallocated");
+      assert(A == InvalidAddr && "Finalized allocation was not deallocated");
     }
 
     /// FinalizedAllocs convert to false for default-constructed, and
     /// true otherwise. Default-constructed allocs need not be deallocated.
-    explicit operator bool() const { return A.getValue() != InvalidAddr; }
+    explicit operator bool() const { return A != InvalidAddr; }
 
     /// Returns the address associated with this finalized allocation.
     /// The allocation is unmodified.
-    orc::ExecutorAddr getAddress() const { return A; }
+    JITTargetAddress getAddress() const { return A; }
 
     /// Returns the address associated with this finalized allocation and
     /// resets this object to the default state.
     /// This should only be used by allocators when deallocating memory.
-    orc::ExecutorAddr release() {
-      orc::ExecutorAddr Tmp = A;
-      A.setValue(InvalidAddr);
+    JITTargetAddress release() {
+      JITTargetAddress Tmp = A;
+      A = InvalidAddr;
       return Tmp;
     }
 
   private:
-    orc::ExecutorAddr A{InvalidAddr};
+    JITTargetAddress A = InvalidAddr;
   };
 
   /// Represents an allocation which has not been finalized yet.
@@ -265,7 +263,7 @@ class BasicLayout {
     Align Alignment;
     size_t ContentSize;
     uint64_t ZeroFillSize;
-    orc::ExecutorAddr Addr;
+    JITTargetAddress Addr;
     char *WorkingMem = nullptr;
 
   private:
@@ -343,7 +341,7 @@ class SimpleSegmentAlloc {
 
   /// Describes the segment working memory and executor address.
   struct SegmentInfo {
-    orc::ExecutorAddr Addr;
+    JITTargetAddress Addr = 0;
     MutableArrayRef<char> WorkingMem;
   };
 

diff  --git a/llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h b/llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h
index 4a4e8d15be664..3130ea3815344 100644
--- a/llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h
+++ b/llvm/include/llvm/ExecutionEngine/JITLink/x86_64.h
@@ -368,18 +368,18 @@ inline Error applyFixup(LinkGraph &G, Block &B, const Edge &E,
 
   char *BlockWorkingMem = B.getAlreadyMutableContent().data();
   char *FixupPtr = BlockWorkingMem + E.getOffset();
-  auto FixupAddress = B.getAddress() + E.getOffset();
+  JITTargetAddress FixupAddress = B.getAddress() + E.getOffset();
 
   switch (E.getKind()) {
 
   case Pointer64: {
-    uint64_t Value = E.getTarget().getAddress().getValue() + E.getAddend();
+    uint64_t Value = E.getTarget().getAddress() + E.getAddend();
     *(ulittle64_t *)FixupPtr = Value;
     break;
   }
 
   case Pointer32: {
-    uint64_t Value = E.getTarget().getAddress().getValue() + E.getAddend();
+    uint64_t Value = E.getTarget().getAddress() + E.getAddend();
     if (LLVM_LIKELY(isInRangeForImmU32(Value)))
       *(ulittle32_t *)FixupPtr = Value;
     else
@@ -387,7 +387,7 @@ inline Error applyFixup(LinkGraph &G, Block &B, const Edge &E,
     break;
   }
   case Pointer32Signed: {
-    int64_t Value = E.getTarget().getAddress().getValue() + E.getAddend();
+    int64_t Value = E.getTarget().getAddress() + E.getAddend();
     if (LLVM_LIKELY(isInRangeForImmS32(Value)))
       *(little32_t *)FixupPtr = Value;
     else
@@ -483,8 +483,8 @@ extern const char PointerJumpStubContent[6];
 inline Symbol &createAnonymousPointer(LinkGraph &G, Section &PointerSection,
                                       Symbol *InitialTarget = nullptr,
                                       uint64_t InitialAddend = 0) {
-  auto &B = G.createContentBlock(PointerSection, NullPointerContent,
-                                 orc::ExecutorAddr(~uint64_t(7)), 8, 0);
+  auto &B =
+      G.createContentBlock(PointerSection, NullPointerContent, ~7ULL, 8, 0);
   if (InitialTarget)
     B.addEdge(Pointer64, 0, *InitialTarget, InitialAddend);
   return G.addAnonymousSymbol(B, 0, 8, false, false);
@@ -498,8 +498,8 @@ inline Symbol &createAnonymousPointer(LinkGraph &G, Section &PointerSection,
 ///   address: highest allowable: (~5U)
 inline Block &createPointerJumpStubBlock(LinkGraph &G, Section &StubSection,
                                          Symbol &PointerSymbol) {
-  auto &B = G.createContentBlock(StubSection, PointerJumpStubContent,
-                                 orc::ExecutorAddr(~uint64_t(5)), 1, 0);
+  auto &B =
+      G.createContentBlock(StubSection, PointerJumpStubContent, ~5ULL, 1, 0);
   B.addEdge(Delta32, 2, PointerSymbol, -4);
   return B;
 }
@@ -552,7 +552,8 @@ class GOTTableManager : public TableManager<GOTTableManager> {
            "Fell through switch, but no new kind to set");
     DEBUG_WITH_TYPE("jitlink", {
       dbgs() << "  Fixing " << G.getEdgeKindName(E.getKind()) << " edge at "
-             << B->getFixupAddress(E) << " (" << B->getAddress() << " + "
+             << formatv("{0:x}", B->getFixupAddress(E)) << " ("
+             << formatv("{0:x}", B->getAddress()) << " + "
              << formatv("{0:x}", E.getOffset()) << ")\n";
     });
     E.setKind(KindToSet);
@@ -585,7 +586,8 @@ class PLTTableManager : public TableManager<PLTTableManager> {
     if (E.getKind() == x86_64::BranchPCRel32 && !E.getTarget().isDefined()) {
       DEBUG_WITH_TYPE("jitlink", {
         dbgs() << "  Fixing " << G.getEdgeKindName(E.getKind()) << " edge at "
-               << B->getFixupAddress(E) << " (" << B->getAddress() << " + "
+               << formatv("{0:x}", B->getFixupAddress(E)) << " ("
+               << formatv("{0:x}", B->getAddress()) << " + "
                << formatv("{0:x}", E.getOffset()) << ")\n";
       });
       // Set the edge kind to Branch32ToPtrJumpStubBypassable to enable it to

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h b/llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h
index 8f1bf854843f1..20da3e3b89eb4 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ELFNixPlatform.h
@@ -236,7 +236,7 @@ class ELFNixPlatform : public Platform {
   DenseMap<JITDylib *, ELFNixJITDylibInitializers> InitSeqs;
   std::vector<ELFPerObjectSectionsToRegister> BootstrapPOSRs;
 
-  DenseMap<ExecutorAddr, JITDylib *> HandleAddrToJITDylib;
+  DenseMap<JITTargetAddress, JITDylib *> HandleAddrToJITDylib;
   DenseMap<JITDylib *, uint64_t> JITDylibToPThreadKey;
 };
 

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h b/llvm/include/llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h
index 3b34400894dfa..6d113a7bdf1a4 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/EPCEHFrameRegistrar.h
@@ -39,9 +39,9 @@ class EPCEHFrameRegistrar : public jitlink::EHFrameRegistrar {
       : ES(ES), RegisterEHFrameWrapperFnAddr(RegisterEHFrameWrapperFnAddr),
         DeregisterEHFrameWrapperFnAddr(DeregisterEHFRameWrapperFnAddr) {}
 
-  Error registerEHFrames(ExecutorAddr EHFrameSectionAddr,
+  Error registerEHFrames(JITTargetAddress EHFrameSectionAddr,
                          size_t EHFrameSectionSize) override;
-  Error deregisterEHFrames(ExecutorAddr EHFrameSectionAddr,
+  Error deregisterEHFrames(JITTargetAddress EHFrameSectionAddr,
                            size_t EHFrameSectionSize) override;
 
 private:

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h b/llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h
index 18656d03e4416..b9825f17ec17c 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.h
@@ -85,7 +85,7 @@ class SPSSerializationTraits<SPSExecutorAddr,
     ExecutorAddr A;
     if (!SPSArgList<SPSExecutorAddr>::deserialize(IB, A))
       return false;
-    FA = jitlink::JITLinkMemoryManager::FinalizedAlloc(A);
+    FA = jitlink::JITLinkMemoryManager::FinalizedAlloc(A.getValue());
     return true;
   }
 };

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h b/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
index 9482f20ecec66..d7b5e2eda6ee8 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/MachOPlatform.h
@@ -239,7 +239,7 @@ class MachOPlatform : public Platform {
   std::mutex PlatformMutex;
   DenseMap<JITDylib *, MachOJITDylibInitializers> InitSeqs;
 
-  DenseMap<ExecutorAddr, JITDylib *> HeaderAddrToJITDylib;
+  DenseMap<JITTargetAddress, JITDylib *> HeaderAddrToJITDylib;
   DenseMap<JITDylib *, uint64_t> JITDylibToPThreadKey;
 };
 

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h b/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
index e22d7f7de814e..109922a46e26a 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/ObjectLinkingLayer.h
@@ -222,7 +222,7 @@ class EHFrameRegistrationPlugin : public ObjectLinkingLayer::Plugin {
 private:
 
   struct EHFrameRange {
-    orc::ExecutorAddr Addr;
+    JITTargetAddress Addr = 0;
     size_t Size;
   };
 

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
index 1abc9508d93a8..2d316b9de0076 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
@@ -13,10 +13,7 @@
 #ifndef LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORADDRESS_H
 #define LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORADDRESS_H
 
-#include "llvm/ADT/DenseMapInfo.h"
 #include "llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h"
-#include "llvm/Support/FormatVariadic.h"
-#include "llvm/Support/raw_ostream.h"
 
 #include <cassert>
 #include <type_traits>
@@ -32,7 +29,7 @@ class ExecutorAddr {
   ExecutorAddr() = default;
 
   /// Create an ExecutorAddr from the given value.
-  explicit constexpr ExecutorAddr(uint64_t Addr) : Addr(Addr) {}
+  explicit ExecutorAddr(uint64_t Addr) : Addr(Addr) {}
 
   /// Create an ExecutorAddr from the given pointer.
   /// Warning: This should only be used when JITing in-process.
@@ -91,12 +88,12 @@ class ExecutorAddr {
   ExecutorAddr operator++(int) { return ExecutorAddr(Addr++); }
   ExecutorAddr operator--(int) { return ExecutorAddr(Addr--); }
 
-  ExecutorAddr &operator+=(const ExecutorAddrDiff &Delta) {
+  ExecutorAddr &operator+=(const ExecutorAddrDiff Delta) {
     Addr += Delta;
     return *this;
   }
 
-  ExecutorAddr &operator-=(const ExecutorAddrDiff &Delta) {
+  ExecutorAddr &operator-=(const ExecutorAddrDiff Delta) {
     Addr -= Delta;
     return *this;
   }
@@ -123,18 +120,6 @@ inline ExecutorAddr operator+(const ExecutorAddrDiff &LHS,
   return ExecutorAddr(LHS + RHS.getValue());
 }
 
-/// Subtracting an offset from an address yields an address.
-inline ExecutorAddr operator-(const ExecutorAddr &LHS,
-                              const ExecutorAddrDiff &RHS) {
-  return ExecutorAddr(LHS.getValue() - RHS);
-}
-
-/// Taking the modulus of an address and a 
diff  yields a 
diff .
-inline ExecutorAddrDiff operator%(const ExecutorAddr &LHS,
-                                  const ExecutorAddrDiff &RHS) {
-  return ExecutorAddrDiff(LHS.getValue() % RHS);
-}
-
 /// Represents an address range in the exceutor process.
 struct ExecutorAddrRange {
   ExecutorAddrRange() = default;
@@ -163,10 +148,6 @@ struct ExecutorAddrRange {
   ExecutorAddr End;
 };
 
-inline raw_ostream &operator<<(raw_ostream &OS, const ExecutorAddr &A) {
-  return OS << formatv("{0:x}", A.getValue());
-}
-
 namespace shared {
 
 class SPSExecutorAddr {};
@@ -217,26 +198,6 @@ using SPSExecutorAddrRangeSequence = SPSSequence<SPSExecutorAddrRange>;
 
 } // End namespace shared.
 } // End namespace orc.
-
-// Provide DenseMapInfo for ExecutorAddrs.
-template <> struct DenseMapInfo<orc::ExecutorAddr> {
-  static inline orc::ExecutorAddr getEmptyKey() {
-    return orc::ExecutorAddr(DenseMapInfo<uint64_t>::getEmptyKey());
-  }
-  static inline orc::ExecutorAddr getTombstoneKey() {
-    return orc::ExecutorAddr(DenseMapInfo<uint64_t>::getTombstoneKey());
-  }
-
-  static unsigned getHashValue(const orc::ExecutorAddr &Addr) {
-    return DenseMapInfo<uint64_t>::getHashValue(Addr.getValue());
-  }
-
-  static bool isEqual(const orc::ExecutorAddr &LHS,
-                      const orc::ExecutorAddr &RHS) {
-    return DenseMapInfo<uint64_t>::isEqual(LHS.getValue(), RHS.getValue());
-  }
-};
-
 } // End namespace llvm.
 
 #endif // LLVM_EXECUTIONENGINE_ORC_SHARED_EXECUTORADDRESS_H

diff  --git a/llvm/lib/ExecutionEngine/JITLink/DefineExternalSectionStartAndEndSymbols.h b/llvm/lib/ExecutionEngine/JITLink/DefineExternalSectionStartAndEndSymbols.h
index 159880e4b1529..8ae3bc2bf61de 100644
--- a/llvm/lib/ExecutionEngine/JITLink/DefineExternalSectionStartAndEndSymbols.h
+++ b/llvm/lib/ExecutionEngine/JITLink/DefineExternalSectionStartAndEndSymbols.h
@@ -52,13 +52,13 @@ class DefineExternalSectionStartAndEndSymbols {
         auto &SR = getSectionRange(*D.Sec);
         if (D.IsStart) {
           if (SR.empty())
-            G.makeAbsolute(*Sym, orc::ExecutorAddr());
+            G.makeAbsolute(*Sym, 0);
           else
             G.makeDefined(*Sym, *SR.getFirstBlock(), 0, 0, Linkage::Strong,
                           Scope::Local, false);
         } else {
           if (SR.empty())
-            G.makeAbsolute(*Sym, orc::ExecutorAddr());
+            G.makeAbsolute(*Sym, 0);
           else
             G.makeDefined(*Sym, *SR.getLastBlock(),
                           SR.getLastBlock()->getSize(), 0, Linkage::Strong,

diff  --git a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
index 4d421b3e1ed3c..4d7d5ce266683 100644
--- a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
@@ -65,7 +65,10 @@ Error EHFrameSplitter::operator()(LinkGraph &G) {
 
 Error EHFrameSplitter::processBlock(LinkGraph &G, Block &B,
                                     LinkGraph::SplitBlockCache &Cache) {
-  LLVM_DEBUG(dbgs() << "  Processing block at " << B.getAddress() << "\n");
+  LLVM_DEBUG({
+    dbgs() << "  Processing block at " << formatv("{0:x16}", B.getAddress())
+           << "\n";
+  });
 
   // eh-frame should not contain zero-fill blocks.
   if (B.isZeroFill())
@@ -397,7 +400,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
                                    BlockEdgeMap &BlockEdges) {
   LLVM_DEBUG(dbgs() << "      Record is FDE\n");
 
-  orc::ExecutorAddr RecordAddress = B.getAddress() + RecordOffset;
+  JITTargetAddress RecordAddress = B.getAddress() + RecordOffset;
 
   auto RecordContent = B.getContent().slice(RecordOffset, RecordLength);
   BinaryStreamReader RecordReader(
@@ -415,8 +418,8 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
   {
     // Process the CIE pointer field.
     auto CIEEdgeItr = BlockEdges.find(RecordOffset + CIEDeltaFieldOffset);
-    orc::ExecutorAddr CIEAddress =
-        RecordAddress + orc::ExecutorAddrDiff(CIEDeltaFieldOffset - CIEDelta);
+    JITTargetAddress CIEAddress =
+        RecordAddress + CIEDeltaFieldOffset - CIEDelta;
     if (CIEEdgeItr == BlockEdges.end()) {
 
       LLVM_DEBUG({
@@ -453,7 +456,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
   {
     // Process the PC-Begin field.
     Block *PCBeginBlock = nullptr;
-    orc::ExecutorAddrDiff PCBeginFieldOffset = RecordReader.getOffset();
+    JITTargetAddress PCBeginFieldOffset = RecordReader.getOffset();
     auto PCEdgeItr = BlockEdges.find(RecordOffset + PCBeginFieldOffset);
     if (PCEdgeItr == BlockEdges.end()) {
       auto PCBeginPtrInfo =
@@ -461,12 +464,12 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
                              RecordAddress + PCBeginFieldOffset, RecordReader);
       if (!PCBeginPtrInfo)
         return PCBeginPtrInfo.takeError();
-      orc::ExecutorAddr PCBegin = PCBeginPtrInfo->first;
+      JITTargetAddress PCBegin = PCBeginPtrInfo->first;
       Edge::Kind PCBeginEdgeKind = PCBeginPtrInfo->second;
       LLVM_DEBUG({
         dbgs() << "        Adding edge at "
-               << (RecordAddress + PCBeginFieldOffset) << " to PC at "
-               << formatv("{0:x16}", PCBegin) << "\n";
+               << formatv("{0:x16}", RecordAddress + PCBeginFieldOffset)
+               << " to PC at " << formatv("{0:x16}", PCBegin) << "\n";
       });
       auto PCBeginSym = getOrCreateSymbol(PC, PCBegin);
       if (!PCBeginSym)
@@ -519,7 +522,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
     if (auto Err = RecordReader.readULEB128(AugmentationDataSize))
       return Err;
 
-    orc::ExecutorAddrDiff LSDAFieldOffset = RecordReader.getOffset();
+    JITTargetAddress LSDAFieldOffset = RecordReader.getOffset();
     auto LSDAEdgeItr = BlockEdges.find(RecordOffset + LSDAFieldOffset);
     if (LSDAEdgeItr == BlockEdges.end()) {
       auto LSDAPointerInfo =
@@ -527,7 +530,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
                              RecordAddress + LSDAFieldOffset, RecordReader);
       if (!LSDAPointerInfo)
         return LSDAPointerInfo.takeError();
-      orc::ExecutorAddr LSDA = LSDAPointerInfo->first;
+      JITTargetAddress LSDA = LSDAPointerInfo->first;
       Edge::Kind LSDAEdgeKind = LSDAPointerInfo->second;
       auto LSDASym = getOrCreateSymbol(PC, LSDA);
       if (!LSDASym)
@@ -642,10 +645,12 @@ unsigned EHFrameEdgeFixer::getPointerEncodingDataSize(uint8_t PointerEncoding) {
   }
 }
 
-Expected<std::pair<orc::ExecutorAddr, Edge::Kind>>
+Expected<std::pair<JITTargetAddress, Edge::Kind>>
 EHFrameEdgeFixer::readEncodedPointer(uint8_t PointerEncoding,
-                                     orc::ExecutorAddr PointerFieldAddress,
+                                     JITTargetAddress PointerFieldAddress,
                                      BinaryStreamReader &RecordReader) {
+  static_assert(sizeof(JITTargetAddress) == sizeof(uint64_t),
+                "Result must be able to hold a uint64_t");
   assert(isSupportedPointerEncoding(PointerEncoding) &&
          "Unsupported pointer encoding");
 
@@ -658,7 +663,7 @@ EHFrameEdgeFixer::readEncodedPointer(uint8_t PointerEncoding,
   if (EffectiveType == DW_EH_PE_absptr)
     EffectiveType = (PointerSize == 8) ? DW_EH_PE_udata8 : DW_EH_PE_udata4;
 
-  orc::ExecutorAddr Addr;
+  JITTargetAddress Addr;
   Edge::Kind PointerEdgeKind = Edge::Invalid;
   switch (EffectiveType) {
   case DW_EH_PE_udata4: {
@@ -704,7 +709,7 @@ EHFrameEdgeFixer::readEncodedPointer(uint8_t PointerEncoding,
 }
 
 Expected<Symbol &> EHFrameEdgeFixer::getOrCreateSymbol(ParseContext &PC,
-                                                       orc::ExecutorAddr Addr) {
+                                                       JITTargetAddress Addr) {
   Symbol *CanonicalSym = nullptr;
 
   auto UpdateCanonicalSym = [&](Symbol *Sym) {
@@ -748,9 +753,8 @@ Error EHFrameNullTerminator::operator()(LinkGraph &G) {
            << EHFrameSectionName << "\n";
   });
 
-  auto &NullTerminatorBlock =
-      G.createContentBlock(*EHFrame, NullTerminatorBlockContent,
-                           orc::ExecutorAddr(~uint64_t(4)), 1, 0);
+  auto &NullTerminatorBlock = G.createContentBlock(
+      *EHFrame, NullTerminatorBlockContent, 0xfffffffffffffffc, 1, 0);
   G.addAnonymousSymbol(NullTerminatorBlock, 0, 4, false, true);
   return Error::success();
 }
@@ -758,15 +762,17 @@ Error EHFrameNullTerminator::operator()(LinkGraph &G) {
 EHFrameRegistrar::~EHFrameRegistrar() {}
 
 Error InProcessEHFrameRegistrar::registerEHFrames(
-    orc::ExecutorAddr EHFrameSectionAddr, size_t EHFrameSectionSize) {
-  return orc::registerEHFrameSection(EHFrameSectionAddr.toPtr<void *>(),
-                                     EHFrameSectionSize);
+    JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) {
+  return orc::registerEHFrameSection(
+      jitTargetAddressToPointer<void *>(EHFrameSectionAddr),
+      EHFrameSectionSize);
 }
 
 Error InProcessEHFrameRegistrar::deregisterEHFrames(
-    orc::ExecutorAddr EHFrameSectionAddr, size_t EHFrameSectionSize) {
-  return orc::deregisterEHFrameSection(EHFrameSectionAddr.toPtr<void *>(),
-                                       EHFrameSectionSize);
+    JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) {
+  return orc::deregisterEHFrameSection(
+      jitTargetAddressToPointer<void *>(EHFrameSectionAddr),
+      EHFrameSectionSize);
 }
 
 LinkGraphPassFunction
@@ -783,14 +789,14 @@ createEHFrameRecorderPass(const Triple &TT,
        StoreFrameRange = std::move(StoreRangeAddress)](LinkGraph &G) -> Error {
     // Search for a non-empty eh-frame and record the address of the first
     // symbol in it.
-    orc::ExecutorAddr Addr;
+    JITTargetAddress Addr = 0;
     size_t Size = 0;
     if (auto *S = G.findSectionByName(EHFrameSectionName)) {
       auto R = SectionRange(*S);
       Addr = R.getStart();
       Size = R.getSize();
     }
-    if (!Addr && Size != 0)
+    if (Addr == 0 && Size != 0)
       return make_error<JITLinkError>(
           StringRef(EHFrameSectionName) +
           " section can not have zero address with non-zero size");

diff  --git a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
index ef4b47b9aa28c..b4c4b0f7b0977 100644
--- a/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
+++ b/llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
@@ -71,12 +71,12 @@ class EHFrameEdgeFixer {
   };
 
   using BlockEdgeMap = DenseMap<Edge::OffsetT, EdgeTarget>;
-  using CIEInfosMap = DenseMap<orc::ExecutorAddr, CIEInformation>;
+  using CIEInfosMap = DenseMap<JITTargetAddress, CIEInformation>;
 
   struct ParseContext {
     ParseContext(LinkGraph &G) : G(G) {}
 
-    Expected<CIEInformation *> findCIEInfo(orc::ExecutorAddr Address) {
+    Expected<CIEInformation *> findCIEInfo(JITTargetAddress Address) {
       auto I = CIEInfos.find(Address);
       if (I == CIEInfos.end())
         return make_error<JITLinkError>("No CIE found at address " +
@@ -102,13 +102,12 @@ class EHFrameEdgeFixer {
 
   static bool isSupportedPointerEncoding(uint8_t PointerEncoding);
   unsigned getPointerEncodingDataSize(uint8_t PointerEncoding);
-  Expected<std::pair<orc::ExecutorAddr, Edge::Kind>>
+  Expected<std::pair<JITTargetAddress, Edge::Kind>>
   readEncodedPointer(uint8_t PointerEncoding,
-                     orc::ExecutorAddr PointerFieldAddress,
+                     JITTargetAddress PointerFieldAddress,
                      BinaryStreamReader &RecordReader);
 
-  Expected<Symbol &> getOrCreateSymbol(ParseContext &PC,
-                                       orc::ExecutorAddr Addr);
+  Expected<Symbol &> getOrCreateSymbol(ParseContext &PC, JITTargetAddress Addr);
 
   StringRef EHFrameSectionName;
   unsigned PointerSize;

diff  --git a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
index 23c8b77b913bd..f9101d71dfa8a 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/ELFLinkGraphBuilder.h
@@ -322,12 +322,10 @@ template <typename ELFT> Error ELFLinkGraphBuilder<ELFT>::graphifySections() {
       if (!Data)
         return Data.takeError();
 
-      G->createContentBlock(GraphSec, *Data, orc::ExecutorAddr(Sec.sh_addr),
-                            Sec.sh_addralign, 0);
+      G->createContentBlock(GraphSec, *Data, Sec.sh_addr, Sec.sh_addralign, 0);
     } else
-      G->createZeroFillBlock(GraphSec, Sec.sh_size,
-                             orc::ExecutorAddr(Sec.sh_addr), Sec.sh_addralign,
-                             0);
+      G->createZeroFillBlock(GraphSec, Sec.sh_size, Sec.sh_addr,
+                             Sec.sh_addralign, 0);
 
     setGraphSection(SecIndex, GraphSec);
   }
@@ -395,9 +393,9 @@ template <typename ELFT> Error ELFLinkGraphBuilder<ELFT>::graphifySymbols() {
 
     // Handle common symbols specially.
     if (Sym.isCommon()) {
-      Symbol &GSym = G->addCommonSymbol(*Name, Scope::Default,
-                                        getCommonSection(), orc::ExecutorAddr(),
-                                        Sym.st_size, Sym.getValue(), false);
+      Symbol &GSym =
+          G->addCommonSymbol(*Name, Scope::Default, getCommonSection(), 0,
+                             Sym.st_size, Sym.getValue(), false);
       setGraphSymbol(SymIndex, GSym);
       continue;
     }

diff  --git a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp
index 35b70d533907c..dc183dfddfaeb 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_aarch64.cpp
@@ -41,11 +41,10 @@ class ELFJITLinker_aarch64 : public JITLinker<ELFJITLinker_aarch64> {
 
     char *BlockWorkingMem = B.getAlreadyMutableContent().data();
     char *FixupPtr = BlockWorkingMem + E.getOffset();
-    auto FixupAddress = B.getAddress() + E.getOffset();
+    JITTargetAddress FixupAddress = B.getAddress() + E.getOffset();
     switch (E.getKind()) {
     case aarch64::R_AARCH64_CALL26: {
-      assert((FixupAddress.getValue() & 0x3) == 0 &&
-             "Call-inst is not 32-bit aligned");
+      assert((FixupAddress & 0x3) == 0 && "Call-inst is not 32-bit aligned");
       int64_t Value = E.getTarget().getAddress() - FixupAddress + E.getAddend();
 
       if (static_cast<uint64_t>(Value) & 0x3)
@@ -125,8 +124,7 @@ class ELFLinkGraphBuilder_aarch64 : public ELFLinkGraphBuilder<ELFT> {
 
     int64_t Addend = Rel.r_addend;
     Block *BlockToFix = *(GraphSection.blocks().begin());
-    orc::ExecutorAddr FixupAddress =
-        orc::ExecutorAddr(FixupSect.sh_addr) + Rel.r_offset;
+    JITTargetAddress FixupAddress = FixupSect.sh_addr + Rel.r_offset;
     Edge::OffsetT Offset = FixupAddress - BlockToFix->getAddress();
     Edge GE(*Kind, Offset, *GraphSymbol, Addend);
     LLVM_DEBUG({

diff  --git a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
index a4d1cc8c61951..26ec79ea50cf9 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_riscv.cpp
@@ -44,16 +44,15 @@ class PerGraphGOTAndPLTStubsBuilder_ELF_riscv
   bool isGOTEdgeToFix(Edge &E) const { return E.getKind() == R_RISCV_GOT_HI20; }
 
   Symbol &createGOTEntry(Symbol &Target) {
-    Block &GOTBlock =
-        G.createContentBlock(getGOTSection(), getGOTEntryBlockContent(),
-                             orc::ExecutorAddr(), G.getPointerSize(), 0);
+    Block &GOTBlock = G.createContentBlock(
+        getGOTSection(), getGOTEntryBlockContent(), 0, G.getPointerSize(), 0);
     GOTBlock.addEdge(isRV64() ? R_RISCV_64 : R_RISCV_32, 0, Target, 0);
     return G.addAnonymousSymbol(GOTBlock, 0, G.getPointerSize(), false, false);
   }
 
   Symbol &createPLTStub(Symbol &Target) {
-    Block &StubContentBlock = G.createContentBlock(
-        getStubsSection(), getStubBlockContent(), orc::ExecutorAddr(), 4, 0);
+    Block &StubContentBlock =
+        G.createContentBlock(getStubsSection(), getStubBlockContent(), 0, 4, 0);
     auto &GOTEntrySymbol = getGOTEntry(Target);
     StubContentBlock.addEdge(R_RISCV_CALL, 0, GOTEntrySymbol, 0);
     return G.addAnonymousSymbol(StubContentBlock, 0, StubEntrySize, true,
@@ -135,13 +134,13 @@ static Expected<const Edge &> getRISCVPCRelHi20(const Edge &E) {
 
   const Symbol &Sym = E.getTarget();
   const Block &B = Sym.getBlock();
-  orc::ExecutorAddrDiff Offset = Sym.getOffset();
+  JITTargetAddress Offset = Sym.getOffset();
 
   struct Comp {
-    bool operator()(const Edge &Lhs, orc::ExecutorAddrDiff Offset) {
+    bool operator()(const Edge &Lhs, JITTargetAddress Offset) {
       return Lhs.getOffset() < Offset;
     }
-    bool operator()(orc::ExecutorAddrDiff Offset, const Edge &Rhs) {
+    bool operator()(JITTargetAddress Offset, const Edge &Rhs) {
       return Offset < Rhs.getOffset();
     }
   };
@@ -177,27 +176,27 @@ class ELFJITLinker_riscv : public JITLinker<ELFJITLinker_riscv> {
 
     char *BlockWorkingMem = B.getAlreadyMutableContent().data();
     char *FixupPtr = BlockWorkingMem + E.getOffset();
-    orc::ExecutorAddr FixupAddress = B.getAddress() + E.getOffset();
+    JITTargetAddress FixupAddress = B.getAddress() + E.getOffset();
     switch (E.getKind()) {
     case R_RISCV_32: {
-      int64_t Value = (E.getTarget().getAddress() + E.getAddend()).getValue();
+      int64_t Value = E.getTarget().getAddress() + E.getAddend();
       *(little32_t *)FixupPtr = static_cast<uint32_t>(Value);
       break;
     }
     case R_RISCV_64: {
-      int64_t Value = (E.getTarget().getAddress() + E.getAddend()).getValue();
+      int64_t Value = E.getTarget().getAddress() + E.getAddend();
       *(little64_t *)FixupPtr = static_cast<uint64_t>(Value);
       break;
     }
     case R_RISCV_HI20: {
-      int64_t Value = (E.getTarget().getAddress() + E.getAddend()).getValue();
+      int64_t Value = E.getTarget().getAddress() + E.getAddend();
       int32_t Hi = (Value + 0x800) & 0xFFFFF000;
       uint32_t RawInstr = *(little32_t *)FixupPtr;
       *(little32_t *)FixupPtr = (RawInstr & 0xFFF) | static_cast<uint32_t>(Hi);
       break;
     }
     case R_RISCV_LO12_I: {
-      int64_t Value = (E.getTarget().getAddress() + E.getAddend()).getValue();
+      int64_t Value = E.getTarget().getAddress() + E.getAddend();
       int32_t Lo = Value & 0xFFF;
       uint32_t RawInstr = *(little32_t *)FixupPtr;
       *(little32_t *)FixupPtr =
@@ -323,7 +322,7 @@ class ELFLinkGraphBuilder_riscv : public ELFLinkGraphBuilder<ELFT> {
 
     int64_t Addend = Rel.r_addend;
     Block *BlockToFix = *(GraphSection.blocks().begin());
-    auto FixupAddress = orc::ExecutorAddr(FixupSect.sh_addr) + Rel.r_offset;
+    JITTargetAddress FixupAddress = FixupSect.sh_addr + Rel.r_offset;
     Edge::OffsetT Offset = FixupAddress - BlockToFix->getAddress();
     Edge GE(*Kind, Offset, *GraphSymbol, Addend);
     LLVM_DEBUG({

diff  --git a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
index cebe9e9dac78b..27d8833ae19ee 100644
--- a/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/ELF_x86_64.cpp
@@ -59,8 +59,8 @@ class TLSInfoTableManager_ELF_x86_64
     // the TLS Info entry's key value will be written by the fixTLVSectionByName
     // pass, so create mutable content.
     auto &TLSInfoEntry = G.createMutableContentBlock(
-        getTLSInfoSection(G), G.allocateContent(getTLSInfoEntryContent()),
-        orc::ExecutorAddr(), 8, 0);
+        getTLSInfoSection(G), G.allocateContent(getTLSInfoEntryContent()), 0, 8,
+        0);
     TLSInfoEntry.addEdge(x86_64::Pointer64, 8, Target, 0);
     return G.addAnonymousSymbol(TLSInfoEntry, 0, 16, false, false);
   }
@@ -249,7 +249,7 @@ class ELFLinkGraphBuilder_x86_64 : public ELFLinkGraphBuilder<object::ELF64LE> {
     }
 
     Block *BlockToFix = *(GraphSection.blocks().begin());
-    auto FixupAddress = orc::ExecutorAddr(FixupSection.sh_addr) + Rel.r_offset;
+    JITTargetAddress FixupAddress = FixupSection.sh_addr + Rel.r_offset;
     Edge::OffsetT Offset = FixupAddress - BlockToFix->getAddress();
     Edge GE(Kind, Offset, *GraphSymbol, Addend);
     LLVM_DEBUG({
@@ -322,9 +322,8 @@ class ELFJITLinker_x86_64 : public JITLinker<ELFJITLinker_x86_64> {
       // If there's no defined symbol then create one.
       SectionRange SR(*GOTSection);
       if (SR.empty())
-        GOTSymbol =
-            &G.addAbsoluteSymbol(ELFGOTSymbolName, orc::ExecutorAddr(), 0,
-                                 Linkage::Strong, Scope::Local, true);
+        GOTSymbol = &G.addAbsoluteSymbol(ELFGOTSymbolName, 0, 0,
+                                         Linkage::Strong, Scope::Local, true);
       else
         GOTSymbol =
             &G.addDefinedSymbol(*SR.getFirstBlock(), 0, ELFGOTSymbolName, 0,

diff  --git a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
index 8c920c5fe2dd5..51dcc1c35fad4 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLink.cpp
@@ -90,8 +90,8 @@ const char *getScopeName(Scope S) {
 }
 
 raw_ostream &operator<<(raw_ostream &OS, const Block &B) {
-  return OS << B.getAddress() << " -- " << (B.getAddress() + B.getSize())
-            << ": "
+  return OS << formatv("{0:x16}", B.getAddress()) << " -- "
+            << formatv("{0:x8}", B.getAddress() + B.getSize()) << ": "
             << "size = " << formatv("{0:x8}", B.getSize()) << ", "
             << (B.isZeroFill() ? "zero-fill" : "content")
             << ", align = " << B.getAlignment()
@@ -100,8 +100,9 @@ raw_ostream &operator<<(raw_ostream &OS, const Block &B) {
 }
 
 raw_ostream &operator<<(raw_ostream &OS, const Symbol &Sym) {
-  OS << Sym.getAddress() << " (" << (Sym.isDefined() ? "block" : "addressable")
-     << " + " << formatv("{0:x8}", Sym.getOffset())
+  OS << formatv("{0:x16}", Sym.getAddress()) << " ("
+     << (Sym.isDefined() ? "block" : "addressable") << " + "
+     << formatv("{0:x8}", Sym.getOffset())
      << "): size: " << formatv("{0:x8}", Sym.getSize())
      << ", linkage: " << formatv("{0:6}", getLinkageName(Sym.getLinkage()))
      << ", scope: " << formatv("{0:8}", getScopeName(Sym.getScope())) << ", "
@@ -112,9 +113,9 @@ raw_ostream &operator<<(raw_ostream &OS, const Symbol &Sym) {
 
 void printEdge(raw_ostream &OS, const Block &B, const Edge &E,
                StringRef EdgeKindName) {
-  OS << "edge@" << B.getAddress() + E.getOffset() << ": " << B.getAddress()
-     << " + " << formatv("{0:x}", E.getOffset()) << " -- " << EdgeKindName
-     << " -> ";
+  OS << "edge@" << formatv("{0:x16}", B.getAddress() + E.getOffset()) << ": "
+     << formatv("{0:x16}", B.getAddress()) << " + "
+     << formatv("{0:x}", E.getOffset()) << " -- " << EdgeKindName << " -> ";
 
   auto &TargetSym = E.getTarget();
   if (TargetSym.hasName())
@@ -122,16 +123,17 @@ void printEdge(raw_ostream &OS, const Block &B, const Edge &E,
   else {
     auto &TargetBlock = TargetSym.getBlock();
     auto &TargetSec = TargetBlock.getSection();
-    orc::ExecutorAddr SecAddress(~uint64_t(0));
+    JITTargetAddress SecAddress = ~JITTargetAddress(0);
     for (auto *B : TargetSec.blocks())
       if (B->getAddress() < SecAddress)
         SecAddress = B->getAddress();
 
-    orc::ExecutorAddrDiff SecDelta = TargetSym.getAddress() - SecAddress;
-    OS << TargetSym.getAddress() << " (section " << TargetSec.getName();
+    JITTargetAddress SecDelta = TargetSym.getAddress() - SecAddress;
+    OS << formatv("{0:x16}", TargetSym.getAddress()) << " (section "
+       << TargetSec.getName();
     if (SecDelta)
       OS << " + " << formatv("{0:x}", SecDelta);
-    OS << " / block " << TargetBlock.getAddress();
+    OS << " / block " << formatv("{0:x16}", TargetBlock.getAddress());
     if (TargetSym.getOffset())
       OS << " + " << formatv("{0:x}", TargetSym.getOffset());
     OS << ")";
@@ -263,7 +265,7 @@ void LinkGraph::dump(raw_ostream &OS) {
     });
 
     for (auto *B : SortedBlocks) {
-      OS << "  block " << B->getAddress()
+      OS << "  block " << formatv("{0:x16}", B->getAddress())
          << " size = " << formatv("{0:x8}", B->getSize())
          << ", align = " << B->getAlignment()
          << ", alignment-offset = " << B->getAlignmentOffset();
@@ -288,8 +290,9 @@ void LinkGraph::dump(raw_ostream &OS) {
           return LHS.getOffset() < RHS.getOffset();
         });
         for (auto &E : SortedEdges) {
-          OS << "      " << B->getFixupAddress(E) << " (block + "
-             << formatv("{0:x8}", E.getOffset()) << "), addend = ";
+          OS << "      " << formatv("{0:x16}", B->getFixupAddress(E))
+             << " (block + " << formatv("{0:x8}", E.getOffset())
+             << "), addend = ";
           if (E.getAddend() >= 0)
             OS << formatv("+{0:x8}", E.getAddend());
           else
@@ -312,14 +315,16 @@ void LinkGraph::dump(raw_ostream &OS) {
   OS << "Absolute symbols:\n";
   if (!llvm::empty(absolute_symbols())) {
     for (auto *Sym : absolute_symbols())
-      OS << "  " << Sym->getAddress() << ": " << *Sym << "\n";
+      OS << "  " << format("0x%016" PRIx64, Sym->getAddress()) << ": " << *Sym
+         << "\n";
   } else
     OS << "  none\n";
 
   OS << "\nExternal symbols:\n";
   if (!llvm::empty(external_symbols())) {
     for (auto *Sym : external_symbols())
-      OS << "  " << Sym->getAddress() << ": " << *Sym << "\n";
+      OS << "  " << format("0x%016" PRIx64, Sym->getAddress()) << ": " << *Sym
+         << "\n";
   } else
     OS << "  none\n";
 }

diff  --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
index 35ee050c85664..706688aba4ec7 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkGeneric.cpp
@@ -192,7 +192,7 @@ JITLinkContext::LookupMap JITLinkerBase::getExternalSymbolNames() const {
   // Identify unresolved external symbols.
   JITLinkContext::LookupMap UnresolvedExternals;
   for (auto *Sym : G->external_symbols()) {
-    assert(!Sym->getAddress() &&
+    assert(Sym->getAddress() == 0 &&
            "External has already been assigned an address");
     assert(Sym->getName() != StringRef() && Sym->getName() != "" &&
            "Externals must be named");
@@ -209,12 +209,11 @@ void JITLinkerBase::applyLookupResult(AsyncLookupResult Result) {
   for (auto *Sym : G->external_symbols()) {
     assert(Sym->getOffset() == 0 &&
            "External symbol is not at the start of its addressable block");
-    assert(!Sym->getAddress() && "Symbol already resolved");
+    assert(Sym->getAddress() == 0 && "Symbol already resolved");
     assert(!Sym->isDefined() && "Symbol being resolved is already defined");
     auto ResultI = Result.find(Sym->getName());
     if (ResultI != Result.end())
-      Sym->getAddressable().setAddress(
-          orc::ExecutorAddr(ResultI->second.getAddress()));
+      Sym->getAddressable().setAddress(ResultI->second.getAddress());
     else
       assert(Sym->getLinkage() == Linkage::Weak &&
              "Failed to resolve non-weak reference");
@@ -224,7 +223,7 @@ void JITLinkerBase::applyLookupResult(AsyncLookupResult Result) {
     dbgs() << "Externals after applying lookup result:\n";
     for (auto *Sym : G->external_symbols())
       dbgs() << "  " << Sym->getName() << ": "
-             << formatv("{0:x16}", Sym->getAddress().getValue()) << "\n";
+             << formatv("{0:x16}", Sym->getAddress()) << "\n";
   });
 }
 

diff  --git a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
index 1640146122472..67fe6287e3882 100644
--- a/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/JITLinkMemoryManager.cpp
@@ -66,10 +66,10 @@ JITLinkMemoryManager::InFlightAlloc::~InFlightAlloc() = default;
 
 static Error runAllocAction(AllocActionCall &C) {
   using WrapperFnTy = CWrapperFunctionResult (*)(const void *, size_t);
-  auto *Fn = C.FnAddr.toPtr<WrapperFnTy>();
+  auto *Fn = jitTargetAddressToPointer<WrapperFnTy>(C.FnAddr);
 
-  return toError(
-      Fn(C.CtxAddr.toPtr<const void *>(), static_cast<size_t>(C.CtxSize)));
+  return toError(Fn(jitTargetAddressToPointer<const void *>(C.CtxAddr),
+                    static_cast<size_t>(C.CtxSize)));
 }
 
 BasicLayout::BasicLayout(LinkGraph &G) : G(G) {
@@ -207,7 +207,7 @@ void SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
       std::make_unique<LinkGraph>("", Triple(), 0, support::native, nullptr);
   AllocGroupSmallMap<Block *> ContentBlocks;
 
-  orc::ExecutorAddr NextAddr(0x100000);
+  JITTargetAddress NextAddr = 0x100000;
   for (auto &KV : Segments) {
     auto &AG = KV.first;
     auto &Seg = KV.second;
@@ -220,8 +220,7 @@ void SimpleSegmentAlloc::Create(JITLinkMemoryManager &MemMgr,
     Sec.setMemDeallocPolicy(AG.getMemDeallocPolicy());
 
     if (Seg.ContentSize != 0) {
-      NextAddr =
-          orc::ExecutorAddr(alignTo(NextAddr.getValue(), Seg.ContentAlign));
+      NextAddr = alignTo(NextAddr, Seg.ContentAlign);
       auto &B =
           G->createMutableContentBlock(Sec, G->allocateBuffer(Seg.ContentSize),
                                        NextAddr, Seg.ContentAlign.value(), 0);
@@ -427,8 +426,8 @@ void InProcessMemoryManager::allocate(const JITLinkDylib *JD, LinkGraph &G,
                        static_cast<size_t>(SegsSizes->FinalizeSegs)};
   }
 
-  auto NextStandardSegAddr = orc::ExecutorAddr::fromPtr(StandardSegsMem.base());
-  auto NextFinalizeSegAddr = orc::ExecutorAddr::fromPtr(FinalizeSegsMem.base());
+  auto NextStandardSegAddr = pointerToJITTargetAddress(StandardSegsMem.base());
+  auto NextFinalizeSegAddr = pointerToJITTargetAddress(FinalizeSegsMem.base());
 
   LLVM_DEBUG({
     dbgs() << "InProcessMemoryManager allocated:\n";
@@ -455,7 +454,7 @@ void InProcessMemoryManager::allocate(const JITLinkDylib *JD, LinkGraph &G,
                         ? NextStandardSegAddr
                         : NextFinalizeSegAddr;
 
-    Seg.WorkingMem = SegAddr.toPtr<char *>();
+    Seg.WorkingMem = jitTargetAddressToPointer<char *>(SegAddr);
     Seg.Addr = SegAddr;
 
     SegAddr += alignTo(Seg.ContentSize + Seg.ZeroFillSize, PageSize);
@@ -479,7 +478,8 @@ void InProcessMemoryManager::deallocate(std::vector<FinalizedAlloc> Allocs,
   {
     std::lock_guard<std::mutex> Lock(FinalizedAllocsMutex);
     for (auto &Alloc : Allocs) {
-      auto *FA = Alloc.release().toPtr<FinalizedAllocInfo *>();
+      auto *FA =
+          jitTargetAddressToPointer<FinalizedAllocInfo *>(Alloc.release());
       StandardSegmentsList.push_back(std::move(FA->StandardSegments));
       if (!FA->DeallocActions.empty())
         DeallocActionsList.push_back(std::move(FA->DeallocActions));
@@ -520,7 +520,7 @@ InProcessMemoryManager::createFinalizedAlloc(
   auto *FA = FinalizedAllocInfos.Allocate<FinalizedAllocInfo>();
   new (FA) FinalizedAllocInfo(
       {std::move(StandardSegments), std::move(DeallocActions)});
-  return FinalizedAlloc(orc::ExecutorAddr::fromPtr(FA));
+  return FinalizedAlloc(pointerToJITTargetAddress(FA));
 }
 
 } // end namespace jitlink

diff  --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
index 2fcf3e94b8b21..d588b63d9e88f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.cpp
@@ -134,7 +134,7 @@ Error MachOLinkGraphBuilder::createNormalizedSections() {
       memcpy(&NSec.SegName, Sec64.segname, 16);
       NSec.SegName[16] = '\0';
 
-      NSec.Address = orc::ExecutorAddr(Sec64.addr);
+      NSec.Address = Sec64.addr;
       NSec.Size = Sec64.size;
       NSec.Alignment = 1ULL << Sec64.align;
       NSec.Flags = Sec64.flags;
@@ -147,7 +147,7 @@ Error MachOLinkGraphBuilder::createNormalizedSections() {
       memcpy(&NSec.SegName, Sec32.segname, 16);
       NSec.SegName[16] = '\0';
 
-      NSec.Address = orc::ExecutorAddr(Sec32.addr);
+      NSec.Address = Sec32.addr;
       NSec.Size = Sec32.size;
       NSec.Alignment = 1ULL << Sec32.align;
       NSec.Flags = Sec32.flags;
@@ -287,8 +287,7 @@ Error MachOLinkGraphBuilder::createNormalizedSymbols() {
       if (!NSec)
         return NSec.takeError();
 
-      if (orc::ExecutorAddr(Value) < NSec->Address ||
-          orc::ExecutorAddr(Value) > NSec->Address + NSec->Size)
+      if (Value < NSec->Address || Value > NSec->Address + NSec->Size)
         return make_error<JITLinkError>("Address " + formatv("{0:x}", Value) +
                                         " for symbol " + *Name +
                                         " does not fall within section");
@@ -312,9 +311,8 @@ Error MachOLinkGraphBuilder::createNormalizedSymbols() {
 }
 
 void MachOLinkGraphBuilder::addSectionStartSymAndBlock(
-    unsigned SecIndex, Section &GraphSec, orc::ExecutorAddr Address,
-    const char *Data, orc::ExecutorAddrDiff Size, uint32_t Alignment,
-    bool IsLive) {
+    unsigned SecIndex, Section &GraphSec, uint64_t Address, const char *Data,
+    uint64_t Size, uint32_t Alignment, bool IsLive) {
   Block &B =
       Data ? G->createContentBlock(GraphSec, ArrayRef<char>(Data, Size),
                                    Address, Alignment, 0)
@@ -348,8 +346,7 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
           return make_error<JITLinkError>("Anonymous common symbol at index " +
                                           Twine(KV.first));
         NSym.GraphSymbol = &G->addCommonSymbol(
-            *NSym.Name, NSym.S, getCommonSection(), orc::ExecutorAddr(),
-            orc::ExecutorAddrDiff(NSym.Value),
+            *NSym.Name, NSym.S, getCommonSection(), 0, NSym.Value,
             1ull << MachO::GET_COMM_ALIGN(NSym.Desc),
             NSym.Desc & MachO::N_NO_DEAD_STRIP);
       } else {
@@ -367,8 +364,8 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
         return make_error<JITLinkError>("Anonymous absolute symbol at index " +
                                         Twine(KV.first));
       NSym.GraphSymbol = &G->addAbsoluteSymbol(
-          *NSym.Name, orc::ExecutorAddr(NSym.Value), 0, Linkage::Strong,
-          Scope::Default, NSym.Desc & MachO::N_NO_DEAD_STRIP);
+          *NSym.Name, NSym.Value, 0, Linkage::Strong, Scope::Default,
+          NSym.Desc & MachO::N_NO_DEAD_STRIP);
       break;
     case MachO::N_SECT:
       SecIndexToSymbols[NSym.Sect - 1].push_back(&NSym);
@@ -471,13 +468,13 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
 
     // If the section is non-empty but there is no symbol covering the start
     // address then add an anonymous one.
-    if (orc::ExecutorAddr(SecNSymStack.back()->Value) != NSec.Address) {
-      auto AnonBlockSize =
-          orc::ExecutorAddr(SecNSymStack.back()->Value) - NSec.Address;
+    if (SecNSymStack.back()->Value != NSec.Address) {
+      auto AnonBlockSize = SecNSymStack.back()->Value - NSec.Address;
       LLVM_DEBUG({
         dbgs() << "    Section start not covered by symbol. "
-               << "Creating anonymous block to cover [ " << NSec.Address
-               << " -- " << (NSec.Address + AnonBlockSize) << " ]\n";
+               << "Creating anonymous block to cover [ "
+               << formatv("{0:x16}", NSec.Address) << " -- "
+               << formatv("{0:x16}", NSec.Address + AnonBlockSize) << " ]\n";
       });
       addSectionStartSymAndBlock(SecIndex, *NSec.GraphSection, NSec.Address,
                                  NSec.Data, AnonBlockSize, NSec.Alignment,
@@ -499,12 +496,12 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
       }
 
       // BlockNSyms now contains the block symbols in reverse canonical order.
-      auto BlockStart = orc::ExecutorAddr(BlockSyms.front()->Value);
-      orc::ExecutorAddr BlockEnd =
-          SecNSymStack.empty() ? NSec.Address + NSec.Size
-                               : orc::ExecutorAddr(SecNSymStack.back()->Value);
-      orc::ExecutorAddrDiff BlockOffset = BlockStart - NSec.Address;
-      orc::ExecutorAddrDiff BlockSize = BlockEnd - BlockStart;
+      JITTargetAddress BlockStart = BlockSyms.front()->Value;
+      JITTargetAddress BlockEnd = SecNSymStack.empty()
+                                      ? NSec.Address + NSec.Size
+                                      : SecNSymStack.back()->Value;
+      JITTargetAddress BlockOffset = BlockStart - NSec.Address;
+      JITTargetAddress BlockSize = BlockEnd - BlockStart;
 
       LLVM_DEBUG({
         dbgs() << "    Creating block for " << formatv("{0:x16}", BlockStart)
@@ -524,8 +521,8 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
                                        BlockStart, NSec.Alignment,
                                        BlockStart % NSec.Alignment);
 
-      Optional<orc::ExecutorAddr> LastCanonicalAddr;
-      auto SymEnd = BlockEnd;
+      Optional<JITTargetAddress> LastCanonicalAddr;
+      JITTargetAddress SymEnd = BlockEnd;
       while (!BlockSyms.empty()) {
         auto &NSym = *BlockSyms.back();
         BlockSyms.pop_back();
@@ -533,9 +530,9 @@ Error MachOLinkGraphBuilder::graphifyRegularSymbols() {
         bool SymLive =
             (NSym.Desc & MachO::N_NO_DEAD_STRIP) || SectionIsNoDeadStrip;
 
-        auto &Sym = createStandardGraphSymbol(
-            NSym, B, SymEnd - orc::ExecutorAddr(NSym.Value), SectionIsText,
-            SymLive, LastCanonicalAddr != orc::ExecutorAddr(NSym.Value));
+        auto &Sym = createStandardGraphSymbol(NSym, B, SymEnd - NSym.Value,
+                                              SectionIsText, SymLive,
+                                              LastCanonicalAddr != NSym.Value);
 
         if (LastCanonicalAddr != Sym.getAddress()) {
           if (LastCanonicalAddr)
@@ -571,12 +568,11 @@ Symbol &MachOLinkGraphBuilder::createStandardGraphSymbol(NormalizedSymbol &NSym,
     dbgs() << "\n";
   });
 
-  auto SymOffset = orc::ExecutorAddr(NSym.Value) - B.getAddress();
-  auto &Sym =
-      NSym.Name
-          ? G->addDefinedSymbol(B, SymOffset, *NSym.Name, Size, NSym.L, NSym.S,
-                                IsText, IsNoDeadStrip)
-          : G->addAnonymousSymbol(B, SymOffset, Size, IsText, IsNoDeadStrip);
+  auto &Sym = NSym.Name ? G->addDefinedSymbol(B, NSym.Value - B.getAddress(),
+                                              *NSym.Name, Size, NSym.L, NSym.S,
+                                              IsText, IsNoDeadStrip)
+                        : G->addAnonymousSymbol(B, NSym.Value - B.getAddress(),
+                                                Size, IsText, IsNoDeadStrip);
   NSym.GraphSymbol = &Sym;
 
   if (IsCanonical)
@@ -639,12 +635,12 @@ Error MachOLinkGraphBuilder::graphifyCStringSection(
 
   bool SectionIsNoDeadStrip = NSec.Flags & MachO::S_ATTR_NO_DEAD_STRIP;
   bool SectionIsText = NSec.Flags & MachO::S_ATTR_PURE_INSTRUCTIONS;
-  orc::ExecutorAddrDiff BlockStart = 0;
+  JITTargetAddress BlockStart = 0;
 
   // Scan section for null characters.
   for (size_t I = 0; I != NSec.Size; ++I)
     if (NSec.Data[I] == '\0') {
-      orc::ExecutorAddrDiff BlockEnd = I + 1;
+      JITTargetAddress BlockEnd = I + 1;
       size_t BlockSize = BlockEnd - BlockStart;
       // Create a block for this null terminated string.
       auto &B = G->createContentBlock(*NSec.GraphSection,
@@ -658,8 +654,7 @@ Error MachOLinkGraphBuilder::graphifyCStringSection(
       });
 
       // If there's no symbol at the start of this block then create one.
-      if (NSyms.empty() ||
-          orc::ExecutorAddr(NSyms.back()->Value) != B.getAddress()) {
+      if (NSyms.empty() || NSyms.back()->Value != B.getAddress()) {
         auto &S = G->addAnonymousSymbol(B, 0, BlockSize, false, false);
         setCanonicalSymbol(NSec, S);
         LLVM_DEBUG({
@@ -671,19 +666,18 @@ Error MachOLinkGraphBuilder::graphifyCStringSection(
       }
 
       // Process any remaining symbols that point into this block.
-      auto LastCanonicalAddr = B.getAddress() + BlockEnd;
-      while (!NSyms.empty() && orc::ExecutorAddr(NSyms.back()->Value) <
-                                   B.getAddress() + BlockSize) {
+      JITTargetAddress LastCanonicalAddr = B.getAddress() + BlockEnd;
+      while (!NSyms.empty() &&
+             NSyms.back()->Value < (B.getAddress() + BlockSize)) {
         auto &NSym = *NSyms.back();
-        size_t SymSize = (B.getAddress() + BlockSize) -
-                         orc::ExecutorAddr(NSyms.back()->Value);
+        size_t SymSize = (B.getAddress() + BlockSize) - NSyms.back()->Value;
         bool SymLive =
             (NSym.Desc & MachO::N_NO_DEAD_STRIP) || SectionIsNoDeadStrip;
 
         bool IsCanonical = false;
-        if (LastCanonicalAddr != orc::ExecutorAddr(NSym.Value)) {
+        if (LastCanonicalAddr != NSym.Value) {
           IsCanonical = true;
-          LastCanonicalAddr = orc::ExecutorAddr(NSym.Value);
+          LastCanonicalAddr = NSym.Value;
         }
 
         createStandardGraphSymbol(NSym, B, SymSize, SectionIsText, SymLive,

diff  --git a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h
index 2951a8533098c..d29732ebdba82 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/MachOLinkGraphBuilder.h
@@ -71,13 +71,13 @@ class MachOLinkGraphBuilder {
   public:
     char SectName[17];
     char SegName[17];
-    orc::ExecutorAddr Address;
+    uint64_t Address = 0;
     uint64_t Size = 0;
     uint64_t Alignment = 0;
     uint32_t Flags = 0;
     const char *Data = nullptr;
     Section *GraphSection = nullptr;
-    std::map<orc::ExecutorAddr, Symbol *> CanonicalSymbols;
+    std::map<JITTargetAddress, Symbol *> CanonicalSymbols;
   };
 
   using SectionParserFunction = std::function<Error(NormalizedSection &S)>;
@@ -137,7 +137,7 @@ class MachOLinkGraphBuilder {
   /// Returns the symbol with the highest address not greater than the search
   /// address, or null if no such symbol exists.
   Symbol *getSymbolByAddress(NormalizedSection &NSec,
-                             orc::ExecutorAddr Address) {
+                             JITTargetAddress Address) {
     auto I = NSec.CanonicalSymbols.upper_bound(Address);
     if (I == NSec.CanonicalSymbols.begin())
       return nullptr;
@@ -147,7 +147,7 @@ class MachOLinkGraphBuilder {
   /// Returns the symbol with the highest address not greater than the search
   /// address, or an error if no such symbol exists.
   Expected<Symbol &> findSymbolByAddress(NormalizedSection &NSec,
-                                         orc::ExecutorAddr Address) {
+                                         JITTargetAddress Address) {
     auto *Sym = getSymbolByAddress(NSec, Address);
     if (Sym)
       if (Address <= Sym->getAddress() + Sym->getSize())
@@ -193,9 +193,9 @@ class MachOLinkGraphBuilder {
 
   Section &getCommonSection();
   void addSectionStartSymAndBlock(unsigned SecIndex, Section &GraphSec,
-                                  orc::ExecutorAddr Address, const char *Data,
-                                  orc::ExecutorAddrDiff Size,
-                                  uint32_t Alignment, bool IsLive);
+                                  uint64_t Address, const char *Data,
+                                  uint64_t Size, uint32_t Alignment,
+                                  bool IsLive);
 
   Error createNormalizedSections();
   Error createNormalizedSymbols();

diff  --git a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
index 844e76ab05425..f2a029d35cd5f 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_arm64.cpp
@@ -109,7 +109,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
   Expected<PairRelocInfo>
   parsePairRelocation(Block &BlockToFix, Edge::Kind SubtractorKind,
                       const MachO::relocation_info &SubRI,
-                      orc::ExecutorAddr FixupAddress, const char *FixupContent,
+                      JITTargetAddress FixupAddress, const char *FixupContent,
                       object::relocation_iterator &UnsignedRelItr,
                       object::relocation_iterator &RelEnd) {
     using namespace support;
@@ -162,7 +162,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
         return ToSymbolSec.takeError();
       ToSymbol = getSymbolByAddress(*ToSymbolSec, ToSymbolSec->Address);
       assert(ToSymbol && "No symbol for section");
-      FixupValue -= ToSymbol->getAddress().getValue();
+      FixupValue -= ToSymbol->getAddress();
     }
 
     MachOARM64RelocationKind DeltaKind;
@@ -195,7 +195,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
 
     for (auto &S : Obj.sections()) {
 
-      orc::ExecutorAddr SectionAddress(S.getAddress());
+      JITTargetAddress SectionAddress = S.getAddress();
 
       // Skip relocations virtual sections.
       if (S.isVirtual()) {
@@ -234,8 +234,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
           return Kind.takeError();
 
         // Find the address of the value to fix up.
-        orc::ExecutorAddr FixupAddress =
-            SectionAddress + (uint32_t)RI.r_address;
+        JITTargetAddress FixupAddress = SectionAddress + (uint32_t)RI.r_address;
         LLVM_DEBUG({
           dbgs() << "  " << NSec->SectName << " + "
                  << formatv("{0:x8}", RI.r_address) << ":\n";
@@ -250,7 +249,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
           BlockToFix = &SymbolToFixOrErr->getBlock();
         }
 
-        if (FixupAddress + orc::ExecutorAddrDiff(1ULL << RI.r_length) >
+        if (FixupAddress + static_cast<JITTargetAddress>(1ULL << RI.r_length) >
             BlockToFix->getAddress() + BlockToFix->getContent().size())
           return make_error<JITLinkError>(
               "Relocation content extends past end of fixup block");
@@ -291,7 +290,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
           });
 
           // Find the address of the value to fix up.
-          orc::ExecutorAddr PairedFixupAddress =
+          JITTargetAddress PairedFixupAddress =
               SectionAddress + (uint32_t)RI.r_address;
           if (PairedFixupAddress != FixupAddress)
             return make_error<JITLinkError>("Paired relocation points at "
@@ -325,7 +324,7 @@ class MachOLinkGraphBuilder_arm64 : public MachOLinkGraphBuilder {
           Addend = *(const ulittle64_t *)FixupContent;
           break;
         case Pointer64Anon: {
-          orc::ExecutorAddr TargetAddress(*(const ulittle64_t *)FixupContent);
+          JITTargetAddress TargetAddress = *(const ulittle64_t *)FixupContent;
           auto TargetNSec = findSectionByIndex(RI.r_symbolnum - 1);
           if (!TargetNSec)
             return TargetNSec.takeError();
@@ -436,7 +435,7 @@ class PerGraphGOTAndPLTStubsBuilder_MachO_arm64
 
   Symbol &createGOTEntry(Symbol &Target) {
     auto &GOTEntryBlock = G.createContentBlock(
-        getGOTSection(), getGOTEntryBlockContent(), orc::ExecutorAddr(), 8, 0);
+        getGOTSection(), getGOTEntryBlockContent(), 0, 8, 0);
     GOTEntryBlock.addEdge(Pointer64, 0, Target, 0);
     return G.addAnonymousSymbol(GOTEntryBlock, 0, 8, false, false);
   }
@@ -458,8 +457,8 @@ class PerGraphGOTAndPLTStubsBuilder_MachO_arm64
   }
 
   Symbol &createPLTStub(Symbol &Target) {
-    auto &StubContentBlock = G.createContentBlock(
-        getStubsSection(), getStubBlockContent(), orc::ExecutorAddr(), 1, 0);
+    auto &StubContentBlock =
+        G.createContentBlock(getStubsSection(), getStubBlockContent(), 0, 1, 0);
     // Re-use GOT entries for stub targets.
     auto &GOTEntrySymbol = getGOTEntry(Target);
     StubContentBlock.addEdge(LDRLiteral19, 0, GOTEntrySymbol, 0);
@@ -546,12 +545,11 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
 
     char *BlockWorkingMem = B.getAlreadyMutableContent().data();
     char *FixupPtr = BlockWorkingMem + E.getOffset();
-    orc::ExecutorAddr FixupAddress = B.getAddress() + E.getOffset();
+    JITTargetAddress FixupAddress = B.getAddress() + E.getOffset();
 
     switch (E.getKind()) {
     case Branch26: {
-      assert((FixupAddress.getValue() & 0x3) == 0 &&
-             "Branch-inst is not 32-bit aligned");
+      assert((FixupAddress & 0x3) == 0 && "Branch-inst is not 32-bit aligned");
 
       int64_t Value = E.getTarget().getAddress() - FixupAddress + E.getAddend();
 
@@ -571,7 +569,7 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
       break;
     }
     case Pointer32: {
-      uint64_t Value = E.getTarget().getAddress().getValue() + E.getAddend();
+      uint64_t Value = E.getTarget().getAddress() + E.getAddend();
       if (Value > std::numeric_limits<uint32_t>::max())
         return makeTargetOutOfRangeError(G, B, E);
       *(ulittle32_t *)FixupPtr = Value;
@@ -579,7 +577,7 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
     }
     case Pointer64:
     case Pointer64Anon: {
-      uint64_t Value = E.getTarget().getAddress().getValue() + E.getAddend();
+      uint64_t Value = E.getTarget().getAddress() + E.getAddend();
       *(ulittle64_t *)FixupPtr = Value;
       break;
     }
@@ -589,10 +587,9 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
       assert((E.getKind() != GOTPage21 || E.getAddend() == 0) &&
              "GOTPAGE21 with non-zero addend");
       uint64_t TargetPage =
-          (E.getTarget().getAddress().getValue() + E.getAddend()) &
-          ~static_cast<uint64_t>(4096 - 1);
-      uint64_t PCPage =
-          FixupAddress.getValue() & ~static_cast<uint64_t>(4096 - 1);
+          (E.getTarget().getAddress() + E.getAddend()) &
+            ~static_cast<uint64_t>(4096 - 1);
+      uint64_t PCPage = FixupAddress & ~static_cast<uint64_t>(4096 - 1);
 
       int64_t PageDelta = TargetPage - PCPage;
       if (PageDelta < -(1 << 30) || PageDelta > ((1 << 30) - 1))
@@ -609,7 +606,7 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
     }
     case PageOffset12: {
       uint64_t TargetOffset =
-          (E.getTarget().getAddress() + E.getAddend()).getValue() & 0xfff;
+        (E.getTarget().getAddress() + E.getAddend()) & 0xfff;
 
       uint32_t RawInstr = *(ulittle32_t *)FixupPtr;
       unsigned ImmShift = getPageOffset12Shift(RawInstr);
@@ -630,7 +627,7 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
       assert((RawInstr & 0xfffffc00) == 0xf9400000 &&
              "RawInstr isn't a 64-bit LDR immediate");
 
-      uint32_t TargetOffset = E.getTarget().getAddress().getValue() & 0xfff;
+      uint32_t TargetOffset = E.getTarget().getAddress() & 0xfff;
       assert((TargetOffset & 0x7) == 0 && "GOT entry is not 8-byte aligned");
       uint32_t EncodedImm = (TargetOffset >> 3) << 10;
       uint32_t FixedInstr = RawInstr | EncodedImm;
@@ -638,8 +635,7 @@ class MachOJITLinker_arm64 : public JITLinker<MachOJITLinker_arm64> {
       break;
     }
     case LDRLiteral19: {
-      assert((FixupAddress.getValue() & 0x3) == 0 &&
-             "LDR is not 32-bit aligned");
+      assert((FixupAddress & 0x3) == 0 && "LDR is not 32-bit aligned");
       assert(E.getAddend() == 0 && "LDRLiteral19 with non-zero addend");
       uint32_t RawInstr = *(ulittle32_t *)FixupPtr;
       assert(RawInstr == 0x58000010 && "RawInstr isn't a 64-bit LDR literal");

diff  --git a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
index 82afaa3aa3c55..a4fcd3b9a5f57 100644
--- a/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp
@@ -119,7 +119,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
   // returns the edge kind and addend to be used.
   Expected<PairRelocInfo> parsePairRelocation(
       Block &BlockToFix, MachONormalizedRelocationType SubtractorKind,
-      const MachO::relocation_info &SubRI, orc::ExecutorAddr FixupAddress,
+      const MachO::relocation_info &SubRI, JITTargetAddress FixupAddress,
       const char *FixupContent, object::relocation_iterator &UnsignedRelItr,
       object::relocation_iterator &RelEnd) {
     using namespace support;
@@ -172,7 +172,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
         return ToSymbolSec.takeError();
       ToSymbol = getSymbolByAddress(*ToSymbolSec, ToSymbolSec->Address);
       assert(ToSymbol && "No symbol for section");
-      FixupValue -= ToSymbol->getAddress().getValue();
+      FixupValue -= ToSymbol->getAddress();
     }
 
     Edge::Kind DeltaKind;
@@ -206,7 +206,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
 
     for (auto &S : Obj.sections()) {
 
-      orc::ExecutorAddr SectionAddress(S.getAddress());
+      JITTargetAddress SectionAddress = S.getAddress();
 
       // Skip relocations virtual sections.
       if (S.isVirtual()) {
@@ -241,7 +241,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
         MachO::relocation_info RI = getRelocationInfo(RelItr);
 
         // Find the address of the value to fix up.
-        auto FixupAddress = SectionAddress + (uint32_t)RI.r_address;
+        JITTargetAddress FixupAddress = SectionAddress + (uint32_t)RI.r_address;
 
         LLVM_DEBUG({
           dbgs() << "  " << NSec->SectName << " + "
@@ -257,7 +257,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
           BlockToFix = &SymbolToFixOrErr->getBlock();
         }
 
-        if (FixupAddress + orc::ExecutorAddrDiff(1ULL << RI.r_length) >
+        if (FixupAddress + static_cast<JITTargetAddress>(1ULL << RI.r_length) >
             BlockToFix->getAddress() + BlockToFix->getContent().size())
           return make_error<JITLinkError>(
               "Relocation extends past end of fixup block");
@@ -343,7 +343,7 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
           Kind = x86_64::Pointer64;
           break;
         case MachOPointer64Anon: {
-          orc::ExecutorAddr TargetAddress(*(const ulittle64_t *)FixupContent);
+          JITTargetAddress TargetAddress = *(const ulittle64_t *)FixupContent;
           auto TargetNSec = findSectionByIndex(RI.r_symbolnum - 1);
           if (!TargetNSec)
             return TargetNSec.takeError();
@@ -367,8 +367,8 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
           Kind = x86_64::Delta32;
           break;
         case MachOPCRel32Anon: {
-          orc::ExecutorAddr TargetAddress(FixupAddress + 4 +
-                                          *(const little32_t *)FixupContent);
+          JITTargetAddress TargetAddress =
+              FixupAddress + 4 + *(const little32_t *)FixupContent;
           auto TargetNSec = findSectionByIndex(RI.r_symbolnum - 1);
           if (!TargetNSec)
             return TargetNSec.takeError();
@@ -384,10 +384,10 @@ class MachOLinkGraphBuilder_x86_64 : public MachOLinkGraphBuilder {
         case MachOPCRel32Minus1Anon:
         case MachOPCRel32Minus2Anon:
         case MachOPCRel32Minus4Anon: {
-          orc::ExecutorAddrDiff Delta =
-              4 + orc::ExecutorAddrDiff(
+          JITTargetAddress Delta =
+              4 + static_cast<JITTargetAddress>(
                       1ULL << (*MachORelocKind - MachOPCRel32Minus1Anon));
-          orc::ExecutorAddr TargetAddress =
+          JITTargetAddress TargetAddress =
               FixupAddress + Delta + *(const little32_t *)FixupContent;
           auto TargetNSec = findSectionByIndex(RI.r_symbolnum - 1);
           if (!TargetNSec)

diff  --git a/llvm/lib/ExecutionEngine/JITLink/PerGraphGOTAndPLTStubsBuilder.h b/llvm/lib/ExecutionEngine/JITLink/PerGraphGOTAndPLTStubsBuilder.h
index 6e325f92bafbe..6e9df9c75a652 100644
--- a/llvm/lib/ExecutionEngine/JITLink/PerGraphGOTAndPLTStubsBuilder.h
+++ b/llvm/lib/ExecutionEngine/JITLink/PerGraphGOTAndPLTStubsBuilder.h
@@ -47,16 +47,16 @@ class PerGraphGOTAndPLTStubsBuilder {
         if (impl().isGOTEdgeToFix(E)) {
           LLVM_DEBUG({
             dbgs() << "  Fixing " << G.getEdgeKindName(E.getKind())
-                   << " edge at " << B->getFixupAddress(E) << " ("
-                   << B->getAddress() << " + "
+                   << " edge at " << formatv("{0:x}", B->getFixupAddress(E))
+                   << " (" << formatv("{0:x}", B->getAddress()) << " + "
                    << formatv("{0:x}", E.getOffset()) << ")\n";
           });
           impl().fixGOTEdge(E, getGOTEntry(E.getTarget()));
         } else if (impl().isExternalBranchEdge(E)) {
           LLVM_DEBUG({
             dbgs() << "  Fixing " << G.getEdgeKindName(E.getKind())
-                   << " edge at " << B->getFixupAddress(E) << " ("
-                   << B->getAddress() << " + "
+                   << " edge at " << formatv("{0:x}", B->getFixupAddress(E))
+                   << " (" << formatv("{0:x}", B->getAddress()) << " + "
                    << formatv("{0:x}", E.getOffset()) << ")\n";
           });
           impl().fixPLTEdge(E, getPLTStub(E.getTarget()));

diff  --git a/llvm/lib/ExecutionEngine/JITLink/x86_64.cpp b/llvm/lib/ExecutionEngine/JITLink/x86_64.cpp
index df9979b47e888..48521280059da 100644
--- a/llvm/lib/ExecutionEngine/JITLink/x86_64.cpp
+++ b/llvm/lib/ExecutionEngine/JITLink/x86_64.cpp
@@ -95,10 +95,10 @@ Error optimizeGOTAndStubAccesses(LinkGraph &G) {
         assert(GOTEntryBlock.edges_size() == 1 &&
                "GOT entry should only have one outgoing edge");
         auto &GOTTarget = GOTEntryBlock.edges().begin()->getTarget();
-        orc::ExecutorAddr TargetAddr = GOTTarget.getAddress();
-        orc::ExecutorAddr EdgeAddr = B->getFixupAddress(E);
+        JITTargetAddress TargetAddr = GOTTarget.getAddress();
+        JITTargetAddress EdgeAddr = B->getFixupAddress(E);
         int64_t Displacement = TargetAddr - EdgeAddr + 4;
-        bool TargetInRangeForImmU32 = isInRangeForImmU32(TargetAddr.getValue());
+        bool TargetInRangeForImmU32 = isInRangeForImmU32(TargetAddr);
         bool DisplacementInRangeForImmS32 = isInRangeForImmS32(Displacement);
 
         // If both of the Target and displacement is out of range, then
@@ -165,8 +165,8 @@ Error optimizeGOTAndStubAccesses(LinkGraph &G) {
                "GOT block should only have one outgoing edge");
 
         auto &GOTTarget = GOTBlock.edges().begin()->getTarget();
-        orc::ExecutorAddr EdgeAddr = B->getAddress() + E.getOffset();
-        orc::ExecutorAddr TargetAddr = GOTTarget.getAddress();
+        JITTargetAddress EdgeAddr = B->getAddress() + E.getOffset();
+        JITTargetAddress TargetAddr = GOTTarget.getAddress();
 
         int64_t Displacement = TargetAddr - EdgeAddr + 4;
         if (isInRangeForImmS32(Displacement)) {

diff  --git a/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp b/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
index 4ff6b7fd54df5..fcfe389f82a81 100644
--- a/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/DebugObjectManagerPlugin.cpp
@@ -67,9 +67,9 @@ class ELFDebugObjectSection : public DebugObjectSection {
 template <typename ELFT>
 void ELFDebugObjectSection<ELFT>::setTargetMemoryRange(SectionRange Range) {
   // Only patch load-addresses for executable and data sections.
-  if (isTextOrDataSection())
-    Header->sh_addr =
-        static_cast<typename ELFT::uint>(Range.getStart().getValue());
+  if (isTextOrDataSection()) {
+    Header->sh_addr = static_cast<typename ELFT::uint>(Range.getStart());
+  }
 }
 
 template <typename ELFT>

diff  --git a/llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp b/llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp
index 92657805efddf..fe62138c790c6 100644
--- a/llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/DebuggerSupportPlugin.cpp
@@ -129,8 +129,8 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
       Section *Sec = nullptr;
       StringRef SegName;
       StringRef SecName;
-      uint64_t Alignment = 0;
-      orc::ExecutorAddr StartAddr;
+      JITTargetAddress Alignment = 0;
+      JITTargetAddress StartAddr = 0;
       uint64_t Size = 0;
     };
 
@@ -153,8 +153,7 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
           return Error::success();
         }
         DebugSecInfos.push_back({&Sec, Sec.getName().substr(0, SepPos),
-                                 Sec.getName().substr(SepPos + 1), 0,
-                                 orc::ExecutorAddr(), 0});
+                                 Sec.getName().substr(SepPos + 1), 0, 0});
       } else {
         NonDebugSections.push_back(&Sec);
 
@@ -183,11 +182,11 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
     size_t ContainerBlockSize =
         sizeof(typename MachOTraits::Header) + SegmentLCSize;
     auto ContainerBlockContent = G.allocateBuffer(ContainerBlockSize);
-    MachOContainerBlock = &G.createMutableContentBlock(
-        SDOSec, ContainerBlockContent, orc::ExecutorAddr(), 8, 0);
+    MachOContainerBlock =
+        &G.createMutableContentBlock(SDOSec, ContainerBlockContent, 0, 8, 0);
 
     // Copy debug section blocks and symbols.
-    orc::ExecutorAddr NextBlockAddr(MachOContainerBlock->getSize());
+    JITTargetAddress NextBlockAddr = MachOContainerBlock->getSize();
     for (auto &SI : DebugSecInfos) {
       assert(!llvm::empty(SI.Sec->blocks()) && "Empty debug info section?");
 
@@ -220,8 +219,7 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
       G.mergeSections(SDOSec, *SI.Sec);
       SI.Sec = nullptr;
     }
-    size_t DebugSectionsSize =
-        NextBlockAddr - orc::ExecutorAddr(MachOContainerBlock->getSize());
+    size_t DebugSectionsSize = NextBlockAddr - MachOContainerBlock->getSize();
 
     // Write MachO header and debug section load commands.
     MachOStructWriter Writer(MachOContainerBlock->getAlreadyMutableContent());
@@ -268,9 +266,9 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
       memset(&Sec, 0, sizeof(Sec));
       memcpy(Sec.sectname, SI.SecName.data(), SI.SecName.size());
       memcpy(Sec.segname, SI.SegName.data(), SI.SegName.size());
-      Sec.addr = SI.StartAddr.getValue();
+      Sec.addr = SI.StartAddr;
       Sec.size = SI.Size;
-      Sec.offset = SI.StartAddr.getValue();
+      Sec.offset = SI.StartAddr;
       Sec.align = SI.Alignment;
       Sec.reloff = 0;
       Sec.nreloc = 0;
@@ -338,7 +336,7 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
       memset(&SecCmd, 0, sizeof(SecCmd));
       memcpy(SecCmd.sectname, SecName.data(), SecName.size());
       memcpy(SecCmd.segname, SegName.data(), SegName.size());
-      SecCmd.addr = R.getStart().getValue();
+      SecCmd.addr = R.getStart();
       SecCmd.size = R.getSize();
       SecCmd.offset = 0;
       SecCmd.align = R.getFirstBlock()->getAlignment();
@@ -350,7 +348,7 @@ class MachODebugObjectSynthesizer : public MachODebugObjectSynthesizerBase {
 
     SectionRange R(MachOContainerBlock->getSection());
     G.allocActions().push_back(
-        {{RegisterActionAddr, R.getStart(), R.getSize()}, {}});
+        {{RegisterActionAddr.getValue(), R.getStart(), R.getSize()}, {}});
     return Error::success();
   }
 

diff  --git a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
index e25d7c4651a9c..eded54f4bfb39 100644
--- a/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ELFNixPlatform.cpp
@@ -58,8 +58,7 @@ class DSOHandleMaterializationUnit : public MaterializationUnit {
     auto &DSOHandleSection =
         G->createSection(".data.__dso_handle", jitlink::MemProt::Read);
     auto &DSOHandleBlock = G->createContentBlock(
-        DSOHandleSection, getDSOHandleContent(PointerSize), orc::ExecutorAddr(),
-        8, 0);
+        DSOHandleSection, getDSOHandleContent(PointerSize), 0, 8, 0);
     auto &DSOHandleSymbol = G->addDefinedSymbol(
         DSOHandleBlock, 0, *R->getInitializerSymbol(), DSOHandleBlock.getSize(),
         jitlink::Linkage::Strong, jitlink::Scope::Default, false, true);
@@ -376,7 +375,7 @@ void ELFNixPlatform::rt_getDeinitializers(
 
   {
     std::lock_guard<std::mutex> Lock(PlatformMutex);
-    auto I = HandleAddrToJITDylib.find(Handle);
+    auto I = HandleAddrToJITDylib.find(Handle.getValue());
     if (I != HandleAddrToJITDylib.end())
       JD = I->second;
   }
@@ -407,7 +406,7 @@ void ELFNixPlatform::rt_lookupSymbol(SendSymbolAddressFn SendResult,
 
   {
     std::lock_guard<std::mutex> Lock(PlatformMutex);
-    auto I = HandleAddrToJITDylib.find(Handle);
+    auto I = HandleAddrToJITDylib.find(Handle.getValue());
     if (I != HandleAddrToJITDylib.end())
       JD = I->second;
   }
@@ -631,11 +630,12 @@ void ELFNixPlatform::ELFNixPlatformPlugin::addDSOHandleSupportPasses(
     assert(I != G.defined_symbols().end() && "Missing DSO handle symbol");
     {
       std::lock_guard<std::mutex> Lock(MP.PlatformMutex);
-      auto HandleAddr = (*I)->getAddress();
+      JITTargetAddress HandleAddr = (*I)->getAddress();
       MP.HandleAddrToJITDylib[HandleAddr] = &JD;
       assert(!MP.InitSeqs.count(&JD) && "InitSeq entry for JD already exists");
       MP.InitSeqs.insert(std::make_pair(
-          &JD, ELFNixJITDylibInitializers(JD.getName(), HandleAddr)));
+          &JD,
+          ELFNixJITDylibInitializers(JD.getName(), ExecutorAddr(HandleAddr))));
     }
     return Error::success();
   });

diff  --git a/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp b/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
index 99cacd1731a2a..4c0fab8aa9fa5 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
@@ -56,17 +56,17 @@ EPCEHFrameRegistrar::Create(ExecutionSession &ES) {
       ExecutorAddr(DeregisterEHFrameWrapperFnAddr));
 }
 
-Error EPCEHFrameRegistrar::registerEHFrames(ExecutorAddr EHFrameSectionAddr,
+Error EPCEHFrameRegistrar::registerEHFrames(JITTargetAddress EHFrameSectionAddr,
                                             size_t EHFrameSectionSize) {
   return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
-      RegisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
+      RegisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
       static_cast<uint64_t>(EHFrameSectionSize));
 }
 
-Error EPCEHFrameRegistrar::deregisterEHFrames(ExecutorAddr EHFrameSectionAddr,
-                                              size_t EHFrameSectionSize) {
+Error EPCEHFrameRegistrar::deregisterEHFrames(
+    JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) {
   return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
-      DeregisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
+      DeregisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
       static_cast<uint64_t>(EHFrameSectionSize));
 }
 

diff  --git a/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
index 247be794ad561..9b712cb8f7caf 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
@@ -80,7 +80,7 @@ class EPCGenericJITLinkMemoryManager::InFlightAlloc
           } else if (FinalizeErr)
             OnFinalize(std::move(FinalizeErr));
           else
-            OnFinalize(FinalizedAlloc(AllocAddr));
+            OnFinalize(FinalizedAlloc(AllocAddr.getValue()));
         },
         Parent.SAs.Allocator, std::move(FR));
   }
@@ -161,7 +161,7 @@ void EPCGenericJITLinkMemoryManager::completeAllocation(
     const auto &AG = KV.first;
     auto &Seg = KV.second;
 
-    Seg.Addr = NextSegAddr;
+    Seg.Addr = NextSegAddr.getValue();
     KV.second.WorkingMem = BL.getGraph().allocateBuffer(Seg.ContentSize).data();
     NextSegAddr += ExecutorAddrDiff(
         alignTo(Seg.ContentSize + Seg.ZeroFillSize, EPC.getPageSize()));

diff  --git a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
index b901a2d2da236..818b6b52ff83d 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
@@ -119,12 +119,10 @@ Error EPCTrampolinePool::grow() {
   unsigned NumTrampolines = TrampolinesPerPage;
 
   auto SegInfo = Alloc->getSegInfo(MemProt::Read | MemProt::Exec);
-  EPCIU.getABISupport().writeTrampolines(SegInfo.WorkingMem.data(),
-                                         SegInfo.Addr.getValue(),
-                                         ResolverAddress, NumTrampolines);
+  EPCIU.getABISupport().writeTrampolines(
+      SegInfo.WorkingMem.data(), SegInfo.Addr, ResolverAddress, NumTrampolines);
   for (unsigned I = 0; I < NumTrampolines; ++I)
-    AvailableTrampolines.push_back(SegInfo.Addr.getValue() +
-                                   (I * TrampolineSize));
+    AvailableTrampolines.push_back(SegInfo.Addr + (I * TrampolineSize));
 
   auto FA = Alloc->finalize();
   if (!FA)
@@ -302,15 +300,15 @@ EPCIndirectionUtils::writeResolverBlock(JITTargetAddress ReentryFnAddr,
     return Alloc.takeError();
 
   auto SegInfo = Alloc->getSegInfo(MemProt::Read | MemProt::Exec);
-  ABI->writeResolverCode(SegInfo.WorkingMem.data(), SegInfo.Addr.getValue(),
-                         ReentryFnAddr, ReentryCtxAddr);
+  ABI->writeResolverCode(SegInfo.WorkingMem.data(), SegInfo.Addr, ReentryFnAddr,
+                         ReentryCtxAddr);
 
   auto FA = Alloc->finalize();
   if (!FA)
     return FA.takeError();
 
   ResolverBlock = std::move(*FA);
-  return SegInfo.Addr.getValue();
+  return SegInfo.Addr;
 }
 
 std::unique_ptr<IndirectStubsManager>
@@ -371,9 +369,8 @@ EPCIndirectionUtils::getIndirectStubs(unsigned NumStubs) {
     auto StubSeg = Alloc->getSegInfo(StubProt);
     auto PtrSeg = Alloc->getSegInfo(PtrProt);
 
-    ABI->writeIndirectStubsBlock(StubSeg.WorkingMem.data(),
-                                 StubSeg.Addr.getValue(),
-                                 PtrSeg.Addr.getValue(), NumStubsToAllocate);
+    ABI->writeIndirectStubsBlock(StubSeg.WorkingMem.data(), StubSeg.Addr,
+                                 PtrSeg.Addr, NumStubsToAllocate);
 
     auto FA = Alloc->finalize();
     if (!FA)
@@ -384,8 +381,8 @@ EPCIndirectionUtils::getIndirectStubs(unsigned NumStubs) {
     auto StubExecutorAddr = StubSeg.Addr;
     auto PtrExecutorAddr = PtrSeg.Addr;
     for (unsigned I = 0; I != NumStubsToAllocate; ++I) {
-      AvailableIndirectStubs.push_back(IndirectStubInfo(
-          StubExecutorAddr.getValue(), PtrExecutorAddr.getValue()));
+      AvailableIndirectStubs.push_back(
+          IndirectStubInfo(StubExecutorAddr, PtrExecutorAddr));
       StubExecutorAddr += ABI->getStubSize();
       PtrExecutorAddr += ABI->getPointerSize();
     }

diff  --git a/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
index 7a71d2f781d7b..f427271bb45de 100644
--- a/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp
@@ -410,7 +410,7 @@ Error addFunctionPointerRelocationsToCurrentSymbol(jitlink::Symbol &Sym,
   while (I < Content.size()) {
     MCInst Instr;
     uint64_t InstrSize = 0;
-    uint64_t InstrStart = SymAddress.getValue() + I;
+    uint64_t InstrStart = SymAddress + I;
     auto DecodeStatus = Disassembler.getInstruction(
         Instr, InstrSize, Content.drop_front(I), InstrStart, CommentStream);
     if (DecodeStatus != MCDisassembler::Success) {
@@ -426,7 +426,7 @@ Error addFunctionPointerRelocationsToCurrentSymbol(jitlink::Symbol &Sym,
     // Check for a PC-relative address equal to the symbol itself.
     auto PCRelAddr =
         MIA.evaluateMemoryOperandAddress(Instr, &STI, InstrStart, InstrSize);
-    if (!PCRelAddr || *PCRelAddr != SymAddress.getValue())
+    if (!PCRelAddr.hasValue() || PCRelAddr.getValue() != SymAddress)
       continue;
 
     auto RelocOffInInstr =
@@ -438,8 +438,8 @@ Error addFunctionPointerRelocationsToCurrentSymbol(jitlink::Symbol &Sym,
       continue;
     }
 
-    auto RelocOffInBlock = orc::ExecutorAddr(InstrStart) + *RelocOffInInstr -
-                           SymAddress + Sym.getOffset();
+    auto RelocOffInBlock =
+        InstrStart + *RelocOffInInstr - SymAddress + Sym.getOffset();
     if (ExistingRelocations.contains(RelocOffInBlock))
       continue;
 

diff  --git a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
index ab978ed3f3fc9..fb2e90e1c9c53 100644
--- a/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/MachOPlatform.cpp
@@ -106,8 +106,7 @@ class MachOHeaderMaterializationUnit : public MaterializationUnit {
     auto HeaderContent = G.allocateString(
         StringRef(reinterpret_cast<const char *>(&Hdr), sizeof(Hdr)));
 
-    return G.createContentBlock(HeaderSection, HeaderContent,
-                                orc::ExecutorAddr(), 8, 0);
+    return G.createContentBlock(HeaderSection, HeaderContent, 0, 8, 0);
   }
 
   static MaterializationUnit::Interface
@@ -440,7 +439,7 @@ void MachOPlatform::rt_getDeinitializers(SendDeinitializerSequenceFn SendResult,
 
   {
     std::lock_guard<std::mutex> Lock(PlatformMutex);
-    auto I = HeaderAddrToJITDylib.find(Handle);
+    auto I = HeaderAddrToJITDylib.find(Handle.getValue());
     if (I != HeaderAddrToJITDylib.end())
       JD = I->second;
   }
@@ -470,7 +469,7 @@ void MachOPlatform::rt_lookupSymbol(SendSymbolAddressFn SendResult,
 
   {
     std::lock_guard<std::mutex> Lock(PlatformMutex);
-    auto I = HeaderAddrToJITDylib.find(Handle);
+    auto I = HeaderAddrToJITDylib.find(Handle.getValue());
     if (I != HeaderAddrToJITDylib.end())
       JD = I->second;
   }
@@ -662,11 +661,11 @@ Error MachOPlatform::MachOPlatformPlugin::associateJITDylibHeaderSymbol(
 
   auto &JD = MR.getTargetJITDylib();
   std::lock_guard<std::mutex> Lock(MP.PlatformMutex);
-  auto HeaderAddr = (*I)->getAddress();
+  JITTargetAddress HeaderAddr = (*I)->getAddress();
   MP.HeaderAddrToJITDylib[HeaderAddr] = &JD;
   assert(!MP.InitSeqs.count(&JD) && "InitSeq entry for JD already exists");
-  MP.InitSeqs.insert(
-      std::make_pair(&JD, MachOJITDylibInitializers(JD.getName(), HeaderAddr)));
+  MP.InitSeqs.insert(std::make_pair(
+      &JD, MachOJITDylibInitializers(JD.getName(), ExecutorAddr(HeaderAddr))));
   return Error::success();
 }
 
@@ -793,7 +792,7 @@ Error MachOPlatform::MachOPlatformPlugin::registerInitSections(
 
   if (auto *ObjCImageInfoSec = G.findSectionByName(ObjCImageInfoSectionName)) {
     if (auto Addr = jitlink::SectionRange(*ObjCImageInfoSec).getStart())
-      ObjCImageInfoAddr = Addr;
+      ObjCImageInfoAddr.setValue(Addr);
   }
 
   for (auto InitSectionName : InitSectionNames)
@@ -880,10 +879,11 @@ Error MachOPlatform::MachOPlatformPlugin::registerEHAndTLVSections(
   if (auto *EHFrameSection = G.findSectionByName(EHFrameSectionName)) {
     jitlink::SectionRange R(*EHFrameSection);
     if (!R.empty())
-      G.allocActions().push_back({{MP.orc_rt_macho_register_ehframe_section,
-                                   R.getStart(), R.getSize()},
-                                  {MP.orc_rt_macho_deregister_ehframe_section,
-                                   R.getStart(), R.getSize()}});
+      G.allocActions().push_back(
+          {{MP.orc_rt_macho_register_ehframe_section.getValue(), R.getStart(),
+            R.getSize()},
+           {MP.orc_rt_macho_deregister_ehframe_section.getValue(), R.getStart(),
+            R.getSize()}});
   }
 
   // Get a pointer to the thread data section if there is one. It will be used
@@ -913,10 +913,10 @@ Error MachOPlatform::MachOPlatformPlugin::registerEHAndTLVSections(
                                        inconvertibleErrorCode());
 
       G.allocActions().push_back(
-          {{MP.orc_rt_macho_register_thread_data_section, R.getStart(),
-            R.getSize()},
-           {MP.orc_rt_macho_deregister_thread_data_section, R.getStart(),
-            R.getSize()}});
+          {{MP.orc_rt_macho_register_thread_data_section.getValue(),
+            R.getStart(), R.getSize()},
+           {MP.orc_rt_macho_deregister_thread_data_section.getValue(),
+            R.getStart(), R.getSize()}});
     }
   }
   return Error::success();
@@ -963,8 +963,10 @@ Error MachOPlatform::MachOPlatformPlugin::registerEHSectionsPhase1(
   // Otherwise, add allocation actions to the graph to register eh-frames for
   // this object.
   G.allocActions().push_back(
-      {{orc_rt_macho_register_ehframe_section, R.getStart(), R.getSize()},
-       {orc_rt_macho_deregister_ehframe_section, R.getStart(), R.getSize()}});
+      {{orc_rt_macho_register_ehframe_section.getValue(), R.getStart(),
+        R.getSize()},
+       {orc_rt_macho_deregister_ehframe_section.getValue(), R.getStart(),
+        R.getSize()}});
 
   return Error::success();
 }

diff  --git a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
index 8b4347f5cf523..0d6a33c5685ee 100644
--- a/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp
@@ -217,7 +217,7 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
           Flags |= JITSymbolFlags::Exported;
 
         InternedResult[InternedName] =
-            JITEvaluatedSymbol(Sym->getAddress().getValue(), Flags);
+            JITEvaluatedSymbol(Sym->getAddress(), Flags);
         if (AutoClaim && !MR->getSymbols().count(InternedName)) {
           assert(!ExtraSymbolsToClaim.count(InternedName) &&
                  "Duplicate symbol to claim?");
@@ -235,7 +235,7 @@ class ObjectLinkingLayerJITLinkContext final : public JITLinkContext {
         if (Sym->getLinkage() == Linkage::Weak)
           Flags |= JITSymbolFlags::Weak;
         InternedResult[InternedName] =
-            JITEvaluatedSymbol(Sym->getAddress().getValue(), Flags);
+            JITEvaluatedSymbol(Sym->getAddress(), Flags);
         if (AutoClaim && !MR->getSymbols().count(InternedName)) {
           assert(!ExtraSymbolsToClaim.count(InternedName) &&
                  "Duplicate symbol to claim?");
@@ -743,7 +743,7 @@ void EHFrameRegistrationPlugin::modifyPassConfig(
     PassConfiguration &PassConfig) {
 
   PassConfig.PostFixupPasses.push_back(createEHFrameRecorderPass(
-      G.getTargetTriple(), [this, &MR](ExecutorAddr Addr, size_t Size) {
+      G.getTargetTriple(), [this, &MR](JITTargetAddress Addr, size_t Size) {
         if (Addr) {
           std::lock_guard<std::mutex> Lock(EHFramePluginMutex);
           assert(!InProcessLinks.count(&MR) &&

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
index d79dbc410e8e9..5efdff65f566d 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-elf.cpp
@@ -120,8 +120,8 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
         // then add it to the GOT entry info table.
         if (Sym->getSize() != 0) {
           if (auto TS = getELFGOTTarget(G, Sym->getBlock()))
-            FileInfo.GOTEntryInfos[TS->getName()] = {
-                Sym->getSymbolContent(), Sym->getAddress().getValue()};
+            FileInfo.GOTEntryInfos[TS->getName()] = {Sym->getSymbolContent(),
+                                                     Sym->getAddress()};
           else
             return TS.takeError();
         }
@@ -133,7 +133,7 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
 
         if (auto TS = getELFStubTarget(G, Sym->getBlock()))
           FileInfo.StubInfos[TS->getName()] = {Sym->getSymbolContent(),
-                                               Sym->getAddress().getValue()};
+                                               Sym->getAddress()};
         else
           return TS.takeError();
         SectionContainsContent = true;
@@ -141,19 +141,18 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
 
       if (Sym->hasName()) {
         if (Sym->isSymbolZeroFill()) {
-          S.SymbolInfos[Sym->getName()] = {Sym->getSize(),
-                                           Sym->getAddress().getValue()};
+          S.SymbolInfos[Sym->getName()] = {Sym->getSize(), Sym->getAddress()};
           SectionContainsZeroFill = true;
         } else {
           S.SymbolInfos[Sym->getName()] = {Sym->getSymbolContent(),
-                                           Sym->getAddress().getValue()};
+                                           Sym->getAddress()};
           SectionContainsContent = true;
         }
       }
     }
 
-    auto SecAddr = FirstSym->getAddress();
-    auto SecSize =
+    JITTargetAddress SecAddr = FirstSym->getAddress();
+    uint64_t SecSize =
         (LastSym->getBlock().getAddress() + LastSym->getBlock().getSize()) -
         SecAddr;
 
@@ -162,11 +161,11 @@ Error registerELFGraphInfo(Session &S, LinkGraph &G) {
                                      "supported yet",
                                      inconvertibleErrorCode());
     if (SectionContainsZeroFill)
-      FileInfo.SectionInfos[Sec.getName()] = {SecSize, SecAddr.getValue()};
+      FileInfo.SectionInfos[Sec.getName()] = {SecSize, SecAddr};
     else
       FileInfo.SectionInfos[Sec.getName()] = {
           ArrayRef<char>(FirstSym->getBlock().getContent().data(), SecSize),
-          SecAddr.getValue()};
+          SecAddr};
   }
 
   return Error::success();

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
index ed7fd1a57a724..7bd6bded5b7f5 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink-macho.cpp
@@ -118,8 +118,8 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
                                          inconvertibleErrorCode());
 
         if (auto TS = getMachOGOTTarget(G, Sym->getBlock()))
-          FileInfo.GOTEntryInfos[TS->getName()] = {
-              Sym->getSymbolContent(), Sym->getAddress().getValue()};
+          FileInfo.GOTEntryInfos[TS->getName()] = {Sym->getSymbolContent(),
+                                                   Sym->getAddress()};
         else
           return TS.takeError();
         SectionContainsContent = true;
@@ -130,25 +130,24 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
 
         if (auto TS = getMachOStubTarget(G, Sym->getBlock()))
           FileInfo.StubInfos[TS->getName()] = {Sym->getSymbolContent(),
-                                               Sym->getAddress().getValue()};
+                                               Sym->getAddress()};
         else
           return TS.takeError();
         SectionContainsContent = true;
       } else if (Sym->hasName()) {
         if (Sym->isSymbolZeroFill()) {
-          S.SymbolInfos[Sym->getName()] = {Sym->getSize(),
-                                           Sym->getAddress().getValue()};
+          S.SymbolInfos[Sym->getName()] = {Sym->getSize(), Sym->getAddress()};
           SectionContainsZeroFill = true;
         } else {
           S.SymbolInfos[Sym->getName()] = {Sym->getSymbolContent(),
-                                           Sym->getAddress().getValue()};
+                                           Sym->getAddress()};
           SectionContainsContent = true;
         }
       }
     }
 
-    auto SecAddr = FirstSym->getAddress();
-    auto SecSize =
+    JITTargetAddress SecAddr = FirstSym->getAddress();
+    uint64_t SecSize =
         (LastSym->getBlock().getAddress() + LastSym->getBlock().getSize()) -
         SecAddr;
 
@@ -157,11 +156,11 @@ Error registerMachOGraphInfo(Session &S, LinkGraph &G) {
                                      "supported yet",
                                      inconvertibleErrorCode());
     if (SectionContainsZeroFill)
-      FileInfo.SectionInfos[Sec.getName()] = {SecSize, SecAddr.getValue()};
+      FileInfo.SectionInfos[Sec.getName()] = {SecSize, SecAddr};
     else
       FileInfo.SectionInfos[Sec.getName()] = {
           ArrayRef<char>(FirstSym->getBlock().getContent().data(), SecSize),
-          SecAddr.getValue()};
+          SecAddr};
   }
 
   return Error::success();

diff  --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
index 7678a85b836fd..e6588090625e8 100644
--- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
+++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp
@@ -327,7 +327,7 @@ static uint64_t computeTotalBlockSizes(LinkGraph &G) {
 }
 
 static void dumpSectionContents(raw_ostream &OS, LinkGraph &G) {
-  constexpr orc::ExecutorAddrDiff DumpWidth = 16;
+  constexpr JITTargetAddress DumpWidth = 16;
   static_assert(isPowerOf2_64(DumpWidth), "DumpWidth must be a power of two");
 
   // Put sections in address order.
@@ -360,13 +360,12 @@ static void dumpSectionContents(raw_ostream &OS, LinkGraph &G) {
       return LHS->getAddress() < RHS->getAddress();
     });
 
-    orc::ExecutorAddr NextAddr(Syms.front()->getAddress().getValue() &
-                               ~(DumpWidth - 1));
+    JITTargetAddress NextAddr = Syms.front()->getAddress() & ~(DumpWidth - 1);
     for (auto *Sym : Syms) {
       bool IsZeroFill = Sym->getBlock().isZeroFill();
-      auto SymStart = Sym->getAddress();
-      auto SymSize = Sym->getSize();
-      auto SymEnd = SymStart + SymSize;
+      JITTargetAddress SymStart = Sym->getAddress();
+      JITTargetAddress SymSize = Sym->getSize();
+      JITTargetAddress SymEnd = SymStart + SymSize;
       const uint8_t *SymData = IsZeroFill ? nullptr
                                           : reinterpret_cast<const uint8_t *>(
                                                 Sym->getSymbolContent().data());
@@ -434,8 +433,8 @@ class JITLinkSlabAllocator final : public JITLinkMemoryManager {
         assert(BL.graphAllocActions().empty() &&
                "Support function calls not supported yet");
 
-        OnFinalized(
-            FinalizedAlloc(ExecutorAddr::fromPtr(new FinalizedAllocInfo())));
+        OnFinalized(FinalizedAlloc(
+            pointerToJITTargetAddress(new FinalizedAllocInfo())));
       }
 
       void abandon(OnAbandonedFunction OnAbandoned) override {
@@ -501,8 +500,8 @@ class JITLinkSlabAllocator final : public JITLinkMemoryManager {
     sys::MemoryBlock FinalizeSegs(AllocBase + SegsSizes->StandardSegs,
                                   SegsSizes->FinalizeSegs);
 
-    auto NextStandardSegAddr = ExecutorAddr::fromPtr(StandardSegs.base());
-    auto NextFinalizeSegAddr = ExecutorAddr::fromPtr(FinalizeSegs.base());
+    auto NextStandardSegAddr = pointerToJITTargetAddress(StandardSegs.base());
+    auto NextFinalizeSegAddr = pointerToJITTargetAddress(FinalizeSegs.base());
 
     LLVM_DEBUG({
       dbgs() << "JITLinkSlabAllocator allocated:\n";
@@ -533,7 +532,7 @@ class JITLinkSlabAllocator final : public JITLinkMemoryManager {
         dbgs() << "  " << Group << " -> " << formatv("{0:x16}", SegAddr)
                << "\n";
       });
-      Seg.WorkingMem = SegAddr.toPtr<char *>();
+      Seg.WorkingMem = jitTargetAddressToPointer<char *>(SegAddr);
       Seg.Addr = SegAddr + NextSlabDelta;
 
       SegAddr += alignTo(Seg.ContentSize + Seg.ZeroFillSize, PageSize);
@@ -560,7 +559,7 @@ class JITLinkSlabAllocator final : public JITLinkMemoryManager {
     Error Err = Error::success();
     for (auto &FA : FinalizedAllocs) {
       std::unique_ptr<FinalizedAllocInfo> FAI(
-          FA.release().toPtr<FinalizedAllocInfo *>());
+          jitTargetAddressToPointer<FinalizedAllocInfo *>(FA.release()));
 
       // FIXME: Run dealloc actions.
 
@@ -614,8 +613,8 @@ class JITLinkSlabAllocator final : public JITLinkMemoryManager {
     // Calculate the target address delta to link as-if slab were at
     // SlabAddress.
     if (SlabAddress != ~0ULL)
-      NextSlabDelta = ExecutorAddr(SlabAddress) -
-                      ExecutorAddr::fromPtr(SlabRemaining.base());
+      NextSlabDelta =
+          SlabAddress - pointerToJITTargetAddress(SlabRemaining.base());
   }
 
   Error freeBlock(sys::MemoryBlock MB) {

diff  --git a/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp b/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
index fdc6fbdff19be..3cc6a8ad0fe65 100644
--- a/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
+++ b/llvm/unittests/ExecutionEngine/JITLink/LinkGraphTests.cpp
@@ -76,16 +76,15 @@ TEST(LinkGraphTest, AddressAccess) {
               getGenericEdgeKindName);
 
   auto &Sec1 = G.createSection("__data.1", MemProt::Read | MemProt::Write);
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec1, BlockContent, B1Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
   auto &S1 = G.addDefinedSymbol(B1, 4, "S1", 4, Linkage::Strong, Scope::Default,
                                 false, false);
   B1.addEdge(Edge::FirstRelocation, 8, S1, 0);
   auto &E1 = *B1.edges().begin();
 
-  EXPECT_EQ(B1.getAddress(), B1Addr) << "Incorrect block address";
-  EXPECT_EQ(S1.getAddress(), B1Addr + 4) << "Incorrect symbol address";
-  EXPECT_EQ(B1.getFixupAddress(E1), B1Addr + 8) << "Incorrect fixup address";
+  EXPECT_EQ(B1.getAddress(), 0x1000U) << "Incorrect block address";
+  EXPECT_EQ(S1.getAddress(), 0x1004U) << "Incorrect symbol address";
+  EXPECT_EQ(B1.getFixupAddress(E1), 0x1008U) << "Incorrect fixup address";
 }
 
 TEST(LinkGraphTest, BlockAndSymbolIteration) {
@@ -93,20 +92,16 @@ TEST(LinkGraphTest, BlockAndSymbolIteration) {
   LinkGraph G("foo", Triple("x86_64-apple-darwin"), 8, support::little,
               getGenericEdgeKindName);
   auto &Sec1 = G.createSection("__data.1", MemProt::Read | MemProt::Write);
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec1, BlockContent, B1Addr, 8, 0);
-  orc::ExecutorAddr B2Addr(0x1000);
-  auto &B2 = G.createContentBlock(Sec1, BlockContent, B2Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
+  auto &B2 = G.createContentBlock(Sec1, BlockContent, 0x2000, 8, 0);
   auto &S1 = G.addDefinedSymbol(B1, 0, "S1", 4, Linkage::Strong, Scope::Default,
                                 false, false);
   auto &S2 = G.addDefinedSymbol(B2, 4, "S2", 4, Linkage::Strong, Scope::Default,
                                 false, false);
 
   auto &Sec2 = G.createSection("__data.2", MemProt::Read | MemProt::Write);
-  orc::ExecutorAddr B3Addr(0x3000);
-  auto &B3 = G.createContentBlock(Sec2, BlockContent, B3Addr, 8, 0);
-  orc::ExecutorAddr B4Addr(0x4000);
-  auto &B4 = G.createContentBlock(Sec2, BlockContent, B4Addr, 8, 0);
+  auto &B3 = G.createContentBlock(Sec2, BlockContent, 0x3000, 8, 0);
+  auto &B4 = G.createContentBlock(Sec2, BlockContent, 0x4000, 8, 0);
   auto &S3 = G.addDefinedSymbol(B3, 0, "S3", 4, Linkage::Strong, Scope::Default,
                                 false, false);
   auto &S4 = G.addDefinedSymbol(B4, 4, "S4", 4, Linkage::Strong, Scope::Default,
@@ -146,8 +141,7 @@ TEST(LinkGraphTest, ContentAccessAndUpdate) {
   auto &Sec = G.createSection("__data", MemProt::Read | MemProt::Write);
 
   // Create an initial block.
-  orc::ExecutorAddr BAddr(0x1000);
-  auto &B = G.createContentBlock(Sec, BlockContent, BAddr, 8, 0);
+  auto &B = G.createContentBlock(Sec, BlockContent, 0x1000, 8, 0);
 
   EXPECT_FALSE(B.isContentMutable()) << "Content unexpectedly mutable";
   EXPECT_EQ(B.getContent().data(), BlockContent.data())
@@ -202,8 +196,7 @@ TEST(LinkGraphTest, ContentAccessAndUpdate) {
       << "Unexpected block content size";
 
   // Create an initially mutable block.
-  auto &B2 = G.createMutableContentBlock(Sec, MutableContent,
-                                         orc::ExecutorAddr(0x10000), 8, 0);
+  auto &B2 = G.createMutableContentBlock(Sec, MutableContent, 0x10000, 8, 0);
 
   EXPECT_TRUE(B2.isContentMutable()) << "Expected B2 content to be mutable";
 }
@@ -215,8 +208,7 @@ TEST(LinkGraphTest, MakeExternal) {
   auto &Sec = G.createSection("__data", MemProt::Read | MemProt::Write);
 
   // Create an initial block.
-  auto &B1 =
-      G.createContentBlock(Sec, BlockContent, orc::ExecutorAddr(0x1000), 8, 0);
+  auto &B1 = G.createContentBlock(Sec, BlockContent, 0x1000, 8, 0);
 
   // Add a symbol to the block.
   auto &S1 = G.addDefinedSymbol(B1, 0, "S1", 4, Linkage::Strong, Scope::Default,
@@ -226,8 +218,7 @@ TEST(LinkGraphTest, MakeExternal) {
   EXPECT_FALSE(S1.isExternal()) << "Symbol should not be external";
   EXPECT_FALSE(S1.isAbsolute()) << "Symbol should not be absolute";
   EXPECT_TRUE(&S1.getBlock()) << "Symbol should have a non-null block";
-  EXPECT_EQ(S1.getAddress(), orc::ExecutorAddr(0x1000))
-      << "Unexpected symbol address";
+  EXPECT_EQ(S1.getAddress(), 0x1000U) << "Unexpected symbol address";
 
   EXPECT_EQ(
       std::distance(G.defined_symbols().begin(), G.defined_symbols().end()), 1U)
@@ -244,8 +235,7 @@ TEST(LinkGraphTest, MakeExternal) {
   EXPECT_FALSE(S1.isDefined()) << "Symbol should not be defined";
   EXPECT_TRUE(S1.isExternal()) << "Symbol should be external";
   EXPECT_FALSE(S1.isAbsolute()) << "Symbol should not be absolute";
-  EXPECT_EQ(S1.getAddress(), orc::ExecutorAddr())
-      << "Unexpected symbol address";
+  EXPECT_EQ(S1.getAddress(), 0U) << "Unexpected symbol address";
 
   EXPECT_EQ(
       std::distance(G.defined_symbols().begin(), G.defined_symbols().end()), 0U)
@@ -263,8 +253,7 @@ TEST(LinkGraphTest, MakeDefined) {
   auto &Sec = G.createSection("__data", MemProt::Read | MemProt::Write);
 
   // Create an initial block.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec, BlockContent, B1Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec, BlockContent, 0x1000, 8, 0);
 
   // Add an external symbol.
   auto &S1 = G.addExternalSymbol("S1", 4, Linkage::Strong);
@@ -272,8 +261,7 @@ TEST(LinkGraphTest, MakeDefined) {
   EXPECT_FALSE(S1.isDefined()) << "Symbol should not be defined";
   EXPECT_TRUE(S1.isExternal()) << "Symbol should be external";
   EXPECT_FALSE(S1.isAbsolute()) << "Symbol should not be absolute";
-  EXPECT_EQ(S1.getAddress(), orc::ExecutorAddr())
-      << "Unexpected symbol address";
+  EXPECT_EQ(S1.getAddress(), 0U) << "Unexpected symbol address";
 
   EXPECT_EQ(
       std::distance(G.defined_symbols().begin(), G.defined_symbols().end()), 0U)
@@ -291,8 +279,7 @@ TEST(LinkGraphTest, MakeDefined) {
   EXPECT_FALSE(S1.isExternal()) << "Symbol should not be external";
   EXPECT_FALSE(S1.isAbsolute()) << "Symbol should not be absolute";
   EXPECT_TRUE(&S1.getBlock()) << "Symbol should have a non-null block";
-  EXPECT_EQ(S1.getAddress(), orc::ExecutorAddr(0x1000U))
-      << "Unexpected symbol address";
+  EXPECT_EQ(S1.getAddress(), 0x1000U) << "Unexpected symbol address";
 
   EXPECT_EQ(
       std::distance(G.defined_symbols().begin(), G.defined_symbols().end()), 1U)
@@ -309,13 +296,10 @@ TEST(LinkGraphTest, TransferDefinedSymbol) {
               getGenericEdgeKindName);
   auto &Sec = G.createSection("__data", MemProt::Read | MemProt::Write);
 
-  // Create initial blocks.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec, BlockContent, B1Addr, 8, 0);
-  orc::ExecutorAddr B2Addr(0x2000);
-  auto &B2 = G.createContentBlock(Sec, BlockContent, B2Addr, 8, 0);
-  orc::ExecutorAddr B3Addr(0x3000);
-  auto &B3 = G.createContentBlock(Sec, BlockContent.slice(0, 32), B3Addr, 8, 0);
+  // Create an initial block.
+  auto &B1 = G.createContentBlock(Sec, BlockContent, 0x1000, 8, 0);
+  auto &B2 = G.createContentBlock(Sec, BlockContent, 0x2000, 8, 0);
+  auto &B3 = G.createContentBlock(Sec, BlockContent.slice(0, 32), 0x3000, 8, 0);
 
   // Add a symbol.
   auto &S1 = G.addDefinedSymbol(B1, 0, "S1", B1.getSize(), Linkage::Strong,
@@ -345,10 +329,8 @@ TEST(LinkGraphTest, TransferDefinedSymbolAcrossSections) {
   auto &Sec2 = G.createSection("__data.2", MemProt::Read | MemProt::Write);
 
   // Create blocks in each section.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec1, BlockContent, B1Addr, 8, 0);
-  orc::ExecutorAddr B2Addr(0x2000);
-  auto &B2 = G.createContentBlock(Sec2, BlockContent, B2Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
+  auto &B2 = G.createContentBlock(Sec2, BlockContent, 0x2000, 8, 0);
 
   // Add a symbol to section 1.
   auto &S1 = G.addDefinedSymbol(B1, 0, "S1", B1.getSize(), Linkage::Strong,
@@ -377,10 +359,8 @@ TEST(LinkGraphTest, TransferBlock) {
   auto &Sec2 = G.createSection("__data.2", MemProt::Read | MemProt::Write);
 
   // Create an initial block.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec1, BlockContent, B1Addr, 8, 0);
-  orc::ExecutorAddr B2Addr(0x2000);
-  auto &B2 = G.createContentBlock(Sec1, BlockContent, B2Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
+  auto &B2 = G.createContentBlock(Sec1, BlockContent, 0x2000, 8, 0);
 
   // Add some symbols on B1...
   G.addDefinedSymbol(B1, 0, "S1", B1.getSize(), Linkage::Strong, Scope::Default,
@@ -424,12 +404,9 @@ TEST(LinkGraphTest, MergeSections) {
   auto &Sec3 = G.createSection("__data.3", MemProt::Read | MemProt::Write);
 
   // Create an initial block.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec1, BlockContent, B1Addr, 8, 0);
-  orc::ExecutorAddr B2Addr(0x2000);
-  auto &B2 = G.createContentBlock(Sec2, BlockContent, B2Addr, 8, 0);
-  orc::ExecutorAddr B3Addr(0x3000);
-  auto &B3 = G.createContentBlock(Sec3, BlockContent, B3Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
+  auto &B2 = G.createContentBlock(Sec2, BlockContent, 0x2000, 8, 0);
+  auto &B3 = G.createContentBlock(Sec3, BlockContent, 0x3000, 8, 0);
 
   // Add a symbols for each block.
   G.addDefinedSymbol(B1, 0, "S1", B1.getSize(), Linkage::Strong, Scope::Default,
@@ -505,8 +482,7 @@ TEST(LinkGraphTest, SplitBlock) {
   auto &Sec = G.createSection("__data", MemProt::Read | MemProt::Write);
 
   // Create the block to split.
-  orc::ExecutorAddr B1Addr(0x1000);
-  auto &B1 = G.createContentBlock(Sec, BlockContent, B1Addr, 8, 0);
+  auto &B1 = G.createContentBlock(Sec, BlockContent, 0x1000, 8, 0);
 
   // Add some symbols to the block.
   auto &S1 = G.addDefinedSymbol(B1, 0, "S1", 4, Linkage::Strong, Scope::Default,
@@ -523,8 +499,7 @@ TEST(LinkGraphTest, SplitBlock) {
 
   // Add an extra block, EB, and target symbols, and use these to add edges
   // from B1 to EB.
-  orc::ExecutorAddr EBAddr(0x2000);
-  auto &EB = G.createContentBlock(Sec, BlockContent, EBAddr, 8, 0);
+  auto &EB = G.createContentBlock(Sec, BlockContent, 0x2000, 8, 0);
   auto &ES1 = G.addDefinedSymbol(EB, 0, "TS1", 4, Linkage::Strong,
                                  Scope::Default, false, false);
   auto &ES2 = G.addDefinedSymbol(EB, 4, "TS2", 4, Linkage::Strong,
@@ -544,10 +519,10 @@ TEST(LinkGraphTest, SplitBlock) {
   auto &B2 = G.splitBlock(B1, 8);
 
   // Check that the block addresses and content matches what we would expect.
-  EXPECT_EQ(B1.getAddress(), B1Addr + 8);
+  EXPECT_EQ(B1.getAddress(), 0x1008U);
   EXPECT_EQ(B1.getContent(), BlockContent.slice(8));
 
-  EXPECT_EQ(B2.getAddress(), B1Addr);
+  EXPECT_EQ(B2.getAddress(), 0x1000U);
   EXPECT_EQ(B2.getContent(), BlockContent.slice(0, 8));
 
   // Check that symbols in B1 were transferred as expected:

diff  --git a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
index 1f638f407c480..0181c558b60d0 100644
--- a/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
+++ b/llvm/unittests/ExecutionEngine/Orc/ObjectLinkingLayerTest.cpp
@@ -44,8 +44,7 @@ TEST_F(ObjectLinkingLayerTest, AddLinkGraph) {
                                   support::little, x86_64::getEdgeKindName);
 
   auto &Sec1 = G->createSection("__data", MemProt::Read | MemProt::Write);
-  auto &B1 = G->createContentBlock(Sec1, BlockContent,
-                                   orc::ExecutorAddr(0x1000), 8, 0);
+  auto &B1 = G->createContentBlock(Sec1, BlockContent, 0x1000, 8, 0);
   G->addDefinedSymbol(B1, 4, "_X", 4, Linkage::Strong, Scope::Default, false,
                       false);
 


        


More information about the llvm-commits mailing list