Endian/__BYTE_ORDER question
Wolfgang Denk
wd at denx.de
Fri Feb 12 08:39:00 EST 2010
Dear Joakim Tjernlund,
In message <OF918AA866.3ED427EB-ONC12576C7.005CBEE4-C12576C7.005CF730 at transmode.se> you wrote:
>
> > I have no idea how it is actually done in the kernel code... but gcc
> > defines it:
> >
> > gcc -dM -E -x c - <<<'' | grep ENDIAN
> > #define __BIG_ENDIAN__ 1
> > #define _BIG_ENDIAN 1
>
> That doesn't define __BYTE_ORDER. Try the same gcc command
> on a file that #includes <stdlib.h> and you will get both
> __BIG_ENDIAN and __LITTLE_ENDIAN
For me this appears to work:
On x86:
$ echo '#include <stdlib.h>' | gcc -dM -E -x c - | grep ENDIAN
#define _ENDIAN_H 1
#define PDP_ENDIAN __PDP_ENDIAN
#define __PDP_ENDIAN 3412
#define BIG_ENDIAN __BIG_ENDIAN
#define __BYTE_ORDER __LITTLE_ENDIAN
#define __LITTLE_ENDIAN 1234
#define __BIG_ENDIAN 4321
#define LITTLE_ENDIAN __LITTLE_ENDIAN
On PowerPC:
$ echo '#include <stdlib.h>' | gcc -dM -E -x c - | grep ENDIAN
#define __BIG_ENDIAN__ 1
#define __PDP_ENDIAN 3412
#define __LITTLE_ENDIAN 1234
#define BIG_ENDIAN __BIG_ENDIAN
#define _BIG_ENDIAN 1
#define __BYTE_ORDER __BIG_ENDIAN
#define _ENDIAN_H 1
#define __BIG_ENDIAN 4321
#define PDP_ENDIAN __PDP_ENDIAN
#define LITTLE_ENDIAN __LITTLE_ENDIAN
In both cases __BYTE_ORDER is set to a sane value.
Best regards,
Wolfgang Denk
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Copy from one, it's plagiarism; copy from two, it's research.
More information about the Linuxppc-dev
mailing list