15
15
#include " llvm/ExecutionEngine/Orc/DebugUtils.h"
16
16
#include " llvm/ExecutionEngine/Orc/ExecutionUtils.h"
17
17
#include " llvm/ExecutionEngine/Orc/LookupAndRecordAddrs.h"
18
+ #include " llvm/ExecutionEngine/Orc/MachOBuilder.h"
18
19
#include " llvm/ExecutionEngine/Orc/Shared/ObjectFormats.h"
19
20
#include " llvm/Support/BinaryByteStream.h"
20
21
#include " llvm/Support/Debug.h"
@@ -119,8 +120,9 @@ std::unique_ptr<jitlink::LinkGraph> createPlatformGraph(MachOPlatform &MOP,
119
120
class MachOHeaderMaterializationUnit : public MaterializationUnit {
120
121
public:
121
122
MachOHeaderMaterializationUnit (MachOPlatform &MOP,
122
- const SymbolStringPtr &HeaderStartSymbol)
123
- : MaterializationUnit(createHeaderInterface(MOP, HeaderStartSymbol)),
123
+ SymbolStringPtr HeaderStartSymbol)
124
+ : MaterializationUnit(
125
+ createHeaderInterface (MOP, std::move(HeaderStartSymbol))),
124
126
MOP(MOP) {}
125
127
126
128
StringRef getName () const override { return " MachOHeaderMU" ; }
@@ -348,10 +350,17 @@ struct ObjCImageInfoFlags {
348
350
namespace llvm {
349
351
namespace orc {
350
352
353
+ std::unique_ptr<MaterializationUnit>
354
+ MachOPlatform::defaultMachOHeaderBuilder (MachOPlatform &MOP) {
355
+ return std::make_unique<MachOHeaderMaterializationUnit>(
356
+ MOP, SymbolStringPtr (MOP.getMachOHeaderStartSymbol ()));
357
+ }
358
+
351
359
Expected<std::unique_ptr<MachOPlatform>>
352
360
MachOPlatform::Create (ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
353
361
JITDylib &PlatformJD,
354
362
std::unique_ptr<DefinitionGenerator> OrcRuntime,
363
+ MachOHeaderMUBuilder BuildMachOHeaderMU,
355
364
std::optional<SymbolAliasMap> RuntimeAliases) {
356
365
357
366
// If the target is not supported then bail out immediately.
@@ -382,8 +391,9 @@ MachOPlatform::Create(ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
382
391
383
392
// Create the instance.
384
393
Error Err = Error::success ();
385
- auto P = std::unique_ptr<MachOPlatform>(new MachOPlatform (
386
- ES, ObjLinkingLayer, PlatformJD, std::move (OrcRuntime), Err));
394
+ auto P = std::unique_ptr<MachOPlatform>(
395
+ new MachOPlatform (ES, ObjLinkingLayer, PlatformJD, std::move (OrcRuntime),
396
+ std::move (BuildMachOHeaderMU), Err));
387
397
if (Err)
388
398
return std::move (Err);
389
399
return std::move (P);
@@ -392,6 +402,7 @@ MachOPlatform::Create(ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
392
402
Expected<std::unique_ptr<MachOPlatform>>
393
403
MachOPlatform::Create (ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
394
404
JITDylib &PlatformJD, const char *OrcRuntimePath,
405
+ MachOHeaderMUBuilder BuildMachOHeaderMU,
395
406
std::optional<SymbolAliasMap> RuntimeAliases) {
396
407
397
408
// Create a generator for the ORC runtime archive.
@@ -402,12 +413,11 @@ MachOPlatform::Create(ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
402
413
403
414
return Create (ES, ObjLinkingLayer, PlatformJD,
404
415
std::move (*OrcRuntimeArchiveGenerator),
405
- std::move (RuntimeAliases));
416
+ std::move (BuildMachOHeaderMU), std::move ( RuntimeAliases));
406
417
}
407
418
408
419
Error MachOPlatform::setupJITDylib (JITDylib &JD) {
409
- if (auto Err = JD.define (std::make_unique<MachOHeaderMaterializationUnit>(
410
- *this , MachOHeaderStartSymbol)))
420
+ if (auto Err = JD.define (BuildMachOHeaderMU (*this )))
411
421
return Err;
412
422
413
423
return ES.lookup ({&JD}, MachOHeaderStartSymbol).takeError ();
@@ -522,8 +532,10 @@ MachOPlatform::flagsForSymbol(jitlink::Symbol &Sym) {
522
532
MachOPlatform::MachOPlatform (
523
533
ExecutionSession &ES, ObjectLinkingLayer &ObjLinkingLayer,
524
534
JITDylib &PlatformJD,
525
- std::unique_ptr<DefinitionGenerator> OrcRuntimeGenerator, Error &Err)
526
- : ES(ES), PlatformJD(PlatformJD), ObjLinkingLayer(ObjLinkingLayer) {
535
+ std::unique_ptr<DefinitionGenerator> OrcRuntimeGenerator,
536
+ MachOHeaderMUBuilder BuildMachOHeaderMU, Error &Err)
537
+ : ES(ES), PlatformJD(PlatformJD), ObjLinkingLayer(ObjLinkingLayer),
538
+ BuildMachOHeaderMU (std::move(BuildMachOHeaderMU)) {
527
539
ErrorAsOutParameter _ (&Err);
528
540
ObjLinkingLayer.addPlugin (std::make_unique<MachOPlatformPlugin>(*this ));
529
541
PlatformJD.addGenerator (std::move (OrcRuntimeGenerator));
0 commit comments