【ARM 嵌入式 编译系列 2.3 -- GCC 编译参数学习 -Wa,-mimplicit-it=thumb 使用介绍】

发布时间:2024年01月19日

问题背景

在移植 RT-Thread 时,使用Make 进行编译,结果遇到了下面问题:

rtt_os/cortex-m33/context_gcc.S: Assembler messages:
rtt_os/cortex-m33/context_gcc.S:154: Error: thumb conditional instruction should be in IT block – vstmdbeq r1!,{d8-d15}' rtt_os/cortex-m33/context_gcc.S:198: Error: thumb conditional instruction should be in IT block -- vldmiaeq r1!,{d8-d15}’
make: *** [rtt_os/cortex-m33/subdir.mk:13: rtt_os/cortex-m33/context_gcc.o] Error 1

-wa,-mimplicit-it=thumb 介绍

在使用 arm-none-eabi-gcc 编译 ARM 架构代码时,你可能会碰到一些控制汇编器行为的编译器选项。-wa 是一个 GCC 编译器选项,用于向汇编器传递参数。

-wa,-mimplicit-it=thumb 实际上是一组两个选项,它们的作用如下:

-wa 选项

-wa 选项允许你将参数直接传递给汇编器。它用于告诉 gcc 后端,在调用 as 汇编器时附加额外的命令行参数。你可以使用这个选项添加任何标准的汇编器命令行参数。

语法如下:

gcc -c -o output.o source.c -Wa,<assembler-options> 

其中 <assembler-options> 是要传递给 as 汇编器的选项列表,用逗号分隔。

-mimplicit-it=thumb 选项

-mimplicit-it=thumb 是传递给 as 汇编器的一个选项,它和 Thumb 指令集有关。

  • -m: 这总是 as 汇编器选项的前缀,表示这是一个指定给汇编器的机器相关的选项。

  • implicit-it: IT 指令是 ARM 架构中的「If-Then」指令,它用于 Thumb-2 指令集中的条件执行。在 ARM 模式下,大多数指令都可以直接带有条件码进行条件执行,而在 Thumb 模式(特别是在更旧的架构中),你需要显式地使用 IT 指令来实现条件执行。

  • =thumb: 这个值告诉汇编器在必要时隐式地插入 IT 指令,以使得后面的 Thumb 指令能够条件执行。这是对于兼容性的考虑,特别是在混合 ARM 和 Thumb-2 代码时有用。在 ARMv8 中,大多数形式的条件执行都已经被弃用,除了分支指令。

当使用 -mimplicit-it=thumb 时,你不需要在汇编代码中显式编写 IT 指令,汇编器会在需要的时候自动插入。

使用 -wa,-mimplicit-it=thumb

在命令行中组合这两个选项的实例如下:

arm-none-eabi-gcc -c -o output.o source.c -Wa,-mimplicit-it=thumb 

这条命令会编译 source.c 文件,并将 -mimplicit-it=thumb 选项传递给汇编器,允许在生成 Thumb-2 指令时自动插入 IT 指令。

文章来源:https://blog.csdn.net/sinat_32960911/article/details/135645189
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。