13 #ifndef LLVM_EXECUTIONENGINE_ORC_MACHOPLATFORM_H
14 #define LLVM_EXECUTIONENGINE_ORC_MACHOPLATFORM_H
40 std::vector<std::pair<ExecutorAddr, MachOJITDylibDepInfo>>;
82 JITDylib &PlatformJD,
const char *OrcRuntimePath,
117 void modifyPassConfig(MaterializationResponsibility &MR,
121 SyntheticSymbolDependenciesMap
122 getSyntheticSymbolDependencies(MaterializationResponsibility &MR)
override;
126 Error notifyFailed(MaterializationResponsibility &MR)
override {
130 Error notifyRemovingResources(
ResourceKey K)
override {
134 void notifyTransferringResources(
ResourceKey DstKey,
138 using InitSymbolDepMap =
139 DenseMap<MaterializationResponsibility *, JITLinkSymbolSet>;
141 Error associateJITDylibHeaderSymbol(jitlink::LinkGraph &
G,
142 MaterializationResponsibility &MR);
144 Error preserveInitSections(jitlink::LinkGraph &
G,
145 MaterializationResponsibility &MR);
147 Error processObjCImageInfo(jitlink::LinkGraph &
G,
148 MaterializationResponsibility &MR);
150 Error fixTLVSectionsAndEdges(jitlink::LinkGraph &
G, JITDylib &JD);
152 Error registerObjectPlatformSections(jitlink::LinkGraph &
G, JITDylib &JD);
154 Error registerEHSectionsPhase1(jitlink::LinkGraph &
G);
156 std::mutex PluginMutex;
161 DenseMap<JITDylib *, std::pair<uint32_t, uint32_t>> ObjCImageInfos;
162 DenseMap<JITDylib *, ExecutorAddr> HeaderAddrs;
163 InitSymbolDepMap InitSymbolDeps;
166 using GetJITDylibHeaderSendResultFn =
167 unique_function<void(Expected<ExecutorAddr>)>;
168 using GetJITDylibNameSendResultFn =
169 unique_function<void(Expected<StringRef>)>;
170 using PushInitializersSendResultFn =
171 unique_function<void(Expected<MachOJITDylibDepInfoMap>)>;
172 using SendSymbolAddressFn = unique_function<void(Expected<ExecutorAddr>)>;
174 static bool supportedTarget(
const Triple &TT);
176 MachOPlatform(ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
177 JITDylib &PlatformJD,
178 std::unique_ptr<DefinitionGenerator> OrcRuntimeGenerator,
182 Error associateRuntimeSupportFunctions(JITDylib &PlatformJD);
187 void pushInitializersLoop(PushInitializersSendResultFn SendResult,
191 void rt_pushInitializers(PushInitializersSendResultFn SendResult,
192 ExecutorAddr JDHeaderAddr);
195 void rt_lookupSymbol(SendSymbolAddressFn SendResult, ExecutorAddr Handle,
199 Error bootstrapMachORuntime(JITDylib &PlatformJD);
202 Expected<uint64_t> createPThreadKey();
204 enum PlatformState { BootstrapPhase1, BootstrapPhase2, Initialized };
206 ExecutionSession &ES;
207 ObjectLinkingLayer &ObjLinkingLayer;
209 SymbolStringPtr MachOHeaderStartSymbol;
210 std::atomic<PlatformState> State{BootstrapPhase1};
212 ExecutorAddr orc_rt_macho_platform_bootstrap;
213 ExecutorAddr orc_rt_macho_platform_shutdown;
214 ExecutorAddr orc_rt_macho_register_ehframe_section;
215 ExecutorAddr orc_rt_macho_deregister_ehframe_section;
216 ExecutorAddr orc_rt_macho_register_jitdylib;
217 ExecutorAddr orc_rt_macho_deregister_jitdylib;
218 ExecutorAddr orc_rt_macho_register_object_platform_sections;
219 ExecutorAddr orc_rt_macho_deregister_object_platform_sections;
220 ExecutorAddr orc_rt_macho_create_pthread_key;
222 DenseMap<JITDylib *, SymbolLookupSet> RegisteredInitSymbols;
224 std::mutex PlatformMutex;
225 DenseMap<JITDylib *, ExecutorAddr> JITDylibToHeaderAddr;
226 DenseMap<ExecutorAddr, JITDylib *> HeaderAddrToJITDylib;
227 DenseMap<JITDylib *, uint64_t> JITDylibToPThreadKey;
239 #endif // LLVM_EXECUTIONENGINE_ORC_MACHOPLATFORM_H