llvm JIT挟制保留frame pointer(栈帧)

llvm JIT强制保留frame pointer(栈帧)


llvm JIT强制保留frame pointer(栈帧)

搬运自我的百度空间

    不优化时,在每个函数开头都会把ebp入栈,这样可以方便调试时栈回溯(Stack Trace)等。push ebp的这个动作称为创建栈桢

    但是llvm默认情况下,如果函数中没有alloca等栈操作,就会把栈桢动作优化掉(因为没有用到espebp),这样调试时无法回溯了。

    解决办法:

    在创建execution engine

    EngineBuilder&eb= EngineBuilder(m);

                       TargetMachine* tm=eb.selectTarget();

                       tm->Options.NoFramePointerElim=1;

                       TheExecutionEngine=        eb.setErrorStr(&ErrStr).create(tm);

     

    NoFramePointerElim这个选项设为1,阻止优化栈桢操作


    2014-09-21