Re: [PATCH] Remove matherr, and SVID and X/Open math library configurations

Jozef Lawrynowicz <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <20190115213318.7c27c68f@jozef-kubuntu>
Hi Corinna,

Did you have any thoughts on my proposals detailed below?

Thanks,
Jozef

On Fri, 14 Dec 2018 12:31:47 +0000
Jozef Lawrynowicz <[email protected]> wrote:

> Hi Corinna,
> 
> Thanks for the feedback.
> 
> On Thu, 13 Dec 2018 13:56:29 +0100
> Corinna Vinschen <[email protected]> wrote:
> 
> > We have to keep matherr as exported symbol from Cygwin to maintain
> > backward compatibility.  In contrast to embedded, we can't afford
> > applications using this function to stop working with a new Cygwin
> > release just because there's no matherr symbol anymore.  
> 
> I believe matherr is designed to only be called from the
> floating-point arithmetic functions in the library, so if the
> definition of matherr is removed along with all the uses of matherr,
> users would still be able to link their applications.
> 
> > So, would it be feasible to convert the matherr functions to a stub
> > which just returns 0 and otherwise just go ahead?  I'm pretty fuzzy
> > on the implications this change has on old apps actually using
> > matherr...  
> 
> The default matherr is already a stub and will always return 0, the
> problem would be if the users' application code defines a more
> sophisticated matherr which might fix up or report errors at runtime.
> If they expect their customized matherr to be called after a
> floating-point arithmetic error, then that will not happen anymore.
> 
> Since the default matherr is a stub, and the default libm
> configuration is X/Open, the default behaviour is actually identical
> to POSIX libm.
> 
> If we want application code with a customized matherr implementation
> to fail to build, we can add a bad prototype for matherr to math.h.
> So when users define their own matherr which uses the (old) correct
> declaration, they will see an error:
> 
> >   sqrt.c:4:5: error: conflicting types for 'matherr'
> >       4 | int matherr (struct exception *e)
> >       |     ^~~~~~~
> > In file included from sqrt.c:1:
> > /usr/local/msp430-elf/include/math.h:571:12: note: previous
> > declaration of 'matherr' was here 571 | extern int matherr (void *
> > MATHERR_ERROR_HANDLING_IS_OBSOLETE, int x); |            ^~~~~~~  
> 
> So I think we have only two choices:
> 1. Remove matherr completely (this is what the submitted patch does)
>      Code which uses a customized matherr will build successfully
>      But the customized matherr will never be called at runtime
> 2. Remove all usage of matherr, but give matherr a different
> prototype to what is expected
>      Application code with a customized matherr will fail to build
> 
> It's also worth noting that since the previous default libm
> configuration was X/Open, errno was set correctly. The new default is
> IEEE, so errno does not get set. The only other configuration now
> available is POSIX, which sets errno correctly. If we are concerned
> about backwards compatibility, then perhaps for Cygwin the default
> libm configuration should be POSIX, so errno still gets set.
> 
> What do you think is the best way forward?
> 
> Jozef
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.