llvm JIT强制保留frame pointer(栈帧)
搬运自我的百度空间
不优化时,在每个函数开头都会把ebp入栈,,这样可以方便调试时栈回溯(Stack Trace)等。push ebp的这个动作称为创建栈桢
但是llvm默认情况下,如果函数中没有alloca等栈操作,就会把栈桢动作优化掉(因为没有用到esp和ebp),这样调试时无法回溯了。
解决办法:
在创建execution engine 时
EngineBuilder&eb= EngineBuilder(m);
TargetMachine* tm=eb.selectTarget();
tm->Options.NoFramePointerElim=1;
TheExecutionEngine= eb.setErrorStr(&ErrStr).create(tm);
2014-09-21
没有早一步,也没有晚一步,刚好遇上了你!