【发布时间】:2014-07-22 04:00:21
【问题描述】:
我需要确定共享对象中的一组例程是否应用了 gcc 的尾调用优化。 需要 C 代码,最好使用 API 而不是“nm”或“objdump”系统命令。
任何获取更多信息的链接都会有所帮助
详情: 例如。原来的C代码是这样的
void myFunc1(){
... // Do something
myFunc2();
return;
}
函数 myFunc1 的汇编代码转储:
0x57ad50b0 <+0>: push %ebp
0x57ad50b1 <+1>: mov %esp,%ebp
0x57ad50b3 <+3>: mov 0x8(%ebp),%eax
0x57ad50b6 <+6>: pop %ebp
0x57ad50b7 <+7>: lea 0x8(%eax),%edx
0x57ad50ba <+10>: mov (%eax),%eax
0x57ad50bc <+12>: jmp 0x57ab8010 <myFunc2>
我们可以看到最后一条指令不是“call myFunc2”,而只是“jmp myFunc2”。 因此,我们无法从堆栈跟踪中获取有关“myFunc1”的信息。 所以我们需要事先确定“myFunc1”可能有这个问题,这样我们才能解决它。
【问题讨论】:
标签: gcc compiler-optimization tail-recursion