Re: Linux doesn't follow x86/x86-64 ABI wrt direction flag

Jan Hubicka
2008-03-05T20:50:01Z

> On Wed, Mar 05, 2008 at 09:38:13PM +0100, Michael Matz wrote:
> > Hi,
> >
> > On Wed, 5 Mar 2008, Aurelien Jarno wrote:
> >
> > > > So I think gcc at least needs an *option* to revert to the old behavior,
> > > > and there's a good argument to make it the default for now, at least for
> > > > x86/x86-64 on Linux.
> > >
> > > And for other kernels. I tested OpenBSD 4.1, FreeBSD 6.3, NetBSD 4.0,
> > > they have the same behaviour as Linux, that is they don't clear DF
> > > before calling the signal handler.
> >
> > Sigh. We could perhaps insert a cld for all functions which can be
> > recognized as possible signal handlers and call other unknown or string
> > functions. But it's probably even faster to emit cld in front of the
> > inline copies of mem functions again :-(
>
> Yes, if there are four kernels that get it "wrong", that effectively means
> that the ABI document doesn't describe reality and gcc has to adjust.

Kernels almost never follow ABI used by applications to last detail.
Linux kernel is disabling red zone and use kernel code model, yet the
ABI is not going to be adjusted for that.

This is resonably easy to fix on kernel side in signal handling, or by
removing std usage completely (I believe it is not performance win, but
some benchmarking would be needed to double check)

Honza