Exemple #1
0
// 参考:lli.cpp的实现
static void run_module(llvm::Module *mod, llvm::GenericValue &gv, QVector<llvm::GenericValue> &args)
{
    // debug_module(mod);
    qDebug()<<"1111111";
    llvm::InitializeNativeTarget();
    llvm::InitializeNativeTargetAsmPrinter();
    llvm::InitializeNativeTargetAsmParser();


    llvm::ExecutionEngine *EE = NULL;
    qDebug()<<"222222222";
    std::string Error;
    std::unique_ptr<llvm::Module> tmod(mod);
    llvm::EngineBuilder builder(std::move(tmod));
    qDebug()<<EE<<"aaa is sym search disabled:";
    // builder.setUseMCJIT(true);
    // builder.setMArch("core2"); // 这种强制设置可能引起问题,使用三个InitailzeNativexxx函数初始化。

    EE = builder.create();
    qDebug()<<EE<<"is sym search disabled:"<<EE->isSymbolSearchingDisabled();

    //* 这些行还是有用的,否则在用Qt相关类时崩溃(在普通的print无问题)
    // 不过这些调用应用是每个函数都调用还是初始化调用一次呢。
    EE->finalizeObject();
    EE->runStaticConstructorsDestructors(false);
    /*
    for (llvm::Module::iterator I = mod->begin(), E = mod->end(); I != E; ++I) {
        llvm::Function *Fn = &*I;
        if (!Fn->isDeclaration())
            EE->getPointerToFunction(Fn);
    }
    */
    // */
    int miret = -1;
    llvm::GenericValue rgv;
    std::vector<std::string> argv;
    std::vector<llvm::GenericValue> gargv;

    foreach (auto a, args) {
        gargv.push_back(a);
    }
Exemple #2
0
u32 t31(void){ return( tmod(31)+1 ) ; }
Exemple #3
0
u32 t255(void){ return( tmod(255) ) ; }
Exemple #4
0
/*
	these are not quite timer modulo x
	return a value in range 1 to x
	rather than 0 to x-1 for modulo
	always non-zero
*/
u32 t7(void){ return( tmod(7)+1 ) ; }
Exemple #5
0
u32 t5(void){ return( tmod(5) ) ; }