I use my own executable compiled by GNU before compiling anything else:
bigendian.c
-----------
int main()
{
unsigned short val = 0x0011;
unsigned char* str = (unsigned char*)&val;
if ( str[0] == 0x00 )
return 1;
else
return 0;
}
in my GNUmakefile
-----------------
- one rule to compile bigendian.c if exe not compiled
- one rule testing the return value of exe and setting
MEMORY_IS_LITTLE_ENDIAN or MEMORY_IS_BIG_ENDIAN
That way I do not need to look for the right MACRO on the right SYSTEM.
I compile my code on IRIX (SGI), Solaris (SUN), intel Linux and LinuxPPC.
--
/====================================================================/|
| Stephane GEORGES | ||
| DALiM SOFTWARE GmbH R&D | Tel: +49 7851 9196 40 ||
| Strassburger Str.6 | Fax: +49 7851 7357 6 ||
| D-77696 | ||
| Kehl-Sundheim (Germany) | E-mail: sg@dalim.de ||
|____________________________________________________________________|/
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
On Thu, 13 Jan 2000, Stephane GEORGES wrote:
I use my own executable compiled by GNU before compiling anything else:
bigendian.c
-----------
int main()
{
unsigned short val = 0x0011;
unsigned char* str = (unsigned char*)&val;
if ( str[0] == 0x00 )
return 1;
else
return 0;
}
in my GNUmakefile
-----------------
- one rule to compile bigendian.c if exe not compiled
- one rule testing the return value of exe and setting
MEMORY_IS_LITTLE_ENDIAN or MEMORY_IS_BIG_ENDIAN
That way I do not need to look for the right MACRO on the right SYSTEM.
I compile my code on IRIX (SGI), Solaris (SUN), intel Linux and LinuxPPC.
One worry here is that there are a few obscure (and generally, pretty
out-of-date) architectures that are neither big nor little. Since this
only checks the first byte against the big value, it will return little
endian on a few oddball machines. Other than that, though, yes, that
should work.
David
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
On Thu, 13 Jan 2000, David A. Gatwood wrote:
quoted
int main()
{
unsigned short val = 0x0011;
unsigned char* str = (unsigned char*)&val;
if ( str[0] == 0x00 )
return 1;
else
return 0;
}
in my GNUmakefile
-----------------
- one rule to compile bigendian.c if exe not compiled
- one rule testing the return value of exe and setting
MEMORY_IS_LITTLE_ENDIAN or MEMORY_IS_BIG_ENDIAN
That way I do not need to look for the right MACRO on the right SYSTEM.
I compile my code on IRIX (SGI), Solaris (SUN), intel Linux and LinuxPPC.
One worry here is that there are a few obscure (and generally, pretty
out-of-date) architectures that are neither big nor little. Since this
only checks the first byte against the big value, it will return little
endian on a few oddball machines. Other than that, though, yes, that
should work.
Indeed, I don't think that there are so many PDP around here any more, but
what about cross compiling (for a PDP you would cross compile for sure) ?
The exe runs on the build machine, not the target. And many archs can run
right^Wbig- or wrong^Wlittle-endian: Alpha, ARM, IA64, MIPS, PPC, SH,
SPARC. (I thought HPPA could but gcc only knows the big endian version).
I don't know of any arch switchable between 3 or more different byte
orders, however (from gcc source the 1750 is as weird as the PDP, maybe
they are related).
Gabriel.
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/