Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250222003710.GH1827@brightrain.aerifal.cx>
Date: Fri, 21 Feb 2025 19:37:11 -0500
From: Rich Felker <dalias@...c.org>
To: Alex Rønne Petersen <alex@...xrp.com>
Cc: musl@...ts.openwall.com
Subject: Re: Re: [PATCH] configure: prevent compilers from turning a *
 b + c into fma(a, b, c)

On Fri, Dec 06, 2024 at 01:54:45AM +0100, Alex Rønne Petersen wrote:
> On Wed, Aug 28, 2024 at 5:28 PM Alex Rønne Petersen <alex@...xrp.com> wrote:
> >
> > I've seen Clang do this for expressions in the fma() implementation itself,
> > which of course led to infinite recursion. This happened when targeting
> > arm-linux-musleabi with full soft float mode and -march=armv8-a. I imagine
> > it's possible for GCC to do similar silliness.
> >
> > Work around this by passing -ffp-contract=off for Clang and -mno-fused-madd
> > for GCC. This matches what glibc's configure.ac does, FWIW.
> > ---
> >  configure | 9 +++++++++
> >  1 file changed, 9 insertions(+)
> >
> > diff --git a/configure b/configure
> > index bc9fbe48..7028793f 100755
> > --- a/configure
> > +++ b/configure
> > @@ -355,6 +355,15 @@ tryflag CFLAGS_C99FSE -fexcess-precision=standard \
> >  || { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; }
> >  tryflag CFLAGS_C99FSE -frounding-math
> >
> > +#
> > +# Prevent the compiler from turning a * b + c into an fma() call.
> > +# Clang at least has been known to do this in the implementation of
> > +# fma() itself when targeting arm-linux-musleabi and armv8-a, causing
> > +# infinite recursion.
> > +#
> > +tryflag CFLAGS_C99FSE -mno-fused-madd
> > +tryflag CFLAGS_C99FSE -ffp-contract=off
> > +
> >  #
> >  # Semantically we want to insist that our sources follow the
> >  # C rules for type-based aliasing, but most if not all real-world
> > --
> > 2.40.1
> >
> 
> Ping. Is the patch acceptable without -mno-fused-madd (for ancient
> GCCs)? If so, should I re-send without that line?

If this is needed at all (IIRC I was unclear on how it was needed at
all with -ffreestanding) then I'd prefer to also include the option to
unbreak old GCC.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.