4

这个我咬牙切齿。。。

我需要在 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

我做了很多谷歌搜索,发现了一些相关的主题:

  • 自由风?
  • 矮人
  • (异步)展开表
  • -mapcs-frame

但是我不完全理解这些是如何联系起来的。关于如何让调用图工作的任何提示?

注意(由于 Rian 的回答):我有兴趣找出 ARM 上的某些方法是否以及为什么比 x86-64 需要更长的时间(相对于其他方法)。在不同的平台上执行此操作无济于事(即使我的代码在两者上都编译并且我可以在 x86-64 上执行调用图)。

4

1 回答 1

2

我知道您想在 ARM cortex-A8 上进行分析,但如果您对调用图感兴趣,为什么不为 x86 编译并运行 valgrind 的 callgrind 工具并使用 kcachegrind 检查结果?

两种架构之间的调用图应该相同,即使它们编译的函数略有不同,函数之间的关系也不应该改变。

不需要特殊标志:

valgrind --tool=callgrind -v --dump-every-bb=10000000 ./some-app
kcachegrind &
于 2011-11-30T17:32:49.337 回答