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.

[参考译文] AM6442:链接器-flto 问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1502491/am6442-linker--flto-issue

器件型号:AM6442

工具/软件:

您好、

客户已发现 am64x MCU plus SDK 中存在问题(09_01_00_41、但11_00_00_15中仍存在):

使用 MCSPI 驱动程序并像 SDK 中的几个示例(例如 enet_layer2_icssg)那样在链接时启用-flto 时、会出现问题。 发生这种情况时、gMcspiXUdmaRxRingMemCh0正确对齐缓存对齐(设置为128、但 IC 具有32字节的缓存行)、但可以跟随任何其他对齐不太严格的段。 在它们的例子中、gMcspi1UdmaRxRingMemCh0是在一个重要的链接列表之前链接的8个字节。 结果是、当在 SDK UDMA 代码中调用 CacheP_inv 时、链接列表中单个链路的最新更改将丢失。  

有一些可能的解决方案和权变措施来解决这个问题

  • 将 gMcspiXUdmaRxRingMemCh0以及最终传递给 CacheP_*函数的任何其他缓冲区填充到缓存行的长度、以确保无论是否启用了 Fdata 段还是 flto、代码都是正确的。 这需要修补 SDK!
  • 禁用-flto 会增加整体二进制大小和内存消耗。
  • 确保 syscfg 生成的文件不参与 flto、在这种情况下、手动在链接器中添加条目以使 syscfg 生成的文件保存在一起。 似乎可行、但无法证明是合理的、因为这仍然会导致其他符号可能部分缓存失效。  

是否有更好的解决方法可用?

其他驱动器也可能存在类似的潜在问题。

此致、Holger

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

    您好、

    请允许专家对您的疑问发表评论。

    此致、

    Vaibhav

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

    您好、Holger、

    请告诉我们哪个优化级别与-flto 标志一起使用? 请参阅下图。

    应用中使用的所有库是否也是以相同的优化级别构建的?

    此致、

    Tushar