[U-Boot] cross compiling fw_printenv on big endian

Jeff Angielski jeff at theptrgroup.com
Wed Mar 17 16:10:50 CET 2010


Joakim Tjernlund wrote:
> 
> Wolfgang Denk <wd at denx.de> wrote on 2010/03/17 12:57:31:
>> Dear Joakim Tjernlund,
>>
>> In message <OFF4AB0804.BE309218-ONC12576E9.003A69DF-C12576E9.
>> 003B4D86 at transmode.se> you wrote:
>>> hmm, I recently discovered that normal user space headers always define
>>> both __LITTLE_ENDIAN and __BIG_ENDIAN so therefore a
>>> # ifdef __LITTLE_ENDIAN
>>> #  define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8)
>>> # else
>>> #  define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
>>> # endif
>>>
>>> Wont work. One have to use
>>>  #if __BYTE_ORDER == __LITTLE_ENDIAN
>>> instead.
>> Wenn...
> 
>>     Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
>>
>>
>> Looks as if this were your very own commit. Do you have a fix in the
>> works?
> 
> I know, but I don't have anything ATM. I am too busy debugging serious
> customer problems.
> 
>      Jocke

This appears to work for me on my big endian PowerPC target.  Perhaps 
somebody with a little endian target can verify it does not break their 
env tools.

diff --git a/lib_generic/crc32.c b/lib_generic/crc32.c
index 468b397..27335a3 100644
--- a/lib_generic/crc32.c
+++ b/lib_generic/crc32.c
@@ -163,7 +163,7 @@ const uint32_t * ZEXPORT get_crc_table()
  #endif

  /* 
========================================================================= */
-# ifdef __LITTLE_ENDIAN
+# if __BYTE_ORDER == __LITTLE_ENDIAN
  #  define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8)
  # else
  #  define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)



Jeff Angielski
The PTR Group
www.theptrgroup.com


More information about the U-Boot mailing list