Default libm mode is XOPEN?

Joel Sherrill
Mon Jul 7 18:45:00 GMT 2014

On 7/7/2014 1:19 PM, Corinna Vinschen wrote:
> On Jul  7 11:07, Joel Sherrill wrote:
>> On 7/7/2014 8:26 AM, Corinna Vinschen wrote:
>>> On Jul  3 16:29, Kyrill Tkachov wrote:
>>>> Hi all,
>>>> Looking at newlib/libm/common/fdlibm.h I see the lines:
>>>> /* REDHAT LOCAL: Default to XOPEN_MODE.  */
>>>> #define _XOPEN_MODE
>>>> Building an aarch64-none-elf compiler with newlib, the following test
>>>> program:
>>>> #include <stdio.h>
>>>> #include <math.h>
>>>> int
>>>> main (void)
>>>> {
>>>>   printf ("_LIB_VERSION: %d\n", _LIB_VERSION);
>>>>   printf ("_XOPEN_: %d\n", _XOPEN_);
>>>>   return 0;
>>>> }
>>>> produces:
>>>> _LIB_VERSION: 1
>>>> _XOPEN_: 1
>>>> Is this /* REDHAT LOCAL: Default to XOPEN_MODE.  */ really intentional for
>>>> all users of newlib?
>>>> I thought IEEE was supposed to be the default one. Or are targets expected
>>>> to override this?
>>> It might be pretty tricky to track down why this was done.  _XOPEN_MODE
>>> was defined in fdlibm.h since the introduction of the public CVS
>>> repository back in 2000.  The definition doesn't show up in the
>>> ChangeLog at all, so this change dates back to at least 1995.
>>> OTOH, changing this now would potentially break a lot of targets.
>>> We might have to introduce some workaround if there's an actual need.
>> Although this is not is the oldest version of the file,
>> the official fdlibm source does not include this definition.
> Yeah, I was looking for the newlib archives and ChangeLog only.
>> [...]
>> I agree with you that 20+ years of being in place, it is
>> scary to change.  But I only see two references to
>> _XOPEN_MODE. Once to define it and another in s_lib_ver.c
>> to set _LIB_VERSION.  I guess the question is whether this is
>> truth or lying about the fdlibm/newlib implementation.
> It's more than that.  _LIB_VERSION is tested a lot throughout the code :(
I will admit to only having spot checked but does this impact
anything other than how various error situations are reported?

Is this something that someone can change at run-time?
If not, a serious concern is whether this is turning on code which
has been unused for years.

I guess I agree in principle that IEEE is preferable but the impact
of the change is unknown.
> Corinna

Joel Sherrill, Ph.D.             Director of Research & Development        On-Line Applications Research
Ask me about RTEMS: a free RTOS  Huntsville AL 35805
Support Available                (256) 722-9985

More information about the Newlib mailing list