Patchwork bswap: improve gluing

login
register
mail settings
Submitter Blue Swirl
Date Jan. 13, 2013, 4:35 p.m.
Message ID <1309ac93ff943931eb213dd87cd3570910b23926.1358094930.git.blauwirbel@gmail.com>
Download mbox | patch
Permalink /patch/211639/
State New
Headers show

Comments

Blue Swirl - Jan. 13, 2013, 4:35 p.m.
OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
of macro arguments in macro functions:
  CC    aes.o
In file included from /src/qemu/include/qemu-common.h:126,
                 from /src/qemu/aes.c:30:
/src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
/src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
/src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'

Function leul_to_cpu() is only used in kvm-all.c, so the warnings
are not fatal on OpenBSD without -Werror.

Fix by applying glue(). Also add do {} while(0) wrapping and fix
semicolon use while at it.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
---
 include/qemu/bswap.h |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)
Richard Henderson - Jan. 14, 2013, 3:15 p.m.
On 2013-01-13 08:35, Blue Swirl wrote:
> Fix by applying glue(). Also add do {} while(0) wrapping and fix
> semicolon use while at it.
>
> Signed-off-by: Blue Swirl<blauwirbel@gmail.com>
> ---
>   include/qemu/bswap.h |   20 ++++++++++----------
>   1 files changed, 10 insertions(+), 10 deletions(-)

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~
Andreas Färber - Jan. 15, 2013, 4:25 a.m.
Am 13.01.2013 17:35, schrieb Blue Swirl:
> OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
> of macro arguments in macro functions:
>   CC    aes.o
> In file included from /src/qemu/include/qemu-common.h:126,
>                  from /src/qemu/aes.c:30:
> /src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
> /src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
> /src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'
> 
> Function leul_to_cpu() is only used in kvm-all.c, so the warnings
> are not fatal on OpenBSD without -Werror.
> 
> Fix by applying glue(). Also add do {} while(0) wrapping and fix
> semicolon use while at it.
> 
> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

Tested-by: Andreas Färber <afaerber@suse.de>

This unbreaks the build on openSUSE 12.2 ppc64:
gcc (SUSE Linux) 4.7.1 20120723 [gcc-4_7-branch revision 189773]

Andreas
David Gibson - Jan. 17, 2013, 1:11 a.m.
On Sun, Jan 13, 2013 at 04:35:41PM +0000, Blue Swirl wrote:
> OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
> of macro arguments in macro functions:
>   CC    aes.o
> In file included from /src/qemu/include/qemu-common.h:126,
>                  from /src/qemu/aes.c:30:
> /src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
> /src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
> /src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'
> 
> Function leul_to_cpu() is only used in kvm-all.c, so the warnings
> are not fatal on OpenBSD without -Werror.
> 
> Fix by applying glue(). Also add do {} while(0) wrapping and fix
> semicolon use while at it.
> 
> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

Reviewed-by: David Gibson <david@gibson.dropbear.id.au>

In fact, this is not merely an improvement, and not OpenBSD specific.
This is a vital bugfix for all big-endian hosts.

Please apply.
Markus Armbruster - Jan. 17, 2013, 7:50 a.m.
David Gibson <david@gibson.dropbear.id.au> writes:

> On Sun, Jan 13, 2013 at 04:35:41PM +0000, Blue Swirl wrote:
>> OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
>> of macro arguments in macro functions:
>>   CC    aes.o
>> In file included from /src/qemu/include/qemu-common.h:126,
>>                  from /src/qemu/aes.c:30:
>> /src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
>> /src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
>> /src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'
>> 
>> Function leul_to_cpu() is only used in kvm-all.c, so the warnings
>> are not fatal on OpenBSD without -Werror.
>> 
>> Fix by applying glue(). Also add do {} while(0) wrapping and fix
>> semicolon use while at it.
>> 
>> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
>
> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>
> In fact, this is not merely an improvement, and not OpenBSD specific.
> This is a vital bugfix for all big-endian hosts.
>
> Please apply.

Suggest to reword the commit message accordingly then.
Alexander Graf - Jan. 18, 2013, 4:31 p.m.
On 17.01.2013, at 08:50, Markus Armbruster wrote:

> David Gibson <david@gibson.dropbear.id.au> writes:
> 
>> On Sun, Jan 13, 2013 at 04:35:41PM +0000, Blue Swirl wrote:
>>> OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
>>> of macro arguments in macro functions:
>>>  CC    aes.o
>>> In file included from /src/qemu/include/qemu-common.h:126,
>>>                 from /src/qemu/aes.c:30:
>>> /src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
>>> /src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
>>> /src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'
>>> 
>>> Function leul_to_cpu() is only used in kvm-all.c, so the warnings
>>> are not fatal on OpenBSD without -Werror.
>>> 
>>> Fix by applying glue(). Also add do {} while(0) wrapping and fix
>>> semicolon use while at it.
>>> 
>>> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
>> 
>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>> 
>> In fact, this is not merely an improvement, and not OpenBSD specific.
>> This is a vital bugfix for all big-endian hosts.
>> 
>> Please apply.
> 
> Suggest to reword the commit message accordingly then.

I don't care about the commit message, just get this patch in ASAP please. The current tree is broken on s390 and ppc.


Alex
Markus Armbruster - Jan. 18, 2013, 5:03 p.m.
Alexander Graf <agraf@suse.de> writes:

> On 17.01.2013, at 08:50, Markus Armbruster wrote:
>
>> David Gibson <david@gibson.dropbear.id.au> writes:
>> 
>>> On Sun, Jan 13, 2013 at 04:35:41PM +0000, Blue Swirl wrote:
>>>> OpenBSD system compiler (gcc 4.2.1) has problems with concatenation
>>>> of macro arguments in macro functions:
>>>>  CC    aes.o
>>>> In file included from /src/qemu/include/qemu-common.h:126,
>>>>                 from /src/qemu/aes.c:30:
>>>> /src/qemu/include/qemu/bswap.h: In function 'leul_to_cpu':
>>>> /src/qemu/include/qemu/bswap.h:461: warning: implicit declaration of function 'bswapHOST_LONG_BITS'
>>>> /src/qemu/include/qemu/bswap.h:461: warning: nested extern declaration of 'bswapHOST_LONG_BITS'
>>>> 
>>>> Function leul_to_cpu() is only used in kvm-all.c, so the warnings
>>>> are not fatal on OpenBSD without -Werror.
>>>> 
>>>> Fix by applying glue(). Also add do {} while(0) wrapping and fix
>>>> semicolon use while at it.
>>>> 
>>>> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
>>> 
>>> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
>>> 
>>> In fact, this is not merely an improvement, and not OpenBSD specific.
>>> This is a vital bugfix for all big-endian hosts.
>>> 
>>> Please apply.
>> 
>> Suggest to reword the commit message accordingly then.
>
> I don't care about the commit message, just get this patch in ASAP
> please. The current tree is broken on s390 and ppc.

I think Blue's perfectly capable to amend this commit message without
noticeable loss in commit speed.
Anthony Liguori - Jan. 20, 2013, 8:53 p.m.
Applied.  Thanks.

Regards,

Anthony Liguori

Patch

diff --git a/include/qemu/bswap.h b/include/qemu/bswap.h
index be9b035..e6d4798 100644
--- a/include/qemu/bswap.h
+++ b/include/qemu/bswap.h
@@ -72,45 +72,45 @@  static inline void bswap64s(uint64_t *s)
 
 #if defined(HOST_WORDS_BIGENDIAN)
 #define be_bswap(v, size) (v)
-#define le_bswap(v, size) bswap ## size(v)
+#define le_bswap(v, size) glue(bswap, size)(v)
 #define be_bswaps(v, size)
-#define le_bswaps(p, size) *p = bswap ## size(*p);
+#define le_bswaps(p, size) do { *p = glue(bswap, size)(*p); } while(0)
 #else
 #define le_bswap(v, size) (v)
-#define be_bswap(v, size) bswap ## size(v)
+#define be_bswap(v, size) glue(bswap, size)(v)
 #define le_bswaps(v, size)
-#define be_bswaps(p, size) *p = bswap ## size(*p);
+#define be_bswaps(p, size) do { *p = glue(bswap, size)(*p); } while(0)
 #endif
 
 #define CPU_CONVERT(endian, size, type)\
 static inline type endian ## size ## _to_cpu(type v)\
 {\
-    return endian ## _bswap(v, size);\
+    return glue(endian, _bswap)(v, size);\
 }\
 \
 static inline type cpu_to_ ## endian ## size(type v)\
 {\
-    return endian ## _bswap(v, size);\
+    return glue(endian, _bswap)(v, size);\
 }\
 \
 static inline void endian ## size ## _to_cpus(type *p)\
 {\
-    endian ## _bswaps(p, size)\
+    glue(endian, _bswaps)(p, size);\
 }\
 \
 static inline void cpu_to_ ## endian ## size ## s(type *p)\
 {\
-    endian ## _bswaps(p, size)\
+    glue(endian, _bswaps)(p, size);\
 }\
 \
 static inline type endian ## size ## _to_cpup(const type *p)\
 {\
-    return endian ## size ## _to_cpu(*p);\
+    return glue(glue(endian, size), _to_cpu)(*p);\
 }\
 \
 static inline void cpu_to_ ## endian ## size ## w(type *p, type v)\
 {\
-     *p = cpu_to_ ## endian ## size(v);\
+    *p = glue(glue(cpu_to_, endian), size)(v);\
 }
 
 CPU_CONVERT(be, 16, uint16_t)