使用C预处理程序/编译器指令来指定ARM或Thumb模式吗?

时间:2018-10-07 19:15:48

标签: c gcc arm thumb

直接使用ARM汇编时,我可以使用.thumb.thumb_func及其类似的arm指令来指示汇编程序输出哪种指令。

开发C代码时是否有匹配的编译器指令?我在documentation的GCC seen中提到了各种命令行选项,以允许拇指和手臂代码在同一个二进制文件中工作,但是输出看起来像是在拇指或ARM中的整个二进制文件。我希望能够指定各个函数的编译方式。

如果没有,还有另一种方法可以做到这一点吗?我当时想我可以编译多次,然后手动拼接反汇编,以将功能手动拼接成一个新的二进制文件,但我希望有一种更简单的方法。

2 个答案:

答案 0 :(得分:1)

看起来您想要的是Scanner函数属性。在https://gcc.gnu.org/onlinedocs/gcc-8.2.0/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes

处查看targetarm属性

这些应该允许您在A32或T32的文件中编译单个函数。

答案 1 :(得分:0)

请勿使用gcc之外的任何其他网站的gcc文档,因为它可能已过时。来自gcc doc

  

-mthumb
  -marm
  在生成以ARM和Thumb状态执行的代码之间进行选择。大多数配置的默认设置是生成在ARM状态下执行的代码,但是可以通过使用--with-mode = state configure选项配置GCC来更改默认设置。

     

您还可以通过使用target(“ thumb”)和target(“ arm”)函数属性(请参见ARM函数属性)或编译指示(请参见功能特定的选项编译指示)来覆盖每个功能的ARM和Thumb模式。