[llvm] 761eb4e - [ORC] Support new ORC runtime in UnwindInfoRegistrationPlugin. (#206680)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 30 03:13:03 PDT 2026


Author: Lang Hames
Date: 2026-06-30T20:12:59+10:00
New Revision: 761eb4e388639ca8d8bbe0855118d98b35736ef2

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

LOG: [ORC] Support new ORC runtime in UnwindInfoRegistrationPlugin. (#206680)

Reworks UnwindInfoRegistrationPlugin::Create(ES) to look up the
register/deregister implementation addresses by symbol name, with
default names matching the SPS-CI alloc actions provided by
orc_rt::StandaloneMachOUnwindInfoRegistrar. In OrcTargetProcess,
UnwindInfoManager::addBootstrapSymbols now also vends its register and
deregister actions under those same names, so the new Create overloads
work against either backend.

Also removes a declared but unused (and undefined) Create overload.

Added: 
    

Modified: 
    llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h
    llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h
    llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp
    llvm/lib/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.cpp
    llvm/lib/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h
index c6a6518bcee4a..07f6adbfe32d2 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h
@@ -93,6 +93,18 @@ struct SimpleExecutorDylibManagerSymbolNames {
 extern const LLVM_ABI SimpleExecutorDylibManagerSymbolNames
     orc_rt_NativeDylibManagerSPSSymbols;
 
+/// Symbol names for the ORC runtime's StandaloneMachOUnwindInfoRegistrar
+/// SPS interface.
+struct MachOUnwindInfoRegistrarSymbolNames {
+  StringRef RegisterSectionsName;
+  StringRef DeregisterSectionsName;
+};
+
+/// Default symbol names for the ORC runtime's
+/// StandaloneMachOUnwindInfoRegistrar SPS interface.
+extern const LLVM_ABI MachOUnwindInfoRegistrarSymbolNames
+    orc_rt_MachOUnwindInfoRegistrarSPSSymbols;
+
 using SPSSimpleExecutorDylibManagerOpenSignature =
     shared::SPSExpected<shared::SPSExecutorAddr>(shared::SPSExecutorAddr,
                                                  shared::SPSString, uint64_t);

diff  --git a/llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h b/llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h
index 8b0c403e1222a..617f6d9d8b71c 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.h
@@ -14,6 +14,7 @@
 #define LLVM_EXECUTIONENGINE_ORC_UNWINDINFOREGISTRATIONPLUGIN_H
 
 #include "llvm/ExecutionEngine/Orc/LinkGraphLinkingLayer.h"
+#include "llvm/ExecutionEngine/Orc/Shared/OrcRTBridge.h"
 #include "llvm/Support/Compiler.h"
 
 namespace llvm::orc {
@@ -21,17 +22,18 @@ namespace llvm::orc {
 class LLVM_ABI UnwindInfoRegistrationPlugin
     : public LinkGraphLinkingLayer::Plugin {
 public:
-  UnwindInfoRegistrationPlugin(ExecutionSession &ES, ExecutorAddr Register,
-                               ExecutorAddr Deregister)
-      : ES(ES), Register(Register), Deregister(Deregister) {
+  UnwindInfoRegistrationPlugin(ExecutionSession &ES,
+                               ExecutorAddr RegisterSections,
+                               ExecutorAddr DeregisterSections)
+      : RegisterSections(RegisterSections),
+        DeregisterSections(DeregisterSections) {
     DSOBaseName = ES.intern("__jitlink$libunwind_dso_base");
   }
 
   static Expected<std::shared_ptr<UnwindInfoRegistrationPlugin>>
-  Create(ExecutionSession &ES, ExecutorAddr Register, ExecutorAddr Deregister);
-
-  static Expected<std::shared_ptr<UnwindInfoRegistrationPlugin>>
-  Create(ExecutionSession &ES);
+  Create(ExecutionSession &ES,
+         rt::MachOUnwindInfoRegistrarSymbolNames SNs =
+             rt::orc_rt_MachOUnwindInfoRegistrarSPSSymbols);
 
   void modifyPassConfig(MaterializationResponsibility &MR,
                         jitlink::LinkGraph &G,
@@ -55,9 +57,8 @@ class LLVM_ABI UnwindInfoRegistrationPlugin
 private:
   Error addUnwindInfoRegistrationActions(jitlink::LinkGraph &G);
 
-  ExecutionSession &ES;
   SymbolStringPtr DSOBaseName;
-  ExecutorAddr Register, Deregister;
+  ExecutorAddr RegisterSections, DeregisterSections;
 };
 
 } // namespace llvm::orc

diff  --git a/llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp b/llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp
index 9d6ae79b99e6c..06c8991c4be66 100644
--- a/llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/Shared/OrcRTBridge.cpp
@@ -99,6 +99,11 @@ const SimpleExecutorDylibManagerSymbolNames
         "orc_rt_ci_sps_NativeDylibManager_lookup",
 };
 
+const MachOUnwindInfoRegistrarSymbolNames
+    orc_rt_MachOUnwindInfoRegistrarSPSSymbols = {
+        "orc_rt_ci_aa_sps_MachOUnwindInfoRegistrar_registerSections",
+        "orc_rt_ci_aa_sps_MachOUnwindInfoRegistrar_deregisterSections"};
+
 } // end namespace rt
 namespace rt_alt {
 const char *UnwindInfoManagerRegisterActionName =

diff  --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.cpp
index 06dce487f7a18..de1e5a1a94a5a 100644
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/UnwindInfoManager.cpp
@@ -110,6 +110,16 @@ void UnwindInfoManager::addBootstrapSymbols(StringMap<ExecutorAddr> &M) {
       ExecutorAddr::fromPtr(llvm_orc_rt_alt_UnwindInfoManager_register);
   M[rt_alt::UnwindInfoManagerDeregisterActionName] =
       ExecutorAddr::fromPtr(llvm_orc_rt_alt_UnwindInfoManager_deregister);
+
+  {
+    // Also provide symbols defined by StandaloneMachOUnwindInfoRegistrar
+    // in the new ORC runtime.
+    const auto &SNs = rt::orc_rt_MachOUnwindInfoRegistrarSPSSymbols;
+    M[SNs.RegisterSectionsName] =
+        ExecutorAddr::fromPtr(llvm_orc_rt_alt_UnwindInfoManager_register);
+    M[SNs.DeregisterSectionsName] =
+        ExecutorAddr::fromPtr(llvm_orc_rt_alt_UnwindInfoManager_deregister);
+  }
 }
 
 Error UnwindInfoManager::registerSections(

diff  --git a/llvm/lib/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.cpp b/llvm/lib/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.cpp
index 178c7ee1c01b4..a553d14f00787 100644
--- a/llvm/lib/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/UnwindInfoRegistrationPlugin.cpp
@@ -19,18 +19,19 @@ using namespace llvm::jitlink;
 namespace llvm::orc {
 
 Expected<std::shared_ptr<UnwindInfoRegistrationPlugin>>
-UnwindInfoRegistrationPlugin::Create(ExecutionSession &ES) {
+UnwindInfoRegistrationPlugin::Create(
+    ExecutionSession &ES, rt::MachOUnwindInfoRegistrarSymbolNames SNs) {
 
-  ExecutorAddr Register, Deregister;
+  ExecutorAddr RegisterSections, DeregisterSections;
 
   auto &EPC = ES.getExecutorProcessControl();
   if (auto Err = EPC.getBootstrapSymbols(
-          {{Register, rt_alt::UnwindInfoManagerRegisterActionName},
-           {Deregister, rt_alt::UnwindInfoManagerDeregisterActionName}}))
+          {{RegisterSections, SNs.RegisterSectionsName},
+           {DeregisterSections, SNs.DeregisterSectionsName}}))
     return std::move(Err);
 
-  return std::make_shared<UnwindInfoRegistrationPlugin>(ES, Register,
-                                                        Deregister);
+  return std::make_shared<UnwindInfoRegistrationPlugin>(ES, RegisterSections,
+                                                        DeregisterSections);
 }
 
 void UnwindInfoRegistrationPlugin::modifyPassConfig(
@@ -105,16 +106,18 @@ Error UnwindInfoRegistrationPlugin::addUnwindInfoRegistrationActions(
                                    inconvertibleErrorCode());
 
   using namespace shared;
-  using SPSRegisterArgs =
+  using SPSRegisterSectionsArgs =
       SPSArgList<SPSSequence<SPSExecutorAddrRange>, SPSExecutorAddr,
                  SPSExecutorAddrRange, SPSExecutorAddrRange>;
-  using SPSDeregisterArgs = SPSArgList<SPSSequence<SPSExecutorAddrRange>>;
+  using SPSDeregisterSectionsArgs =
+      SPSArgList<SPSSequence<SPSExecutorAddrRange>>;
 
   G.allocActions().push_back(
-      {cantFail(WrapperFunctionCall::Create<SPSRegisterArgs>(
-           Register, CodeRanges, DSOBase, EHFrameRange, UnwindInfoRange)),
-       cantFail(WrapperFunctionCall::Create<SPSDeregisterArgs>(Deregister,
-                                                               CodeRanges))});
+      {cantFail(WrapperFunctionCall::Create<SPSRegisterSectionsArgs>(
+           RegisterSections, CodeRanges, DSOBase, EHFrameRange,
+           UnwindInfoRange)),
+       cantFail(WrapperFunctionCall::Create<SPSDeregisterSectionsArgs>(
+           DeregisterSections, CodeRanges))});
 
   return Error::success();
 }


        


More information about the llvm-commits mailing list