ARM GNU 工具链在使用gprof中的一个bug

最近发现了ARM GNU 工具链在使用gprof中时存在一个bug,描述如下:
版本为:gcc-3.2.1+glibc-2.3.1+binutils-2.13.2。这个bug存在于glibc-2.3.1至目前的最新版本(2.3.5)。搭建的工具链为ARM版本。
现象:gcc -pg(或gcc -pg -O2)选项编译的动态程序运行不生成gmon.out 文件。静态程序不存在问题。
解决:
下面两点都要注意。
1)使用-O2选项的时候必须加上-fno-omit-frame-pointer参数。这是因为在进行函数剖视的时候,会通过fp来进行栈回溯,必须保证函数入口的结构不能被优化掉。这一点可以参考glibc-2.3.1/sysdeps/arm/machine-gmon.h文件中。函数_mcount()的实现,使用-pg选项后,会在每个程序的每个函数入口插入_mcount()。
可以在specs文件中禁止-O2和-pg同时使用。
2)先说明一下crt1.o gcrt1.o crti.o crtn.o crtbegin.o crtend.o这几个文件,在链接的时候,这几个文件会和你要编译的程序链接。
3)还有一个现象,就是如果你的程序(动态编译)使用了l ibm.so这个库,或者你在编译的时候加上-lm选项,你会发现生成了gmon.out这个文件,但是不好用。这是因为程序运行时动态加载了libm.so,这个函数的init段中会调用call_gmon()这个函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值