强制gcc传递堆栈上的参数

coj*_*car 6 c stack gcc parameter-passing calling-convention

有没有办法强制gcc传递堆栈上函数的参数?

我不想使用寄存器进行参数传递.

更新:我使用CodeSourcery的 arm-gcc

小智 0

根据:http ://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf

前四个寄存器 r0-r3 (a1-a4) 用于将参数值传递到子例程中并从函数返回结果值。它们还可以用于保存例程内的中间值(但通常仅在子例程调用之间)。

据我所知,在 ARM 上除了默认调用约定之外没有其他调用约定。原因如下:

  1. 你为什么想要这样做?您的函数无法以编译形式被其他函数调用,从而造成兼容性混乱。
  2. 除非编译器能够区分调用约定,否则对符合 ABI 的系统函数的调用将不起作用。现在,我知道x86-32过去有不同的调用约定,但请注意 x64 更简单(AMD64 与 Microsoft 所做的任何事情)。为什么在设计ARM 调用约定时,会允许这么多不同的调用约定?它会造成兼容性混乱。