X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fllvm-jitlistener%2Fllvm-jitlistener.cpp;h=af1a59bdbd377298a650ec10bffecd70e1521501;hb=c2e7b3e49549cc306a36a052b12b7b0fe0fb45b6;hp=dbaf075e91cf20d5b1323b9cf0120eacb0ba02c3;hpb=7fc162f893d67ffd96fdb19e2eb9a03b4621f0c0;p=oota-llvm.git diff --git a/tools/llvm-jitlistener/llvm-jitlistener.cpp b/tools/llvm-jitlistener/llvm-jitlistener.cpp index dbaf075e91c..af1a59bdbd3 100644 --- a/tools/llvm-jitlistener/llvm-jitlistener.cpp +++ b/tools/llvm-jitlistener/llvm-jitlistener.cpp @@ -13,17 +13,16 @@ // //===----------------------------------------------------------------------===// -#include "llvm/IR/LLVMContext.h" #include "../../lib/ExecutionEngine/IntelJITEvents/IntelJITEventsWrapper.h" -#include "llvm/ADT/OwningPtr.h" #include "llvm/ADT/Triple.h" #include "llvm/ExecutionEngine/JITEventListener.h" -#include "llvm/ExecutionEngine/JITMemoryManager.h" #include "llvm/ExecutionEngine/MCJIT.h" -#include "llvm/ExecutionEngine/ObjectImage.h" +#include "llvm/ExecutionEngine/SectionMemoryManager.h" +#include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "llvm/IRReader/IRReader.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/Debug.h" #include "llvm/Support/Host.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" @@ -31,6 +30,7 @@ #include "llvm/Support/Signals.h" #include "llvm/Support/SourceMgr.h" #include "llvm/Support/TargetSelect.h" +#include "llvm/Support/raw_ostream.h" #include using namespace llvm; @@ -114,43 +114,34 @@ protected: // Parse the bitcode... SMDiagnostic Err; - TheModule = ParseIRFile(IRFile, Err, Context); + std::unique_ptr TheModule(parseIRFile(IRFile, Err, Context)); if (!TheModule) { errs() << Err.getMessage(); return; } - // FIXME: This is using the default legacy JITMemoryManager because it - // supports poison memory. At some point, we'll need to update this to - // use an MCJIT-specific memory manager. It might be nice to have the - // poison memory option there too. - JITMemoryManager *MemMgr = JITMemoryManager::CreateDefaultMemManager(); + RTDyldMemoryManager *MemMgr = new SectionMemoryManager(); if (!MemMgr) { errs() << "Unable to create memory manager."; return; } - // Tell the memory manager to poison freed memory so that accessing freed - // memory is more easily tested. - MemMgr->setPoisonMemory(true); - // Override the triple to generate ELF on Windows since that's supported Triple Tuple(TheModule->getTargetTriple()); if (Tuple.getTriple().empty()) Tuple.setTriple(sys::getProcessTriple()); - if (Tuple.isOSWindows() && Triple::ELF != Tuple.getEnvironment()) { - Tuple.setEnvironment(Triple::ELF); + if (Tuple.isOSWindows() && !Tuple.isOSBinFormatELF()) { + Tuple.setObjectFormat(Triple::ELF); TheModule->setTargetTriple(Tuple.getTriple()); } // Compile the IR std::string Error; - TheJIT.reset(EngineBuilder(TheModule) + TheJIT.reset(EngineBuilder(std::move(TheModule)) .setEngineKind(EngineKind::JIT) .setErrorStr(&Error) - .setJITMemoryManager(MemMgr) - .setUseMCJIT(true) + .setMCJITMemoryManager(std::unique_ptr(MemMgr)) .create()); if (Error.empty() == false) errs() << Error; @@ -161,18 +152,15 @@ protected: } LLVMContext Context; // Global ownership - Module *TheModule; // Owned by ExecutionEngine. - JITMemoryManager *JMM; // Owned by ExecutionEngine. - OwningPtr TheJIT; + std::unique_ptr TheJIT; public: void ProcessInput(const std::string &Filename) { InitEE(Filename); - llvm::OwningPtr Listener(JITEventListener::createIntelJITEventListener( - new IntelJITEventsWrapper(NotifyEvent, 0, - IsProfilingActive, 0, 0, - GetNewMethodID))); + std::unique_ptr Listener( + JITEventListener::createIntelJITEventListener(new IntelJITEventsWrapper( + NotifyEvent, 0, IsProfilingActive, 0, 0, GetNewMethodID))); TheJIT->RegisterJITEventListener(Listener.get());