Re: [PATCH] i386: fix stack alignment for signal handlers

From: Linus Torvalds
Date: Tue Sep 13 2005 - 18:53:04 EST




On Wed, 14 Sep 2005, Markus F.X.J. Oberhumer wrote:
>
> > You seem to be expecting that the address be aligned "before the return
> > address push", which is a totally different thing. Quite frankly, I don't
> > know which one gcc prefers or whether there's an ABI specifying any
> > preferences.
>
> I'm pretty sure that on both amd64 and i386 the alignment has to be
> _before_ the address push from the call, though I cannot find any exact ABI
> specs at the moment. Experts please advise.
>
> What do you get when running this slightly modified version of your test
> program? My patch would fix the alignment of Aligned16 here.

Your test program does seems to imply that gcc wants the alignment before
the return address (ie it prints out an address that is 4 bytes offset),
but on the other hand I'm not even sure how careful gcc is about this
alignment thing at all.

In the "main()" function, gcc will actually generate a "andl $-16,%esp" to
force the alignment, but ot in the handler function. Just a gcc special
case? Random luck?

Andi - you know the gcc people, is there some documented rules somewhere?
How does gcc itself try to align the stack when it generates the calls?

Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/