为什么Cortex-M4在链接描述文件中包含ARM to Thumb胶水

问题描述

我们正在为STM32芯片上的ARM Cortex M4编写一些代码。

我的理解是Cortex-M4具有一些32位指令,但是这些不是32位ARM指令,它们只是一些特殊指令。我认为胶水是用于在ARM和Thumb指令集之间进行转换。那么为什么链接脚本需要胶水

.text :
{
. = ALIGN(4);
*(.text)           /* .text sections (code) */
*(.text*)          /* .text* sections (code) */
*(.glue_7)         /* glue arm to thumb code */
*(.glue_7t)        /* glue thumb to arm code */

由于处理器仅支持重击指令,我是否可以删除粘胶_7和粘胶_7t?这样做会释放出任何闪存吗?

解决方法

发布的脚本将始终为调用thumb / ARM的ARM /拇指代码创建节,如果没有什么可调用的,则这些节为空。空节是良性的。

如果您要删除未使用的部分而不修改链接器,则一种干净的方法是通过--gc-sections执行死代码消除

一旦使用这些选项创建了对象和静态库,链接器就可以执行无效代码消除。您可以通过将-Wl,-gc-sections选项设置为gcc命令或在gnatmake的-largs部分中来执行此操作。这将对从未引用的代码和数据进行垃圾收集。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...