强制gcc在栈上传递参数
Is there a way to force gcc to pass the parameters of a function on the stack?
I don't want to use the registers for parameter passing.
Update: I'am using arm-gcc from CodeSourcery
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以尝试将参数包装在结构中;例如,如果您的函数是 int calc_my_sum(int x, int y) {return x+y;} 您可以按如下方式更改它(丑陋):
或者,您可以只添加 4 个虚拟参数用完寄存器,所以其他参数将使用堆栈:
You can try wrapping the parameters in a structure; for example, if your function is
int calc_my_sum(int x, int y) {return x+y;}
you can change it as follows (ugly):Alternatively, you can just add 4 dummy parameters to use up the registers, so other parameters will use stack:
根据: http://infocenter.arm.com/帮助/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
据我所知,在 ARM 上除了默认调用约定之外没有其他调用约定。原因如下:
According to: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042d/IHI0042D_aapcs.pdf
There are, on ARM, no other calling conventions but the default, that I know of. And here is why:
存储局部变量的位置取决于您将如何使用它。如果需要获取局部变量的地址,则局部变量只能存储在堆栈上。因此,当您向子例程传递指针时,该参数将通过堆栈传递。
Where to store a local variable is depend on how you will use it. If you need to get a local variable's address, the local variable can only be stored on the stack. So when you pass your subroutine a pointer, this parameter will be passed through the stack.