mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-10 03:13:34 +00:00
[lli] Add the ability for OrcLazyJIT to accept multiple input modules.
LLI already supported passing multiple input modules to MCJIT via the -extra-module option. This patch adds the plumbing to pass these modules to the OrcLazy JIT too. This functionality will be used in an upcoming test case for weak symbol handling. llvm-svn: 277521
This commit is contained in:
parent
db4bc667af
commit
368c4223b8
@ -105,7 +105,8 @@ static PtrTy fromTargetAddress(JITTargetAddress Addr) {
|
||||
return reinterpret_cast<PtrTy>(static_cast<uintptr_t>(Addr));
|
||||
}
|
||||
|
||||
int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
|
||||
int llvm::runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
|
||||
char* ArgV[]) {
|
||||
// Add the program's symbols into the JIT's search space.
|
||||
if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr)) {
|
||||
errs() << "Error loading program symbols.\n";
|
||||
@ -143,8 +144,9 @@ int llvm::runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]) {
|
||||
OrcInlineStubs);
|
||||
|
||||
// Add the module, look up main and run it.
|
||||
auto MainHandle = J.addModule(std::move(M));
|
||||
auto MainSym = J.findSymbolIn(MainHandle, "main");
|
||||
for (auto &M : Ms)
|
||||
J.addModule(std::move(M));
|
||||
auto MainSym = J.findSymbol("main");
|
||||
|
||||
if (!MainSym) {
|
||||
errs() << "Could not find main function.\n";
|
||||
|
@ -156,7 +156,8 @@ private:
|
||||
std::vector<orc::CtorDtorRunner<CODLayerT>> IRStaticDestructorRunners;
|
||||
};
|
||||
|
||||
int runOrcLazyJIT(std::unique_ptr<Module> M, int ArgC, char* ArgV[]);
|
||||
int runOrcLazyJIT(std::vector<std::unique_ptr<Module>> Ms, int ArgC,
|
||||
char* ArgV[]);
|
||||
|
||||
} // end namespace llvm
|
||||
|
||||
|
@ -397,8 +397,18 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (UseJITKind == JITKind::OrcLazy)
|
||||
return runOrcLazyJIT(std::move(Owner), argc, argv);
|
||||
if (UseJITKind == JITKind::OrcLazy) {
|
||||
std::vector<std::unique_ptr<Module>> Ms;
|
||||
Ms.push_back(std::move(Owner));
|
||||
for (auto &ExtraMod : ExtraModules) {
|
||||
Ms.push_back(parseIRFile(ExtraMod, Err, Context));
|
||||
if (!Ms.back()) {
|
||||
Err.print(argv[0], errs());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return runOrcLazyJIT(std::move(Ms), argc, argv);
|
||||
}
|
||||
|
||||
if (EnableCacheManager) {
|
||||
std::string CacheName("file:");
|
||||
|
Loading…
x
Reference in New Issue
Block a user