void link_MachO_x86_64(std::unique_ptr<LinkGraph> G,
std::unique_ptr<JITLinkContext> Ctx);
+/// Returns a pass suitable for splitting __eh_frame sections in MachO/x86-64
+/// objects.
+LinkGraphPassFunction createEHFrameSplitterPass_MachO_x86_64();
+
+/// Returns a pass suitable for fixing missing edges in an __eh_frame section
+/// in a MachO/x86-64 object.
+LinkGraphPassFunction createEHFrameEdgeFixerPass_MachO_x86_64();
+
} // end namespace jitlink
} // end namespace llvm
if (Ctx->shouldAddDefaultTargetPasses(G->getTargetTriple())) {
// Add eh-frame passses.
- StringRef EHFrameSectionName = "__TEXT,__eh_frame";
- Config.PrePrunePasses.push_back(EHFrameSplitter(EHFrameSectionName));
- Config.PrePrunePasses.push_back(
- EHFrameEdgeFixer(EHFrameSectionName, G->getPointerSize(),
- x86_64::Delta64, x86_64::Delta32, x86_64::NegDelta32));
+ Config.PrePrunePasses.push_back(createEHFrameSplitterPass_MachO_x86_64());
+ Config.PrePrunePasses.push_back(createEHFrameEdgeFixerPass_MachO_x86_64());
// Add a mark-live pass.
if (auto MarkLive = Ctx->getMarkLivePass(G->getTargetTriple()))
MachOJITLinker_x86_64::link(std::move(Ctx), std::move(G), std::move(Config));
}
+LinkGraphPassFunction createEHFrameSplitterPass_MachO_x86_64() {
+ return EHFrameSplitter("__TEXT,__eh_frame");
+}
+
+LinkGraphPassFunction createEHFrameEdgeFixerPass_MachO_x86_64() {
+ return EHFrameEdgeFixer("__TEXT,__eh_frame", x86_64::PointerSize,
+ x86_64::Delta64, x86_64::Delta32, x86_64::NegDelta32);
+}
+
} // end namespace jitlink
} // end namespace llvm