【发布时间】:2011-11-30 17:22:57
【问题描述】:
我对这个咬牙切齿......
我需要在 ARM 板上进行分析并且需要查看调用图。我尝试使用 OProfile、Kernel perf 和 Google 性能工具。一切正常,但不输出任何调用图信息。
这使我得出结论,我没有正确编译我的代码。
我在编译 C++ 代码时使用以下标志:
特定于架构:
-march=armv7-a -mtune=cortex-a8 -mfloat-abi=hard -mfpu=vfpv3
一般:
-fexceptions -fno-strict-aliasing -D_REENTRANT -Wall -Wextra
调试(带优化):
-O2 -g -fno-omit-frame-pointer
我做了很多谷歌搜索,发现了一些相关的主题:
- libunwind ?
- 矮人
- (异步)展开表
-mapcs-frame
但是我不完全理解这些是如何联系在一起的。有关如何使调用图正常工作的任何提示?
注意(由于 Rian 的回答):我有兴趣找出 ARM 上的某些方法是否以及为什么比 x86-64 需要更长的时间(相对于其他方法)。在不同的平台上执行此操作无济于事(即使我的代码在两者上都编译并且我可以在 x86-64 上执行调用图)。
【问题讨论】:
-
您确定要使用 -mfloat-abi=hard 进行编译吗?据我了解,mfloat-abi=softfp 仍然使用 NEON,但与现有二进制文件更兼容,尽管它的性能不如 mfloat-abi=hard wiki.linaro.org/Linaro-arm-hardfloat
-
hard 应该可以提高性能,我们使用 hard 构建整个发行版。
-
oprofile 依赖于内核。您是否重新配置了内核以促进分析?
-
你终于设法让它工作了吗?我遇到了完全相同的问题。
-
不——当时我们放弃了尝试和错误:(
标签: gcc arm stack-trace oprofile cortex-a8