ARM gcc堆栈使用情况文件为空

ARM gcc堆栈使用情况文件为空,c,gcc,arm,stack-overflow,C,Gcc,Arm,Stack Overflow,我试图使用arm gcc工具链分析嵌入式程序的堆栈使用情况。该程序是单线程的,因此我通常可以使用-fstack usagegcc的参数分析堆栈 通常,此选项会生成.su文件以及编译单元。这些描述了每个函数的堆栈使用情况。但是在我的例子中,这些文件是空的 以下是.su文件内容的示例(来自): 我正在使用gcc-arm-none-eabi-5_4-2016q3,但问题也出现在gcc-arm-none-eabi-5_3-2016q1上 你知道这个问题吗?还是另一种控制堆栈使用的解决方案?经过大量测试后

我试图使用arm gcc工具链分析嵌入式程序的堆栈使用情况。该程序是单线程的,因此我通常可以使用
-fstack usage
gcc的参数分析堆栈

通常,此选项会生成
.su
文件以及编译单元。这些描述了每个函数的堆栈使用情况。但是在我的例子中,这些文件是空的

以下是.su文件内容的示例(来自):

我正在使用
gcc-arm-none-eabi-5_4-2016q3
,但问题也出现在
gcc-arm-none-eabi-5_3-2016q1


你知道这个问题吗?还是另一种控制堆栈使用的解决方案?

经过大量测试后,我找到了一种解决方案:
-fstack usage
似乎与
-flto
不兼容

禁用
-flto
可以生成.su文件


我真的不知道原因,因为我通过逐个启用/禁用标志找到了答案。另外,通过删除
-flto
,链接器会失败,但会计算堆栈使用量。

您是否在编译命令行(非链接行)中提供了
-fstack usage
选项?我用gcc-arm-none-eabi-4_9-2015q2进行了尝试,效果很好。我将参数同时提供给gcc(用于编译)和g++(用于链接)。我将尝试切换到ld作为链接器。建议使用gcc而不是ld进行链接。使用gcc、g++或ld会得到相同的结果。下面是链接器命令(没有完整的文件列表):
arm none-eabi-gcc-T gcc_arm.ld-mthumb-mcpu=cortex-m0--specs=nano.specs-Wl,--gc sections,--print gc sections-fstack用法
。尝试编译单个文件并查看是否生成了*.su文件:
arm none-eabi-gcc-mthumb-mcpu=cortex-m0-o main.c-fstack用法
main.c:36:6:bar    48    static
main.c:41:5:foo    88    static
main.c:47:5:main    8    static