
Hi,
(James please can you use plain-text email for the mailing list?)
On Wed, 14 Aug 2019 at 01:35, Bin Meng bmeng.cn@gmail.com wrote:
Hi James,
On Wed, Aug 14, 2019 at 1:08 PM James Wang James.Wang@rohde-schwarz.com wrote:
Hi Simon,
This is James and am working on u-boot to bring back MinGW tool chain for cross compiling host tools for Windows on Linux. After complete the code, I plan to generate a patch for community review.
Do you mean cross compiling U-Boot's mkimage tool for Windows on Linux using gcc-mingw-w64? Do you want to support building U-Boot on Windows as well?
During work, I face an compiling error in file <arch/x86/include/asm/byteorder.h> with macro CONFIG_IS_ENABLED. After some background study, seems this macro should not be available when compiling host tools.
After check history, it’s from 909780506773a9b09ae88cb267dbfa6a8d0caa7b on 2017-01-16 22:04:04, Below is the log message
x86: Fix up byteorder.h for x86_64
Remove the very old x86 code and add support for 64-bit. Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng bmeng.cn@gmail.com
Below are the relevant changes.
+#define _constant_swab16(x) ((__u16)( \
(((__u16)(x) & (__u16)0x00ffU) << 8) | \
(((__u16)(x) & (__u16)0xff00U) >> 8)))
static __inline__ __u16 ___arch__swab16(__u16 x)
{
+#if CONFIG_IS_ENABLED(X86_64)
return _constant_swab16(x);
+#else
__asm__("xchgb %b0,%h0" /* swap bytes */ \ : "=q" (x) \ : "0" (x)); \ return x;
+#endif
}
I am not familiar with x86 instructions and not understand the purpose of this change, is it because instruction “xchgb” not available on 64-bit architecture or something else?
I can't remember the details of why Simon changed this. xchgb is available in 64-bit. We probably need revert this change, Simon?
For chromebook_link64 I get:
output: '/usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h: Assembler messages: /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h:22: Error: register type mismatch for `xchg' make[2]: *** [/usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/scripts/Makefile.build:278: net/tftp.o] Error 1 make[2]: *** Waiting for unfinished jobs.... /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/net/net.c: In function 'net_process_received_packet': /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/net/net.c:1324:1: error: extended registers have no high halves } ^ /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h: Assembler messages: /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h:22: Error: register type mismatch for `xchg' /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h:22: Error: register type mismatch for `xchg' /usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/arch/x86/include/asm/byteorder.h:22: Error: register type mismatch for `xchg' make[2]: *** [/usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/scripts/Makefile.build:278: net/net.o] Error 1 make[1]: *** [/usr/local/google/home/sjg/cosarm/src/third_party/u-boot/files/Makefile:1588: net] Error 2 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:148: sub-make] Error 2
Perhaps there is another way to fix this?
Regards, Simon