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.

[参考译文] OMAP-L138:为 C6x/c7x DSP 处理器提供 GCC /C++支持

Guru**** 2390875 points
Other Parts Discussed in Thread: C6000-CGT, OMAP-L138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1474587/omap-l138-gcc-c-support-for-the-c6x-c7x-dsp-processors

器件型号:OMAP-L138
"主题"中讨论的其他器件:C6000-CGT

工具/软件:

您好:

在 SBG 系统领域、我们多年来一直使用 C6000-CGT 工具来编写针对 OMAP-L138 SoC 的 DSP (C674x)的代码。 然而、截至最近、我们需要移植 C++代码库才能在 DSP 上运行。 我们曾尝试使用 C6000-CGT 工具执行此操作、但编译时间非常长、经常因内部编译器错误而失败。 这对我们来说是一个阻碍问题。

经过多次尝试后、我们决定切换到 GCC、并成功构建了一个工具链、通过该工具链、我们可以构建和运行当前的 C 代码库、还可以在一个实验分支中构建新的 C++代码库。 我们使用 GCC 13.3.1 (Git 维护分支)执行了此操作、但我们可能可以改用最新的 GCC 版本、因为 C6x 目标仍然受支持。

我们遇到了 GCC 方面的两个问题、这两个问题都与异常处理有关:

线程安全:在 C6x 的 GCC 中未实现线程局部存储。 我们以类似于 VxWorks 的方式使用 GCC 的 TLS 仿真层来实现异常处理线程安全性。

RTTI:在 EHTYPE 重定位类型方面,binutils 似乎有一个小问题,即它们是 DP 相对 GOT 间接的,而不是仅仅是 DP 相对的。 我们可以调整链接器脚本、以便数据指针具有"正确的地址"以使指针编码正常工作、但它似乎过于模糊、因此我们修补了 binutils 和 gcc、将 type_info 地址编码为仅 DP 相对地址。 顺便说一句、如果这里的任何人都能确认"Get Indirection" On Top 是否违反了 ABI、我的理解是它确实违反了 ABI、但我想知道为什么这样实施。 谢谢。

此外、我们注意到汇编器不会生成16位紧凑指令、并且生成的代码比 C6000-CGT 工具慢约1.5倍、采用类似的优化(LTO 和整个程序优化在-O3处)。 然而,我们的新 C++代码库从更高级别的优化中受益匪浅,特别是模板,在编译时直接完成大量计算,因此我们仍然很满意这一迁移,但我们怀疑生成的机器代码可以从更好的指令调度和缓存中受益。

总之,这些都是小问题,谁写了初始实施的人和那些做了维护10多年的人都做了相当好的工作(感谢他们)。 我的问题是:TI 是否会考虑(重新)开始为 C6x 和/或 c7x 架构提供 GCC 支持? 我们在很大程度上 依赖于异常、模板库和一些 C++>14功能、因此 这些功能 现在对我们的未来有着很强的要求。 我怀疑在这种情况下、我们可能不是孤立无援、或者对可靠地实施这些特点感兴趣。

谢谢。

对于可能对我们的工作感兴趣的人、请访问 https://github.com/SBG-Systems/sbgToolchain

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

    您好、Richard、

    对此处延迟的回复表示歉意。 请记住、OMAP-L138足够旧、我们无法再支持有关该器件的硬件或软件设计问题。 但是、我们将发布带有 C7的新器件(例如 AM62AxAM62Dx)。 我不确定当前或计划为 C66/C7上的编译器提供的支持。

    我正在将您的线程发送给其他团队、讨论当前对 C7 / C66编译器的支持。 如果问题的响应时间超过几个工作日、您可以随时 ping 通该问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果这里的任何人都能确认顶部的 GOT INDIRECTION 是否破坏了 ABI、我的理解是它确实破坏了 ABI、但我想知道为什么它是这样实现的。

    C6000嵌入式应用二进制接口 可能说明这一主题。

    Unknown 说:
    ] TI 是否会考虑(重新)启动对 C6x 和/或 c7x 架构的 GCC 支持?

    最近没有做过任何工作。  尽管此论坛主题是反例、但客户兴趣很低。  考虑到这一点、可能性很低。

    谢谢。此致、

    -乔治

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

    您好:

    是的、我知道 OMAP-L138是旧的。 我不确定该主题的位置、因此我选择了该处理器、因为它是我们使用的处理器。 但这个问题更笼统、涉及32位 C6x 和64位 c7x。

    对于有兴趣的人、我在 https://github.com/SBG-Systems/FreeRTOS 上发布了一个包含集成示例的 FreeRTOS 端口。 它不能在实际硬件上运行、这一点并不完整、但它为有兴趣将工具链与 FreeRTOS 配合使用的人员编译并用作基础、或者只是为了了解如何实现集成、以便他们可以 在自己的代码库上使用工具链。