gpt4 book ai didi

assembly - 可以使用 ARM 工具链在 CW 10.6 上停用拇指互操作吗?

转载 作者:行者123 更新时间:2023-12-02 16:07:19 24 4
gpt4 key购买 nike

我正在使用 CodeWarrior for MCU v10.6 IDE 开发一个项目。它是 NXP 的基于 Eclipse 的 IDE。该项目的目标是 NXP 的 K21 SoC(确切地说是 MK21FN1M0M12,嵌入了 cortex-m4armv7-m)。CodeWarrior 配置为使用 ARM 工具链。

我遇到了与拇指交互相关的崩溃。此功能由 IDE 启用且无法停用。

由于armv7-m仅支持thumb2,因此使用thumb-interwork一开始似乎没有意义。但我可能在这里遗漏了一些东西。所有代码均在拇指指令中正确生成。

通过指针进行间接函数调用时遇到麻烦。函数代码在链接阶段得到一个奇数地址,这是可以的(这表明它是拇指代码)。然而,当通过指针调用它时,会生成一条 BLX 指令(我想链接器在这里将原始 BL 更新为 BLX)并且函数指针的值保持偶数!由于指针的值为偶数,因此跳转指示内核切换到 ARM 模式。因此发生了崩溃。

我认为链接器将 BL 升级为 BLX 是因为拇指互通功能被激活。在 CodeWarrior for MCU v10.6 上,这是强制的,我无法禁用它。我被告知该工具“需要处理器”,无法单击相关复选框(Properties->C/C++ Build->Settings,ARM CPU。处理器设置为 “皮质-m4”)。

我不明白为什么,因为这是armv7-m。而且它似乎给我带来了麻烦。我想我在这里遗漏了一些东西。

您能否帮助我了解发生了什么和/或告诉我是否有办法禁用 CodeWarrior 上的拇指交互?

谢谢并致以最诚挚的问候,

皮埃尔

最佳答案

@Notlike说得对,我的问题有点像 XY 问题。

我的问题是由于使用 GCC 构建的库而引起的,CodeWarrior 配置为使用 Freescale 的工具链(ARM 工具)。

未设置 LSB 的函数指针来自这些库之一,并在链接阶段由 CodeWarrior 进行了评估。由于链接器正确地将这些库中的每个函数放置在奇数地址处,我猜测它应该错过一些信息来检测错误指针实际上是一个函数指针。

长话短说,事实证明库被剥离了,特别是带有 --strip-unneeded 标志。我删除了该标志,链接器做得非常完美!

关于assembly - 可以使用 ARM 工具链在 CW 10.6 上停用拇指互操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com