【发布时间】:2011-02-23 11:53:17
【问题描述】:
在 ARM ABI 文档中,我遇到了如下定义的函数:
__value_in_regs struct bar foo(int a, int b) {
...
}
但 GCC(4.3.3) 不允许这样做,我能找到的只是对某些 RealView 编译器的引用。 GCC 有没有办法做到这一点?
我已经尝试过 -freg-struct-return 但它没有任何区别。由于它是 ABI,我无法更改原始程序,并且返回常规结构会破坏堆栈。
如果可以避免的话,我宁愿不为此使用汇编。
谢谢!
【问题讨论】:
-
您正在阅读哪些 ABI 文档?我正在阅读的 ARM AAPCS 没有那个关键字。 infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/…
-
我做了一些谷歌搜索,我知道发生了什么。你能写一点汇编代码来重击这些调用吗?或者这种情况经常发生?
-
@jbcreix,不,您只需要编写一个小程序集填充程序来进行函数调用,然后将结果压入堆栈并返回。你可以让其他一切保持不变。
-
@jbcreix,同样的问题。然后你需要让你的汇编 shim/thunk 代码成为公共 API,并从它调用到你的 C 代码中,将堆栈的值 off 拉入寄存器,然后返回。同样的问题,只是往另一个方向发展。
-
为什么不呢?应该是 10 条指令....