ARM GNU 工具链在使用gprof中的一个bug
来源:互联网 发布:加拿大安省移民 知乎 编辑:程序博客网 时间:2024/04/26 06:18
最近发现了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)还有一个现象,就是如果你的程序(动态编译)使用了libm.so这个库,或者你在编译的时候加上-lm选项,你会发现生成了gmon.out这个文件,但是不好用。这是因为程序运行时动态加载了libm.so,这个函数的init段中会调用call_gmon()这个函数
下面两点都要注意。
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)还有一个现象,就是如果你的程序(动态编译)使用了libm.so这个库,或者你在编译的时候加上-lm选项,你会发现生成了gmon.out这个文件,但是不好用。这是因为程序运行时动态加载了libm.so,这个函数的init段中会调用call_gmon()这个函数
- ARM GNU 工具链在使用gprof中的一个bug
- 在μVision中使用CodeSourcery GNU ARM工具链
- GNU ARM命令行工具基本使用入门
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof——GNU性能分析工具
- gprof工具使用
- gprof工具使用介绍
- 使用GNU工具链
- 使用GNU工具链
- GNU gprof
- GNU gprof
- GNU gprof
- 用一个C语言小程序解释为什么在java中2-0.1是1.9,而 2-1.1结果是0.8999999999999999
- 经济大环境下的仓库管理
- vim剪贴板
- 学习笔记之C#属性
- 对于企业来说会员管理好就留住了客户
- ARM GNU 工具链在使用gprof中的一个bug
- 背包问题——“完全背包”详解及实现(包含背包具体物品的求解)
- 人事管理决策
- 快速傅里叶变换(FFT)
- 销售管理的技巧
- 十年了,给自己一个交代
- android安装apk文件的代码
- 如何留住客户做好客户管理
- 谷歌算法设计者将推出新型搜索引擎