__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