[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] Stack restore done by OS
On 10/10/2010 16:51, Helmut Karlowski wrote:
What would happen if the caller pushed the wrong amount onto the stack?
I guess it would have a wrong stackpointer afterwards.
Yes.
Just as when you manually fix the stack.
It would even be a bit better with stdcall.
If you assume you are calling a function which is not buggy:
- with stdcall, you may make a mistake when pushing the arguments
- with cdecl, you may make another mistake when cleaning the stack !
NB: On Atari, if your stack is big enough, you don't have to clean it
up after each system call. You can make a big cleanup at the end... or
never.
But the stack is used for local variables, or am I getting something wrong?
My silly remark was about a small, classic assembler program with only
some OS calls, no subroutines and no local variables.
Actually, the real rule is: the stack must be adjusted before any rts.
So the stack must be adjusted either after each jsr/trap, or just once
before rts (or a mix of both). GCC sometimes do that to minimize stack
adjustments.
--
Vincent Rivière