【问题标题】:function argument in register寄存器中的函数参数
【发布时间】:2010-05-07 05:51:57
【问题描述】:

有没有办法使用 gcc 3.3.1 for ARM 禁用在寄存器中传递函数参数?

【问题讨论】:

  • 我不知道。但它是 gcc——如果你愿意做一些工作,你可以修改源代码。但不适合外行。您知道这会导致您的代码违反 ARM EABI(嵌入式应用程序二进制接口),对吧?
  • +1 @Dan。你能解释一下为什么要这样做吗?
  • 我也遇到过类似的情况。我的问题是我将几个结构参数传递给 asm 函数。第一个结构的一半在 r3 中结束,其他所有内容都在堆栈中。如果所有结构都相同(即在堆栈上),会更方便。

标签: gcc arm


【解决方案1】:

是的。我看到 dwelch 给出了一个全局答案,但是如果您想逐个函数地执行此操作,请使用 gcc __attribute__regparm。 iirc,它应该是这样的:

int __attribute__((regparm(0))) function(int a, char b) { ... }

【讨论】:

    【解决方案2】:

    也许这些选项之一就是您正在寻找的

    -mabi=名字 为指定的 ABI 生成代码。允许的值为:`apcs-gnu'、`atpcs'、`aapcs'、`aapcs-linux' 和 `iwmmxt'。

    如果没有,如果有的话,可能是编译时选项(编译 gcc 时)。

    【讨论】:

    • 这些只是基本 ABI 的小变种。它们都传递寄存器中的前 4 个 32 位值。
    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 2020-06-16
    • 2012-06-15
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多