Next: , Previous: Function Entry, Up: Stack and Calling


17.10.12 为profiling生成代码

这些宏将帮助你为profiling生成代码。

— Macro: FUNCTION_PROFILER (file, labelno)

一条C语句或者复合语句,来输出到file中一些汇编代码, 来调用profiling子程序mcount

关于mcount期望如何被调用的细节,由你的操作系统环境来决定, 而不是GCC。要弄清楚它们,可以编译一个小程序, 使用系统安装的C编译进行profiling,并查看生成的汇编代码。

mcount的旧的实现,期望一个计数变量的地址被加载到某个寄存器中。 该变量的名字为‘LP’,后面跟随数字labelno, 所以你应该生成该名字,在fprintf中使用‘LP%d’。

— Macro: PROFILE_HOOK

一条C语句或者复合语句,来输出到file中一些汇编代码, 来调用profiling子程序mcount,即使target不支持profiling。

— Macro: NO_PROFILE_COUNTERS

定义该宏为一个表达式,具有一个非0的值, 如果你系统上的mcount子程序不需要为每个函数分配一个计数变量。 这对于大多数现代实现都是正确的。如果你定义了该宏, 你一定不要使用FUNCTION_PROFILERlabelno参数。

— Macro: PROFILE_BEFORE_PROLOGUE

定义该宏,如果函数profiling的代码应该位于函数序言之前。 通常profiling代码位于之后。