This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430FG4618:当发生函数符号别名时,CCS 7.2 堆栈使用可能会少报堆栈大小要求

Guru**** 2386620 points
Other Parts Discussed in Thread: MSP430FG4618
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/615389/ccs-msp430fg4618-ccs-7-2-stack-usage-can-under-report-the-stack-size-requirement-when-function-symbol-aliasing-occurs

部件号:MSP430FG4618

工具/软件:Code Composer Studio

附加的项目是计算program.e2e.ti.com/.../3441.MSP430FG4618_5F00_trig_5F00_stack_5F00_size.zip的4618的堆栈大小使用情况的测试

“CCS 7.2 .0.0.0013万 堆栈使用情况”视图将_c_int00_noargs_notexit的堆栈使用情况报告为878字节:

在上面的中, full 和scalbnl函数被报告为没有找到定义。 在 "堆栈使用情况"视图中,floor和scalbn函数显示为未调用:

在附加的zip文件 Debug中,MSP430FG4618_trig_stack_size_call_graph.txt是call_graph cG_xml工具的输出;在项目中添加了一个后期生成规则,以便在生成的生成文件上运行call_graph。

将CG_xml工具计算的堆栈大小与CCS 7.2 堆栈使用情况视图中显示的堆栈大小进行比较显示:

1) call_graph计算 出了_c_int00_noargs_notexit函数的更高堆栈大小 ,为908字节,而不是CCS堆栈使用情况视图报告的878字节。

2) call_graph不将 floor 和scalbn函数报告为孤立函数。

原因是call_graph检测到(floor floor)和(scalbn scalbnl)是函数符号别名,并在    _c_int00_noargs_notexit的堆栈使用中包含(floor floor l)和(scalbn scalbnl)的堆栈大小。

因此,“CCS堆栈使用情况”视图在 出现函数“符号别名”时,未能很好地报告堆栈要求(其中,函数“符号别名”表示两个具有相同地址的符号)。

 在 出现函数符号别名时,是否可以更改“CCS堆栈使用情况”视图以匹配CG_xml call_graph行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您通知我们此问题,并提交一个简明的测试案例。  我可以再现相同的结果。  我在 SDOWP系统中提交了CodeGen-3595以对此进行调查。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再看一个例子,另一个异常是CCS 7.2 堆栈使用情况视图和CG_xml call_graph都报告 _auto_init_hHold_WDT函数是孤立函  数(在_auto_init_hHold_WDT不显示在_c_int00_noargs_noexit入口点的调用树下)。

    在out文件上运行dis430,显示 _auto_init_hHold_WDT 正由 _c_int00_noargs_notexit直接调用:

    $ 16.9 /cygdrive/C/ti/ccs720/ccsv7/tools/compiler/ti-CGT-MSP430_MSP.4.LTS/bin/dis430.exe MSP430FG4618_trig_stack_size.out | MSP430FG4618_trig_stack_size.out的头-40
    
    拆卸:
    
    文本部分.text:_isr,0x22字节0x31亿:
    _c_int00_noargs_notexit:
    0.31万: text:_isr:_c_int00_noargs_noexit:
    0.31万: text:_isr:
    0.31万:8100 Mova #0x0.31万,SP
    0.3102万:0.31003104亿
    :B113 CALLA #_SYSTEM_PRE_INIT
    0.3106万:D23E
    0.3108万:0C93 TST.W R1200310
    a:0224 JEQ ($C$L4)
    0.031万c:B113 Calla #_auto_init_hHold_WDT
    0.031万e:A4.3900311亿
    : $C$L4:
    0.311万:0C43 CLR.W R1200.3112万
    :B113 CALLA #MAIN
    0.3114万:E63D
    0.3116万:B113 CALLA #ABORT
    0.3118万:CC3E
    0.0311万a: __TI_ISR_TRAP: 

    因此,不确定为什么 在 c_int00_noargs_notexit的调用树下没有报告_auto_init_hHold_WDT。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Chester Gillon 说:
    不确定为什么 在 调用树下未报告_c_int00_noargs_notexit。

    调用图是通过处理Dwarf调试信息来开发的。  在这种情况下,该信息是错误的。

    我提交 了CodeGen-3603以对此进行调查。  欢迎您使用我签名中下面的SDOWP链接进行关注。

    对于此特定测试案例所需的堆栈总量,Dwarf调试信息中的此错误没有影响。  尽管如此,非常感谢您让我们了解情况。

    谢谢,此致,

    -George