[openfirmware] [commit] r2250 - forth/wrapper

repository service svn at openfirmware.info
Mon Jun 6 18:49:09 CEST 2011


Author: wmb
Date: Mon Jun  6 18:49:08 2011
New Revision: 2250
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2250

Log:
Wrapper - fixed alignment and endianness issue introduced by svn 2182.  It worked fine when building on an x86 host, which is little-endian and alignment-agnostic.  It failed on a little-endian, alignment-required ARM host, and would have failed on a big-endian host.

Modified:
   forth/wrapper/wrapper.c

Modified: forth/wrapper/wrapper.c
==============================================================================
--- forth/wrapper/wrapper.c	Mon Jun  6 03:46:57 2011	(r2249)
+++ forth/wrapper/wrapper.c	Mon Jun  6 18:49:08 2011	(r2250)
@@ -2390,9 +2390,16 @@
      crc = lbflip(crc);
      inlen = lbflip(inlen);
 #endif
-     *(unsigned long *)&outbuf[10 + datalen + 0] = crc;
-     *(unsigned long *)&outbuf[10 + datalen + 4] = inlen;
-     return (10 + datalen + 8);
+     /* The CRC and input length are little-endian, not necessarily aligned */
+     outbuf[10 + datalen] = crc & 0xff;
+     outbuf[11 + datalen] = (crc>>8) & 0xff;
+     outbuf[12 + datalen] = (crc>>16) & 0xff;
+     outbuf[13 + datalen] = (crc>>24) & 0xff;
+     outbuf[14 + datalen] = inlen & 0xff;
+     outbuf[15 + datalen] = (inlen>>8) & 0xff;
+     outbuf[16 + datalen] = (inlen>>16) & 0xff;
+     outbuf[17 + datalen] = (inlen>>24) & 0xff;
+     return (18 + datalen);
 }
 
 INTERNAL long



More information about the openfirmware mailing list