From: Michael Brown Date: Sun, 4 Mar 2012 21:09:40 +0000 (+0000) Subject: [i386] Fix building on older versions of gcc X-Git-Tag: v1.20.1~1974 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e187de72398a995658d22b583c278532c3f99aa7;p=thirdparty%2Fipxe.git [i386] Fix building on older versions of gcc Fix a strict-aliasing error on certain versions of gcc. Reported-by: Marko Myllynen Signed-off-by: Michael Brown --- diff --git a/src/arch/i386/include/bits/byteswap.h b/src/arch/i386/include/bits/byteswap.h index 381e695fb..d40771354 100644 --- a/src/arch/i386/include/bits/byteswap.h +++ b/src/arch/i386/include/bits/byteswap.h @@ -52,7 +52,10 @@ __bswap_variable_64 ( uint64_t x ) { static inline __attribute__ (( always_inline )) void __bswap_64s ( uint64_t *x ) { - uint32_t __attribute__ (( may_alias )) *dwords = ( ( void * ) x ); + struct { + uint32_t low; + uint32_t high; + } __attribute__ (( may_alias )) *dwords = ( ( void * ) x ); uint32_t discard; __asm__ ( "movl %0,%2\n\t" @@ -60,8 +63,9 @@ __bswap_64s ( uint64_t *x ) { "xchgl %2,%1\n\t" "bswapl %2\n\t" "movl %2,%0\n\t" - : "=g" ( dwords[0] ), "=g" ( dwords[1] ), "=r" ( discard ) - : "0" ( dwords[0] ), "1" ( dwords[1] ) ); + : "=g" ( dwords->low ), "=g" ( dwords->high ), + "=r" ( discard ) + : "0" ( dwords->low ), "1" ( dwords->high ) ); } #endif /* _BITS_BYTESWAP_H */