diff options
author | Lang Hames <lhames@gmail.com> | 2020-08-10 16:57:53 -0700 |
---|---|---|
committer | Lang Hames <lhames@gmail.com> | 2020-08-10 17:19:48 -0700 |
commit | 6fd30f0669a2dd9af7b87325e30ec1af79b86f28 (patch) | |
tree | 7d997043459260cb91ead83e857ea4ed3c0e0a2f /llvm/tools/llvm-jitlink/llvm-jitlink.cpp | |
parent | 0fd3d379e26da3cb02b6d960198e2efbc5190650 (diff) | |
download | llvm-6fd30f0669a2dd9af7b87325e30ec1af79b86f28.zip llvm-6fd30f0669a2dd9af7b87325e30ec1af79b86f28.tar.gz llvm-6fd30f0669a2dd9af7b87325e30ec1af79b86f28.tar.bz2 |
[llvm-jitlink] Update llvm-jitlink to use TargetProcessControl.
Diffstat (limited to 'llvm/tools/llvm-jitlink/llvm-jitlink.cpp')
-rw-r--r-- | llvm/tools/llvm-jitlink/llvm-jitlink.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp index d5dc661..8e651d9 100644 --- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp @@ -483,8 +483,8 @@ static std::unique_ptr<JITLinkMemoryManager> createMemoryManager() { } LLVMJITLinkObjectLinkingLayer::LLVMJITLinkObjectLinkingLayer( - Session &S, std::unique_ptr<JITLinkMemoryManager> MemMgr) - : ObjectLinkingLayer(S.ES, std::move(MemMgr)), S(S) {} + Session &S, JITLinkMemoryManager &MemMgr) + : ObjectLinkingLayer(S.ES, MemMgr), S(S) {} Error LLVMJITLinkObjectLinkingLayer::add(JITDylib &JD, std::unique_ptr<MemoryBuffer> O, @@ -580,7 +580,12 @@ public: Expected<std::unique_ptr<Session>> Session::Create(Triple TT) { Error Err = Error::success(); - std::unique_ptr<Session> S(new Session(std::move(TT), Err)); + + auto PageSize = sys::Process::getPageSize(); + if (!PageSize) + return PageSize.takeError(); + + std::unique_ptr<Session> S(new Session(std::move(TT), *PageSize, Err)); if (Err) return std::move(Err); return std::move(S); @@ -588,8 +593,10 @@ Expected<std::unique_ptr<Session>> Session::Create(Triple TT) { // FIXME: Move to createJITDylib if/when we start using Platform support in // llvm-jitlink. -Session::Session(Triple TT, Error &Err) - : ObjLayer(*this, createMemoryManager()), TT(std::move(TT)) { +Session::Session(Triple TT, uint64_t PageSize, Error &Err) + : TPC(std::make_unique<SelfTargetProcessControl>(std::move(TT), PageSize, + createMemoryManager())), + ObjLayer(*this, TPC->getMemMgr()) { /// Local ObjectLinkingLayer::Plugin class to forward modifyPassConfig to the /// Session. @@ -658,15 +665,14 @@ void Session::dumpSessionInfo(raw_ostream &OS) { OS << "Registered addresses:\n" << SymbolInfos << FileInfos; } -void Session::modifyPassConfig(const Triple &FTT, +void Session::modifyPassConfig(const Triple &TT, PassConfiguration &PassConfig) { if (!CheckFiles.empty()) PassConfig.PostFixupPasses.push_back([this](LinkGraph &G) { - - if (TT.getObjectFormat() == Triple::ELF) + if (TPC->getTargetTriple().getObjectFormat() == Triple::ELF) return registerELFGraphInfo(*this, G); - if (TT.getObjectFormat() == Triple::MachO) + if (TPC->getTargetTriple().getObjectFormat() == Triple::MachO) return registerMachOGraphInfo(*this, G); return make_error<StringError>("Unsupported object format for GOT/stub " @@ -780,7 +786,7 @@ Triple getFirstFileTriple() { Error sanitizeArguments(const Session &S) { if (EntryPointName.empty()) { - if (S.TT.getObjectFormat() == Triple::MachO) + if (S.TPC->getTargetTriple().getObjectFormat() == Triple::MachO) EntryPointName = "_main"; else EntryPointName = "main"; @@ -805,7 +811,8 @@ Error loadProcessSymbols(Session &S) { if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr, &ErrMsg)) return make_error<StringError>(std::move(ErrMsg), inconvertibleErrorCode()); - char GlobalPrefix = S.TT.getObjectFormat() == Triple::MachO ? '_' : '\0'; + char GlobalPrefix = + S.TPC->getTargetTriple().getObjectFormat() == Triple::MachO ? '_' : '\0'; auto InternedEntryPointName = S.ES.intern(EntryPointName); auto FilterMainEntryPoint = [InternedEntryPointName](SymbolStringPtr Name) { return Name != InternedEntryPointName; @@ -899,7 +906,7 @@ Error loadObjects(Session &S) { if (Magic == file_magic::archive || Magic == file_magic::macho_universal_binary) JD.addGenerator(ExitOnErr(StaticLibraryDefinitionGenerator::Load( - S.ObjLayer, InputFile.c_str(), S.TT))); + S.ObjLayer, InputFile.c_str(), S.TPC->getTargetTriple()))); else ExitOnErr(S.ObjLayer.add(JD, std::move(ObjBuffer))); } @@ -947,9 +954,9 @@ Error loadObjects(Session &S) { Error runChecks(Session &S) { - auto TripleName = S.TT.str(); + auto TripleName = S.TPC->getTargetTriple().str(); std::string ErrorStr; - const Target *TheTarget = TargetRegistry::lookupTarget("", S.TT, ErrorStr); + const Target *TheTarget = TargetRegistry::lookupTarget(TripleName, ErrorStr); if (!TheTarget) ExitOnErr(make_error<StringError>("Error accessing target '" + TripleName + "': " + ErrorStr, @@ -1013,7 +1020,8 @@ Error runChecks(Session &S) { RuntimeDyldChecker Checker( IsSymbolValid, GetSymbolInfo, GetSectionInfo, GetStubInfo, GetGOTInfo, - S.TT.isLittleEndian() ? support::little : support::big, + S.TPC->getTargetTriple().isLittleEndian() ? support::little + : support::big, Disassembler.get(), InstPrinter.get(), dbgs()); std::string CheckLineStart = "# " + CheckName + ":"; |