Arm 为什么Cortex-M4在链接器脚本中包含手臂到拇指的胶水

Arm 为什么Cortex-M4在链接器脚本中包含手臂到拇指的胶水,arm,cortex-m,linker-scripts,thumb,Arm,Cortex M,Linker Scripts,Thumb,我们正在STM32芯片上为ARM Cortex M4编写一些代码 我的理解是Cortex-M4有一些32位指令,但这些不是32位ARM指令,它们只是一些特殊指令。我以为胶水是用来在手臂和拇指指令集之间转换的。那么为什么链接器脚本需要胶水呢 .text : { . = ALIGN(4); *(.text) /* .text sections (code) */ *(.text*) /* .text* sections (code) */ *(.glue_7)

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

我的理解是Cortex-M4有一些32位指令,但这些不是32位ARM指令,它们只是一些特殊指令。我以为胶水是用来在手臂和拇指指令集之间转换的。那么为什么链接器脚本需要胶水呢

.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 */

由于处理器只支持重击指令,我可以移除glue_7和glue_7t吗?这样做会释放出闪存吗?

发布的脚本总是会为调用thumb/ARM的ARM/thumb代码创建部分,如果没有可调用的内容,则部分为空。空的部分是良性的

如果要在不修改链接器的情况下删除未使用的节,一种干净的方法是通过以下方式执行死代码消除:

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


链接器代码的那一部分只是说,如果有胶水代码,就把胶水代码放在那里。如果没有任何胶水,则不会发出任何东西。查看链接映射以查看是否有任何空间需要回收。可以在链接器脚本和引导中执行任何操作。它是你的。如果它坏了,那么图书馆等,然后把它放回去。Inter work中不应该有任何代码用于往返thumb arm指令是,thumb 2扩展不是arm指令它们是文档中的thumb指令(您阅读了arm文档是吗?)你必须保持拇指模式,否则会出错。@marc:old_timer的评论是对你问题的正确回答:这些部分是出于历史原因而存在的,从未被删除过。