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