本文整理汇总了C++中ExecutionEngine::DisableSymbolSearching方法的典型用法代码示例。如果您正苦于以下问题:C++ ExecutionEngine::DisableSymbolSearching方法的具体用法?C++ ExecutionEngine::DisableSymbolSearching怎么用?C++ ExecutionEngine::DisableSymbolSearching使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ExecutionEngine
的用法示例。
在下文中一共展示了ExecutionEngine::DisableSymbolSearching方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: compileMethod
// This is the method invoked by the EE to Jit code.
CorJitResult LLILCJit::compileMethod(ICorJitInfo *JitInfo,
CORINFO_METHOD_INFO *MethodInfo,
UINT Flags, BYTE **NativeEntry,
ULONG *NativeSizeOfCode) {
// Bail if input is malformed
if (nullptr == JitInfo || nullptr == MethodInfo || nullptr == NativeEntry ||
nullptr == NativeSizeOfCode) {
return CORJIT_INTERNALERROR;
}
// Prep main outputs
*NativeEntry = nullptr;
*NativeSizeOfCode = 0;
// Set up state for this thread (if necessary)
LLILCJitPerThreadState *PerThreadState = State.get();
if (PerThreadState == nullptr) {
PerThreadState = new LLILCJitPerThreadState();
State.set(PerThreadState);
}
// Set up context for this Jit request
LLILCJitContext Context = LLILCJitContext(PerThreadState);
// Fill in context information from the CLR
Context.JitInfo = JitInfo;
Context.MethodInfo = MethodInfo;
Context.Flags = Flags;
JitInfo->getEEInfo(&Context.EEInfo);
// Fill in context information from LLVM
Context.LLVMContext = &PerThreadState->LLVMContext;
std::unique_ptr<Module> M = Context.getModuleForMethod(MethodInfo);
Context.CurrentModule = M.get();
Context.CurrentModule->setTargetTriple(LLILC_TARGET_TRIPLE);
Context.MethodName = Context.CurrentModule->getModuleIdentifier();
Context.TheABIInfo = ABIInfo::get(*Context.CurrentModule);
// Initialize per invocation JIT options. This should be done after the
// rest of the Context is filled out as it has dependencies on JitInfo,
// Flags and MethodInfo.
JitOptions JitOptions(Context);
Context.Options = &JitOptions;
EngineBuilder Builder(std::move(M));
std::string ErrStr;
Builder.setErrorStr(&ErrStr);
std::unique_ptr<RTDyldMemoryManager> MM(new EEMemoryManager(&Context));
Builder.setMCJITMemoryManager(std::move(MM));
TargetOptions Options;
if (Context.Options->OptLevel != OptLevel::DEBUG_CODE) {
Builder.setOptLevel(CodeGenOpt::Level::Default);
} else {
Builder.setOptLevel(CodeGenOpt::Level::None);
Options.NoFramePointerElim = true;
}
Builder.setTargetOptions(Options);
ExecutionEngine *NewEngine = Builder.create();
if (!NewEngine) {
errs() << "Could not create ExecutionEngine: " << ErrStr << "\n";
return CORJIT_INTERNALERROR;
}
// Don't allow the EE to search for external symbols.
NewEngine->DisableSymbolSearching();
Context.EE = NewEngine;
// Now jit the method.
CorJitResult Result = CORJIT_INTERNALERROR;
if (Context.Options->DumpLevel == DumpLevel::VERBOSE) {
Context.outputDebugMethodName();
}
bool HasMethod = this->readMethod(&Context);
if (HasMethod) {
if (Context.Options->DoInsertStatepoints) {
// If using Precise GC, run the GC-Safepoint insertion
// and lowering passes before generating code.
legacy::PassManager Passes;
Passes.add(createPlaceSafepointsPass());
PassManagerBuilder PMBuilder;
PMBuilder.OptLevel = 0; // Set optimization level to -O0
PMBuilder.SizeLevel = 0; // so that no additional phases are run.
PMBuilder.populateModulePassManager(Passes);
Passes.add(createRewriteStatepointsForGCPass(false));
Passes.run(*Context.CurrentModule);
}
Context.EE->generateCodeForModule(Context.CurrentModule);
//.........这里部分代码省略.........