[JITLink] Use edge kind names for fixups in EHFrameEdgeFixer.
authorLang Hames <lhames@gmail.com>
Sun, 24 Jan 2021 04:33:04 +0000 (15:33 +1100)
committerLang Hames <lhames@gmail.com>
Sun, 24 Jan 2021 04:38:04 +0000 (15:38 +1100)
Previously FDE field names were used, but the fixup kind used for a field can
vary based on the pointer encoding.

This change will improve readability / maintainability when EH-frame support is
added to JITLink/ELF.

llvm/lib/ExecutionEngine/JITLink/EHFrameSupport.cpp
llvm/lib/ExecutionEngine/JITLink/EHFrameSupportImpl.h
llvm/lib/ExecutionEngine/JITLink/MachO_x86_64.cpp

index 7a89476..8b730bc 100644 (file)
@@ -119,10 +119,9 @@ Error EHFrameSplitter::processBlock(LinkGraph &G, Block &B,
 }
 
 EHFrameEdgeFixer::EHFrameEdgeFixer(StringRef EHFrameSectionName,
-                                   Edge::Kind FDEToCIE, Edge::Kind FDEToPCBegin,
-                                   Edge::Kind FDEToLSDA)
-    : EHFrameSectionName(EHFrameSectionName), FDEToCIE(FDEToCIE),
-      FDEToPCBegin(FDEToPCBegin), FDEToLSDA(FDEToLSDA) {}
+                                   Edge::Kind Delta64, Edge::Kind NegDelta32)
+    : EHFrameSectionName(EHFrameSectionName), Delta64(Delta64),
+      NegDelta32(NegDelta32) {}
 
 Error EHFrameEdgeFixer::operator()(LinkGraph &G) {
   auto *EHFrame = G.findSectionByName(EHFrameSectionName);
@@ -419,7 +418,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
       else
         return CIEInfoOrErr.takeError();
       assert(CIEInfo->CIESymbol && "CIEInfo has no CIE symbol set");
-      B.addEdge(FDEToCIE, RecordOffset + CIEDeltaFieldOffset,
+      B.addEdge(NegDelta32, RecordOffset + CIEDeltaFieldOffset,
                 *CIEInfo->CIESymbol, 0);
     } else {
       LLVM_DEBUG({
@@ -459,8 +458,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
       auto PCBeginSym = getOrCreateSymbol(PC, PCBegin);
       if (!PCBeginSym)
         return PCBeginSym.takeError();
-      B.addEdge(FDEToPCBegin, RecordOffset + PCBeginFieldOffset, *PCBeginSym,
-                0);
+      B.addEdge(Delta64, RecordOffset + PCBeginFieldOffset, *PCBeginSym, 0);
       PCBeginBlock = &PCBeginSym->getBlock();
     } else {
       auto &EI = PCEdgeItr->second;
@@ -521,7 +519,7 @@ Error EHFrameEdgeFixer::processFDE(ParseContext &PC, Block &B,
                << formatv("{0:x16}", RecordAddress + LSDAFieldOffset)
                << " to LSDA at " << formatv("{0:x16}", LSDA) << "\n";
       });
-      B.addEdge(FDEToLSDA, RecordOffset + LSDAFieldOffset, *LSDASym, 0);
+      B.addEdge(Delta64, RecordOffset + LSDAFieldOffset, *LSDASym, 0);
     } else {
       LLVM_DEBUG({
         auto &EI = LSDAEdgeItr->second;
index a8cd32c..83f27a2 100644 (file)
@@ -40,8 +40,8 @@ private:
 /// edges.
 class EHFrameEdgeFixer {
 public:
-  EHFrameEdgeFixer(StringRef EHFrameSectionName, Edge::Kind FDEToCIE,
-                   Edge::Kind FDEToPCBegin, Edge::Kind FDEToLSDA);
+  EHFrameEdgeFixer(StringRef EHFrameSectionName, Edge::Kind Delta64,
+                   Edge::Kind NegDelta32);
   Error operator()(LinkGraph &G);
 
 private:
@@ -101,9 +101,8 @@ private:
   Expected<Symbol &> getOrCreateSymbol(ParseContext &PC, JITTargetAddress Addr);
 
   StringRef EHFrameSectionName;
-  Edge::Kind FDEToCIE;
-  Edge::Kind FDEToPCBegin;
-  Edge::Kind FDEToLSDA;
+  Edge::Kind Delta64;
+  Edge::Kind NegDelta32;
 };
 
 } // end namespace jitlink
index e32bf84..24559cc 100644 (file)
@@ -670,7 +670,7 @@ void link_MachO_x86_64(std::unique_ptr<LinkGraph> G,
     // Add eh-frame passses.
     Config.PrePrunePasses.push_back(EHFrameSplitter("__eh_frame"));
     Config.PrePrunePasses.push_back(
-        EHFrameEdgeFixer("__eh_frame", NegDelta32, Delta64, Delta64));
+        EHFrameEdgeFixer("__eh_frame", Delta64, NegDelta32));
 
     // Add a mark-live pass.
     if (auto MarkLive = Ctx->getMarkLivePass(G->getTargetTriple()))