Mar*_*arc 5 arm linker-scripts thumb cortex-m
我们正在为 STM32 芯片上的 ARM Cortex M4 编写一些代码。
我的理解是 Cortex-M4 有一些 32 位指令,但这些不是 32 位 ARM 指令,它们只是一些特殊指令。我认为粘合剂是为了在 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 */
Run Code Online (Sandbox Code Playgroud)
由于处理器仅支持拇指指令,我可以删除glue_7和吗?glue_7t这样做会释放任何闪存吗?
发布的脚本始终会为调用拇指/ARM 的 ARM/thumb 代码创建部分,如果没有任何内容可调用,则这些部分为空。空的部分是良性的。
如果您想删除未使用的部分而不修改链接器,一种干净的方法是执行死代码消除,通过--gc-sections:
一旦使用这些选项创建了对象和静态库,链接器就可以执行死代码消除。您可以通过将 -Wl,--gc-sections 选项设置为 gcc 命令或在 gnatmake 的 -largs 部分中来完成此操作。这将对从未引用的代码和数据执行垃圾收集。