__IEEE_*_ENDIAN vs. BYTE_ORDER

Jeff Johnston jjohnstn@redhat.com
Wed Apr 28 21:22:00 GMT 2004


Ralf Corsepius wrote:
> Hi,
> 
> Newlib's sys/param.h applies __IEEE_*_ENDIAN (from machine/ieeefp.h) to
> define BYTE_ORDER.
> 
> AFAIU, __IEEE_*_ENDIAN denotes the floating point endianess, only, which
> doesn't necessarily match with a CPU's general endianess.
> 
> 
> E.g. some arm-CPUs seem to use __IEEE_BIG_ENDIAN, while actually being
> little endian targets.
> 
> On these targets newlib's sys/param.h results into
> #define __IEEE_BIG_ENDIAN
> #define BYTE_ORDER BIG_ENDIAN
> 
> even for little endian arm targets, while I think
> #define __IEEE_BIG_ENDIAN
> #define BYTE_ORDER LITTLE_ENDIAN
> 
> would have been correct.
> 
> I.e. I suspect newlib's sys/param.h to be "illegally" using
> __IEEE_*_ENDIAN to setup BYTE_ORDER. I am wrong or right?
>

Newlib's sys/param.h is simply defaulting.  Note that it checks to see if 
BYTE_ORDER is already defined.  In special cases such as the ARM where the byte 
order and the floating-point byte order don't match up, the sys/config.h file 
should have defined the BYTE_ORDER as appropriate.

I believe the attached patch should do the trick.

-- Jeff J.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: config.h.patch
URL: <http://sourceware.org/pipermail/newlib/attachments/20040428/4a81f202/attachment.ksh>


More information about the Newlib mailing list