* [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
@ 2017-01-19 21:07 Michael S. Tsirkin
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
` (6 more replies)
0 siblings, 7 replies; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 21:07 UTC (permalink / raw)
To: qemu-devel
Turns out virtio kept using ARRAY_SIZE on fields which stopped
being arrays, this was noticed by a coverity scan.
I fixed this up, this patchset fixes up the ARRAY_SIZE macro so that this
bug does not reappear in any other place.
changes from v2:
- dropped the merged virtio patch
- whitespace changes
- rewrote BUG_ON macros from an array to a struct for portability
Michael S. Tsirkin (4):
compiler: drop ; after BUILD_BUG_ON
compiler: rework BUG_ON using a struct
compiler: expression version of QEMU_BUILD_BUG_ON
ARRAY_SIZE: check that argument is an array
include/qemu/compiler.h | 11 +++++++++--
include/qemu/osdep.h | 9 ++++++++-
2 files changed, 17 insertions(+), 3 deletions(-)
--
MST
^ permalink raw reply [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
@ 2017-01-19 21:07 ` Michael S. Tsirkin
2017-01-19 21:22 ` Eric Blake
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
` (5 subsequent siblings)
6 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 21:07 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Paolo Bonzini, Eric Blake, Richard Henderson
All users include the trailing ; anyway, let's require that -
it seems cleaner.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/qemu/compiler.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index 157698b..7512082 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -86,7 +86,8 @@
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
#define QEMU_BUILD_BUG_ON(x) \
- typedef char glue(qemu_build_bug_on__,__LINE__)[(x)?-1:1] __attribute__((unused));
+ typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
+ __attribute__((unused))
#if defined __GNUC__
# if !QEMU_GNUC_PREREQ(4, 4)
--
MST
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
@ 2017-01-19 21:07 ` Michael S. Tsirkin
2017-01-19 21:26 ` Eric Blake
` (2 more replies)
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON Michael S. Tsirkin
` (4 subsequent siblings)
6 siblings, 3 replies; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 21:07 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Eric Blake, Paolo Bonzini, Richard Henderson
There are theoretical concerns that some compilers might not trigger
build failures on attempts to define an array of size -1 and make it a
variable sized array instead. Let rewrite using a struct with a negative
bit field size instead as there are no dynamic bit field sizes. This is
similar to what Linux does.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/qemu/compiler.h | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index 7512082..c6f673e 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -85,9 +85,12 @@
#define typeof_field(type, field) typeof(((type *)0)->field)
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
-#define QEMU_BUILD_BUG_ON(x) \
- typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
- __attribute__((unused))
+#define QEMU_BUILD_BUG_ON_STRUCT(x) \
+ struct { \
+ int qemu_build_bug_on : (x) ? -1 : 1; \
+ }
+#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
+ glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
#if defined __GNUC__
# if !QEMU_GNUC_PREREQ(4, 4)
--
MST
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
@ 2017-01-19 21:07 ` Michael S. Tsirkin
2017-01-19 21:28 ` Eric Blake
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array Michael S. Tsirkin
` (3 subsequent siblings)
6 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 21:07 UTC (permalink / raw)
To: qemu-devel; +Cc: Peter Maydell, Paolo Bonzini, Eric Blake, Richard Henderson
QEMU_BUILD_BUG_ON uses a typedef in order to be safe
to use outside functions, but sometimes it's useful
to have a version that can be used within an expression.
Following what Linux does, introduce QEMU_BUILD_BUG_ON_ZERO
that return zero after checking condition at build time.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
include/qemu/compiler.h | 3 +++
1 file changed, 3 insertions(+)
diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
index c6f673e..8271eab 100644
--- a/include/qemu/compiler.h
+++ b/include/qemu/compiler.h
@@ -92,6 +92,9 @@
#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
+#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
+ sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
+
#if defined __GNUC__
# if !QEMU_GNUC_PREREQ(4, 4)
/* gcc versions before 4.4.x don't support gnu_printf, so use printf. */
--
MST
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
` (2 preceding siblings ...)
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON Michael S. Tsirkin
@ 2017-01-19 21:07 ` Michael S. Tsirkin
2017-01-19 21:59 ` Eric Blake
2017-01-20 7:45 ` [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Markus Armbruster
` (2 subsequent siblings)
6 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 21:07 UTC (permalink / raw)
To: qemu-devel
Cc: Markus Armbruster, Paolo Bonzini, Eric Blake, Peter Maydell,
Sergey Fedorov
It's a familiar pattern: some code uses ARRAY_SIZE, then refactoring
changes the argument from an array to a pointer to a dynamically
allocated buffer. Code keeps compiling but any ARRAY_SIZE calls now
return the size of the pointer divided by element size.
Let's add build time checks to ARRAY_SIZE before we allow more
of these in the code-base.
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
---
include/qemu/osdep.h | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
index 689f253..56c9e22 100644
--- a/include/qemu/osdep.h
+++ b/include/qemu/osdep.h
@@ -198,8 +198,15 @@ extern int daemon(int, int);
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#endif
+/*
+ * &(x)[0] is always a pointer - if it's same type as x then the argument is a
+ * pointer, not an array.
+ */
+#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
+ typeof(&(x)[0])))
#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
+ QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
#endif
int qemu_daemon(int nochdir, int noclose);
--
MST
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
@ 2017-01-19 21:22 ` Eric Blake
0 siblings, 0 replies; 25+ messages in thread
From: Eric Blake @ 2017-01-19 21:22 UTC (permalink / raw)
To: Michael S. Tsirkin, qemu-devel
Cc: Peter Maydell, Paolo Bonzini, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 994 bytes --]
On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
> All users include the trailing ; anyway, let's require that -
> it seems cleaner.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/qemu/compiler.h | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
>
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index 157698b..7512082 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -86,7 +86,8 @@
> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
>
> #define QEMU_BUILD_BUG_ON(x) \
> - typedef char glue(qemu_build_bug_on__,__LINE__)[(x)?-1:1] __attribute__((unused));
> + typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> + __attribute__((unused))
>
> #if defined __GNUC__
> # if !QEMU_GNUC_PREREQ(4, 4)
>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
@ 2017-01-19 21:26 ` Eric Blake
2017-01-20 7:44 ` Markus Armbruster
2017-01-20 7:42 ` Markus Armbruster
2017-01-20 9:41 ` Dr. David Alan Gilbert
2 siblings, 1 reply; 25+ messages in thread
From: Eric Blake @ 2017-01-19 21:26 UTC (permalink / raw)
To: Michael S. Tsirkin, qemu-devel
Cc: Peter Maydell, Paolo Bonzini, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 1036 bytes --]
On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
> There are theoretical concerns that some compilers might not trigger
> build failures on attempts to define an array of size -1 and make it a
> variable sized array instead.
Rather, the concern is that if someone changes code so that the 'x' of
QEMU_BUILD_BUG_ON(x) is no longer a compile time constant, we want a
compile-time failure rather than a runtime variable-sized array that may
or may not crash.
> Let rewrite using a struct with a negative
> bit field size instead as there are no dynamic bit field sizes. This is
> similar to what Linux does.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/qemu/compiler.h | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
I don't know if you want to tweak the commit wording, but I'm okay with
the patch itself.
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON Michael S. Tsirkin
@ 2017-01-19 21:28 ` Eric Blake
0 siblings, 0 replies; 25+ messages in thread
From: Eric Blake @ 2017-01-19 21:28 UTC (permalink / raw)
To: Michael S. Tsirkin, qemu-devel
Cc: Peter Maydell, Paolo Bonzini, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 1271 bytes --]
On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
> QEMU_BUILD_BUG_ON uses a typedef in order to be safe
> to use outside functions, but sometimes it's useful
> to have a version that can be used within an expression.
> Following what Linux does, introduce QEMU_BUILD_BUG_ON_ZERO
> that return zero after checking condition at build time.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/qemu/compiler.h | 3 +++
> 1 file changed, 3 insertions(+)
Reviewed-by: Eric Blake <eblake@redhat.com>
>
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index c6f673e..8271eab 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -92,6 +92,9 @@
> #define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
> glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
>
> +#define QEMU_BUILD_BUG_ON_ZERO(x) (sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)) - \
> + sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
Although this should be equally effective, with less typing:
#define QEMU_BUILD_BUG_ON_ZERO(x) (!sizeof(QEMU_BUILD_BUG_ON_STRUCT(x)))
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array Michael S. Tsirkin
@ 2017-01-19 21:59 ` Eric Blake
2017-01-19 22:11 ` Michael S. Tsirkin
0 siblings, 1 reply; 25+ messages in thread
From: Eric Blake @ 2017-01-19 21:59 UTC (permalink / raw)
To: Michael S. Tsirkin, qemu-devel
Cc: Markus Armbruster, Paolo Bonzini, Peter Maydell, Sergey Fedorov
[-- Attachment #1: Type: text/plain, Size: 2055 bytes --]
On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
> It's a familiar pattern: some code uses ARRAY_SIZE, then refactoring
> changes the argument from an array to a pointer to a dynamically
> allocated buffer. Code keeps compiling but any ARRAY_SIZE calls now
> return the size of the pointer divided by element size.
>
> Let's add build time checks to ARRAY_SIZE before we allow more
> of these in the code-base.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Markus Armbruster <armbru@redhat.com>
> ---
> include/qemu/osdep.h | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
Reviewed-by: Eric Blake <eblake@redhat.com>
>
> diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> index 689f253..56c9e22 100644
> --- a/include/qemu/osdep.h
> +++ b/include/qemu/osdep.h
> @@ -198,8 +198,15 @@ extern int daemon(int, int);
> #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> #endif
>
> +/*
> + * &(x)[0] is always a pointer - if it's same type as x then the argument is a
> + * pointer, not an array.
> + */
> +#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
> + typeof(&(x)[0])))
> #ifndef ARRAY_SIZE
> -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> +#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
> + QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
We've got some double-negation going on here ("cause a build bug if the
negation of QEMU_IS_ARRAY() is not 0") which takes some mental
gymnastics, but it is the correct result. [I kind of like that gnulib
uses positive logic in its 'verify(x)' meaning "verify that x is true,
or cause a build error"; compared to the negative logic in the kernal
'BUILD_BUG_ON[_ZERO](x)' meaning "cause a build bug if x is non-zero" -
but that's personal preference and not something for qemu to change]
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-19 21:59 ` Eric Blake
@ 2017-01-19 22:11 ` Michael S. Tsirkin
2017-01-19 23:00 ` Eric Blake
0 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-19 22:11 UTC (permalink / raw)
To: Eric Blake
Cc: qemu-devel, Markus Armbruster, Paolo Bonzini, Peter Maydell,
Sergey Fedorov
On Thu, Jan 19, 2017 at 03:59:33PM -0600, Eric Blake wrote:
> On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
> > It's a familiar pattern: some code uses ARRAY_SIZE, then refactoring
> > changes the argument from an array to a pointer to a dynamically
> > allocated buffer. Code keeps compiling but any ARRAY_SIZE calls now
> > return the size of the pointer divided by element size.
> >
> > Let's add build time checks to ARRAY_SIZE before we allow more
> > of these in the code-base.
> >
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > Reviewed-by: Markus Armbruster <armbru@redhat.com>
> > ---
> > include/qemu/osdep.h | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
>
> Reviewed-by: Eric Blake <eblake@redhat.com>
>
> >
> > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h
> > index 689f253..56c9e22 100644
> > --- a/include/qemu/osdep.h
> > +++ b/include/qemu/osdep.h
> > @@ -198,8 +198,15 @@ extern int daemon(int, int);
> > #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
> > #endif
> >
> > +/*
> > + * &(x)[0] is always a pointer - if it's same type as x then the argument is a
> > + * pointer, not an array.
> > + */
> > +#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
> > + typeof(&(x)[0])))
> > #ifndef ARRAY_SIZE
> > -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
> > +#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
> > + QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
>
> We've got some double-negation going on here ("cause a build bug if the
> negation of QEMU_IS_ARRAY() is not 0") which takes some mental
> gymnastics, but it is the correct result. [I kind of like that gnulib
> uses positive logic in its 'verify(x)' meaning "verify that x is true,
> or cause a build error"; compared to the negative logic in the kernal
> 'BUILD_BUG_ON[_ZERO](x)' meaning "cause a build bug if x is non-zero" -
> but that's personal preference and not something for qemu to change]
I can rename QEMU_IS_ARRAY to QEMU_IS_PTR and reverse the logic - would
this be preferable?
--
MST
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-19 22:11 ` Michael S. Tsirkin
@ 2017-01-19 23:00 ` Eric Blake
2017-01-20 7:34 ` Markus Armbruster
0 siblings, 1 reply; 25+ messages in thread
From: Eric Blake @ 2017-01-19 23:00 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: qemu-devel, Markus Armbruster, Paolo Bonzini, Peter Maydell,
Sergey Fedorov
[-- Attachment #1: Type: text/plain, Size: 1858 bytes --]
On 01/19/2017 04:11 PM, Michael S. Tsirkin wrote:
>>> +#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
>>> + typeof(&(x)[0])))
>>> #ifndef ARRAY_SIZE
>>> -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
>>> +#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
>>> + QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
>>
>> We've got some double-negation going on here ("cause a build bug if the
>> negation of QEMU_IS_ARRAY() is not 0") which takes some mental
>> gymnastics, but it is the correct result. [I kind of like that gnulib
>> uses positive logic in its 'verify(x)' meaning "verify that x is true,
>> or cause a build error"; compared to the negative logic in the kernal
>> 'BUILD_BUG_ON[_ZERO](x)' meaning "cause a build bug if x is non-zero" -
>> but that's personal preference and not something for qemu to change]
>
> I can rename QEMU_IS_ARRAY to QEMU_IS_PTR and reverse the logic - would
> this be preferable?
No, that's worse. As written, "cause a build bug if x is not an array"
is easier than "cause a build bug if x is a pointer", because now you
are missing an implicit "(instead of the intended array)". Keep it the
way you have it. I guess it's the _ZERO as a suffix that's throwing me;
a better name might have been QEMU_ZERO_OR_BUILD_BUG_ON(x) ("give me a
zero expression, or a build bug if x is non-zero") rather than
QEMU_BUILD_BUG_ON_ZERO (my first read was "give me a build bug if x is
zero", but a better read is "give me a build bug if x is not zero, else
give me x because it is zero") - but our choice of naming in patch 3/4
mirrors the kernel naming, so it's not worth changing.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-19 23:00 ` Eric Blake
@ 2017-01-20 7:34 ` Markus Armbruster
2017-01-20 12:20 ` Paolo Bonzini
0 siblings, 1 reply; 25+ messages in thread
From: Markus Armbruster @ 2017-01-20 7:34 UTC (permalink / raw)
To: Eric Blake
Cc: Michael S. Tsirkin, Peter Maydell, Paolo Bonzini, Sergey Fedorov,
qemu-devel
Eric Blake <eblake@redhat.com> writes:
> On 01/19/2017 04:11 PM, Michael S. Tsirkin wrote:
>
>>>> +#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
>>>> + typeof(&(x)[0])))
>>>> #ifndef ARRAY_SIZE
>>>> -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
>>>> +#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
>>>> + QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
>>>
>>> We've got some double-negation going on here ("cause a build bug if the
>>> negation of QEMU_IS_ARRAY() is not 0") which takes some mental
>>> gymnastics, but it is the correct result. [I kind of like that gnulib
>>> uses positive logic in its 'verify(x)' meaning "verify that x is true,
>>> or cause a build error"; compared to the negative logic in the kernal
>>> 'BUILD_BUG_ON[_ZERO](x)' meaning "cause a build bug if x is non-zero" -
>>> but that's personal preference and not something for qemu to change]
>>
>> I can rename QEMU_IS_ARRAY to QEMU_IS_PTR and reverse the logic - would
>> this be preferable?
>
> No, that's worse. As written, "cause a build bug if x is not an array"
> is easier than "cause a build bug if x is a pointer", because now you
> are missing an implicit "(instead of the intended array)". Keep it the
> way you have it. I guess it's the _ZERO as a suffix that's throwing me;
> a better name might have been QEMU_ZERO_OR_BUILD_BUG_ON(x) ("give me a
> zero expression, or a build bug if x is non-zero") rather than
> QEMU_BUILD_BUG_ON_ZERO (my first read was "give me a build bug if x is
> zero", but a better read is "give me a build bug if x is not zero, else
> give me x because it is zero") - but our choice of naming in patch 3/4
> mirrors the kernel naming, so it's not worth changing.
Two ways to skin the assertion cat:
assert must_be_true
bug_on must_be_false
The C language picks the first one, both with assert() and with C11's
_Static_assert(). I'd prefer we stick to that, but I'm not asking you
to change your series.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
2017-01-19 21:26 ` Eric Blake
@ 2017-01-20 7:42 ` Markus Armbruster
2017-01-20 16:57 ` Michael S. Tsirkin
2017-01-20 9:41 ` Dr. David Alan Gilbert
2 siblings, 1 reply; 25+ messages in thread
From: Markus Armbruster @ 2017-01-20 7:42 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: qemu-devel, Peter Maydell, Richard Henderson, Paolo Bonzini
"Michael S. Tsirkin" <mst@redhat.com> writes:
> There are theoretical concerns that some compilers might not trigger
> build failures on attempts to define an array of size -1 and make it a
> variable sized array instead. Let rewrite using a struct with a negative
> bit field size instead as there are no dynamic bit field sizes. This is
> similar to what Linux does.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/qemu/compiler.h | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index 7512082..c6f673e 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -85,9 +85,12 @@
> #define typeof_field(type, field) typeof(((type *)0)->field)
> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
>
> -#define QEMU_BUILD_BUG_ON(x) \
> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> - __attribute__((unused))
> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
> + struct { \
> + int qemu_build_bug_on : (x) ? -1 : 1; \
> + }
The qemu_build_bug_on name space pollution is harmless, but quite
unnecessary: the name can be simply omitted (unnamed bit-field).
> +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
> + glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
>
> #if defined __GNUC__
> # if !QEMU_GNUC_PREREQ(4, 4)
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-19 21:26 ` Eric Blake
@ 2017-01-20 7:44 ` Markus Armbruster
0 siblings, 0 replies; 25+ messages in thread
From: Markus Armbruster @ 2017-01-20 7:44 UTC (permalink / raw)
To: Eric Blake
Cc: Michael S. Tsirkin, qemu-devel, Peter Maydell, Richard Henderson,
Paolo Bonzini
Eric Blake <eblake@redhat.com> writes:
> On 01/19/2017 03:07 PM, Michael S. Tsirkin wrote:
>> There are theoretical concerns that some compilers might not trigger
>> build failures on attempts to define an array of size -1 and make it a
>> variable sized array instead.
>
> Rather, the concern is that if someone changes code so that the 'x' of
> QEMU_BUILD_BUG_ON(x) is no longer a compile time constant, we want a
> compile-time failure rather than a runtime variable-sized array that may
> or may not crash.
>> Let rewrite using a struct with a negative
>> bit field size instead as there are no dynamic bit field sizes. This is
>> similar to what Linux does.
>>
>> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>> ---
>> include/qemu/compiler.h | 9 ++++++---
>> 1 file changed, 6 insertions(+), 3 deletions(-)
>>
>
> I don't know if you want to tweak the commit wording, but I'm okay with
> the patch itself.
For what it's worth, I'd prefer a rewording.
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
` (3 preceding siblings ...)
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array Michael S. Tsirkin
@ 2017-01-20 7:45 ` Markus Armbruster
2017-01-20 14:57 ` no-reply
2017-01-20 15:15 ` no-reply
6 siblings, 0 replies; 25+ messages in thread
From: Markus Armbruster @ 2017-01-20 7:45 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: qemu-devel
"Michael S. Tsirkin" <mst@redhat.com> writes:
> Turns out virtio kept using ARRAY_SIZE on fields which stopped
> being arrays, this was noticed by a coverity scan.
> I fixed this up, this patchset fixes up the ARRAY_SIZE macro so that this
> bug does not reappear in any other place.
Preferably with the tweaks I asked for, series
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Thanks again for squashing the bug pattern, and not just the bug!
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
2017-01-19 21:26 ` Eric Blake
2017-01-20 7:42 ` Markus Armbruster
@ 2017-01-20 9:41 ` Dr. David Alan Gilbert
2017-01-20 14:36 ` Eric Blake
2 siblings, 1 reply; 25+ messages in thread
From: Dr. David Alan Gilbert @ 2017-01-20 9:41 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: qemu-devel, Peter Maydell, Richard Henderson, Paolo Bonzini
* Michael S. Tsirkin (mst@redhat.com) wrote:
> There are theoretical concerns that some compilers might not trigger
> build failures on attempts to define an array of size -1 and make it a
> variable sized array instead. Let rewrite using a struct with a negative
> bit field size instead as there are no dynamic bit field sizes. This is
> similar to what Linux does.
>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> include/qemu/compiler.h | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> index 7512082..c6f673e 100644
> --- a/include/qemu/compiler.h
> +++ b/include/qemu/compiler.h
> @@ -85,9 +85,12 @@
> #define typeof_field(type, field) typeof(((type *)0)->field)
> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
>
> -#define QEMU_BUILD_BUG_ON(x) \
> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> - __attribute__((unused))
> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
> + struct { \
> + int qemu_build_bug_on : (x) ? -1 : 1; \
> + }
The problem with this is it can't be used as an expression, where as
your previous version could.
I've got a similar case (see previous reply) that needed an expression
bug-on that would evaluate to zero.
Dave
> +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
> + glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
>
> #if defined __GNUC__
> # if !QEMU_GNUC_PREREQ(4, 4)
> --
> MST
>
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array
2017-01-20 7:34 ` Markus Armbruster
@ 2017-01-20 12:20 ` Paolo Bonzini
0 siblings, 0 replies; 25+ messages in thread
From: Paolo Bonzini @ 2017-01-20 12:20 UTC (permalink / raw)
To: Markus Armbruster, Eric Blake
Cc: Michael S. Tsirkin, Peter Maydell, Sergey Fedorov, qemu-devel
On 20/01/2017 08:34, Markus Armbruster wrote:
> Eric Blake <eblake@redhat.com> writes:
>
>> On 01/19/2017 04:11 PM, Michael S. Tsirkin wrote:
>>
>>>>> +#define QEMU_IS_ARRAY(x) (!__builtin_types_compatible_p(typeof(x), \
>>>>> + typeof(&(x)[0])))
>>>>> #ifndef ARRAY_SIZE
>>>>> -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
>>>>> +#define ARRAY_SIZE(x) ((sizeof(x) / sizeof((x)[0])) + \
>>>>> + QEMU_BUILD_BUG_ON_ZERO(!QEMU_IS_ARRAY(x)))
>>>>
>>>> We've got some double-negation going on here ("cause a build bug if the
>>>> negation of QEMU_IS_ARRAY() is not 0") which takes some mental
>>>> gymnastics, but it is the correct result. [I kind of like that gnulib
>>>> uses positive logic in its 'verify(x)' meaning "verify that x is true,
>>>> or cause a build error"; compared to the negative logic in the kernal
>>>> 'BUILD_BUG_ON[_ZERO](x)' meaning "cause a build bug if x is non-zero" -
>>>> but that's personal preference and not something for qemu to change]
>>>
>>> I can rename QEMU_IS_ARRAY to QEMU_IS_PTR and reverse the logic - would
>>> this be preferable?
>>
>> No, that's worse. As written, "cause a build bug if x is not an array"
>> is easier than "cause a build bug if x is a pointer", because now you
>> are missing an implicit "(instead of the intended array)". Keep it the
>> way you have it. I guess it's the _ZERO as a suffix that's throwing me;
>> a better name might have been QEMU_ZERO_OR_BUILD_BUG_ON(x) ("give me a
>> zero expression, or a build bug if x is non-zero") rather than
>> QEMU_BUILD_BUG_ON_ZERO (my first read was "give me a build bug if x is
>> zero", but a better read is "give me a build bug if x is not zero, else
>> give me x because it is zero") - but our choice of naming in patch 3/4
>> mirrors the kernel naming, so it's not worth changing.
>
> Two ways to skin the assertion cat:
>
> assert must_be_true
> bug_on must_be_false
>
> The C language picks the first one, both with assert() and with C11's
> _Static_assert(). I'd prefer we stick to that, but I'm not asking you
> to change your series.
We should probably change it to QEMU_STATIC_ASSERT and
QEMU_STATIC_ASSERT_VALUE, but that shouldn't be in this series.
Paolo
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 9:41 ` Dr. David Alan Gilbert
@ 2017-01-20 14:36 ` Eric Blake
2017-01-20 14:53 ` Dr. David Alan Gilbert
0 siblings, 1 reply; 25+ messages in thread
From: Eric Blake @ 2017-01-20 14:36 UTC (permalink / raw)
To: Dr. David Alan Gilbert, Michael S. Tsirkin
Cc: Peter Maydell, Paolo Bonzini, qemu-devel, Richard Henderson
[-- Attachment #1: Type: text/plain, Size: 885 bytes --]
On 01/20/2017 03:41 AM, Dr. David Alan Gilbert wrote:
>> -#define QEMU_BUILD_BUG_ON(x) \
>> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
>> - __attribute__((unused))
>> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
>> + struct { \
>> + int qemu_build_bug_on : (x) ? -1 : 1; \
>> + }
>
> The problem with this is it can't be used as an expression, where as
> your previous version could.
> I've got a similar case (see previous reply) that needed an expression
> bug-on that would evaluate to zero.
Keep reading the series - the version usable in an expression is
QEMU_BUILD_BUG_ON_ZERO, introduced in 3/4. Patch 2/4 is just rewriting
the existing check, with no change in the fact that it is still a
declaration.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 14:36 ` Eric Blake
@ 2017-01-20 14:53 ` Dr. David Alan Gilbert
0 siblings, 0 replies; 25+ messages in thread
From: Dr. David Alan Gilbert @ 2017-01-20 14:53 UTC (permalink / raw)
To: Eric Blake
Cc: Michael S. Tsirkin, Peter Maydell, Paolo Bonzini, qemu-devel,
Richard Henderson
* Eric Blake (eblake@redhat.com) wrote:
> On 01/20/2017 03:41 AM, Dr. David Alan Gilbert wrote:
>
> >> -#define QEMU_BUILD_BUG_ON(x) \
> >> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> >> - __attribute__((unused))
> >> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
> >> + struct { \
> >> + int qemu_build_bug_on : (x) ? -1 : 1; \
> >> + }
> >
> > The problem with this is it can't be used as an expression, where as
> > your previous version could.
> > I've got a similar case (see previous reply) that needed an expression
> > bug-on that would evaluate to zero.
>
> Keep reading the series - the version usable in an expression is
> QEMU_BUILD_BUG_ON_ZERO, introduced in 3/4. Patch 2/4 is just rewriting
> the existing check, with no change in the fact that it is still a
> declaration.
Ah hmm, yeh that's OK.
Dave
>
> --
> Eric Blake eblake redhat com +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
` (4 preceding siblings ...)
2017-01-20 7:45 ` [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Markus Armbruster
@ 2017-01-20 14:57 ` no-reply
2017-01-20 15:15 ` no-reply
6 siblings, 0 replies; 25+ messages in thread
From: no-reply @ 2017-01-20 14:57 UTC (permalink / raw)
To: mst; +Cc: famz, qemu-devel
Hi,
Your series failed automatic build test. Please find the testing commands and
their output below. If you have docker installed, you can probably reproduce it
locally.
Subject: [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
Message-id: 1484859998-25074-1-git-send-email-mst@redhat.com
Type: series
=== TEST SCRIPT BEGIN ===
#!/bin/bash
set -e
git submodule update --init dtc
# Let docker tests dump environment info
export SHOW_ENV=1
export J=16
make docker-test-quick@centos6
make docker-test-mingw@fedora
make docker-test-build@min-glib
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
86ed4e3 ARRAY_SIZE: check that argument is an array
6c5d1ef compiler: expression version of QEMU_BUILD_BUG_ON
650275f compiler: rework BUG_ON using a struct
593e31a compiler: drop ; after BUILD_BUG_ON
=== OUTPUT BEGIN ===
Submodule 'dtc' (git://git.qemu-project.org/dtc.git) registered for path 'dtc'
Cloning into 'dtc'...
Submodule path 'dtc': checked out '65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf'
BUILD centos6
make[1]: Entering directory `/var/tmp/patchew-tester-tmp-e_4r2pmr/src'
ARCHIVE qemu.tgz
ARCHIVE dtc.tgz
COPY RUNNER
RUN test-quick in qemu:centos6
Packages installed:
SDL-devel-1.2.14-7.el6_7.1.x86_64
ccache-3.1.6-2.el6.x86_64
epel-release-6-8.noarch
gcc-4.4.7-17.el6.x86_64
git-1.7.1-4.el6_7.1.x86_64
glib2-devel-2.28.8-5.el6.x86_64
libfdt-devel-1.4.0-1.el6.x86_64
make-3.81-23.el6.x86_64
package g++ is not installed
pixman-devel-0.32.8-1.el6.x86_64
tar-1.23-15.el6_8.x86_64
zlib-devel-1.2.3-29.el6.x86_64
Environment variables:
PACKAGES=libfdt-devel ccache tar git make gcc g++ zlib-devel glib2-devel SDL-devel pixman-devel epel-release
HOSTNAME=d63268757ccb
TERM=xterm
MAKEFLAGS= -j16
HISTSIZE=1000
J=16
USER=root
CCACHE_DIR=/var/tmp/ccache
EXTRA_CONFIGURE_OPTS=
V=
SHOW_ENV=1
MAIL=/var/spool/mail/root
PATH=/usr/lib/ccache:/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
LANG=en_US.UTF-8
TARGET_LIST=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
TEST_DIR=/tmp/qemu-test
LOGNAME=root
LESSOPEN=||/usr/bin/lesspipe.sh %s
FEATURES= dtc
DEBUG=
G_BROKEN_FILENAMES=1
CCACHE_HASHDIR=
_=/usr/bin/env
Configure options:
--enable-werror --target-list=x86_64-softmmu,aarch64-softmmu --prefix=/var/tmp/qemu-build/install
No C++ compiler available; disabling C++ specific optional code
Install prefix /var/tmp/qemu-build/install
BIOS directory /var/tmp/qemu-build/install/share/qemu
binary directory /var/tmp/qemu-build/install/bin
library directory /var/tmp/qemu-build/install/lib
module directory /var/tmp/qemu-build/install/lib/qemu
libexec directory /var/tmp/qemu-build/install/libexec
include directory /var/tmp/qemu-build/install/include
config directory /var/tmp/qemu-build/install/etc
local state directory /var/tmp/qemu-build/install/var
Manual directory /var/tmp/qemu-build/install/share/man
ELF interp prefix /usr/gnemul/qemu-%M
Source path /tmp/qemu-test/src
C compiler cc
Host C compiler cc
C++ compiler
Objective-C compiler cc
ARFLAGS rv
CFLAGS -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -g
QEMU_CFLAGS -I/usr/include/pixman-1 -pthread -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -fPIE -DPIE -m64 -mcx16 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -fno-common -fwrapv -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all
LDFLAGS -Wl,--warn-common -Wl,-z,relro -Wl,-z,now -pie -m64 -g
make make
install install
python python -B
smbd /usr/sbin/smbd
module support no
host CPU x86_64
host big endian no
target list x86_64-softmmu aarch64-softmmu
tcg debug enabled no
gprof enabled no
sparse enabled no
strip binaries yes
profiler no
static build no
pixman system
SDL support yes (1.2.14)
GTK support no
GTK GL support no
VTE support no
TLS priority NORMAL
GNUTLS support no
GNUTLS rnd no
libgcrypt no
libgcrypt kdf no
nettle no
nettle kdf no
libtasn1 no
curses support no
virgl support no
curl support no
mingw32 support no
Audio drivers oss
Block whitelist (rw)
Block whitelist (ro)
VirtFS support no
VNC support yes
VNC SASL support no
VNC JPEG support no
VNC PNG support no
xen support no
brlapi support no
bluez support no
Documentation no
PIE yes
vde support no
netmap support no
Linux AIO support no
ATTR/XATTR support yes
Install blobs yes
KVM support yes
COLO support yes
RDMA support no
TCG interpreter no
fdt support yes
preadv support yes
fdatasync yes
madvise yes
posix_madvise yes
libcap-ng support no
vhost-net support yes
vhost-scsi support yes
vhost-vsock support yes
Trace backends log
spice support no
rbd support no
xfsctl support no
smartcard support no
libusb no
usb net redir no
OpenGL support no
OpenGL dmabufs no
libiscsi support no
libnfs support no
build guest agent yes
QGA VSS support no
QGA w32 disk info no
QGA MSI support no
seccomp support no
coroutine backend ucontext
coroutine pool yes
debug stack usage no
GlusterFS support no
Archipelago support no
gcov gcov
gcov enabled no
TPM support yes
libssh2 support no
TPM passthrough yes
QOM debugging yes
lzo support no
snappy support no
bzip2 support no
NUMA host support no
tcmalloc support no
jemalloc support no
avx2 optimization no
replication support yes
GEN x86_64-softmmu/config-devices.mak.tmp
GEN aarch64-softmmu/config-devices.mak.tmp
GEN config-host.h
GEN qemu-options.def
GEN qmp-commands.h
GEN qmp-introspect.h
GEN qapi-types.h
GEN qapi-visit.h
GEN qapi-event.h
GEN module_block.h
GEN tests/test-qapi-types.h
GEN tests/test-qapi-visit.h
GEN tests/test-qmp-commands.h
GEN tests/test-qapi-event.h
GEN tests/test-qmp-introspect.h
GEN trace/generated-tracers.h
GEN trace/generated-tcg-tracers.h
GEN trace/generated-helpers-wrappers.h
GEN x86_64-softmmu/config-devices.mak
GEN aarch64-softmmu/config-devices.mak
GEN trace/generated-helpers.h
GEN config-all-devices.mak
CC tests/qemu-iotests/socket_scm_helper.o
GEN qga/qapi-generated/qga-qapi-types.h
GEN qga/qapi-generated/qga-qapi-visit.h
GEN qga/qapi-generated/qga-qapi-types.c
GEN qga/qapi-generated/qga-qmp-commands.h
GEN qga/qapi-generated/qga-qapi-visit.c
GEN qga/qapi-generated/qga-qmp-marshal.c
GEN qmp-introspect.c
GEN qapi-types.c
GEN qapi-visit.c
GEN qapi-event.c
CC qapi/qapi-visit-core.o
CC qapi/qapi-dealloc-visitor.o
CC qapi/qobject-input-visitor.o
CC qapi/qobject-output-visitor.o
CC qapi/qmp-registry.o
CC qapi/qmp-dispatch.o
CC qapi/string-input-visitor.o
CC qapi/string-output-visitor.o
CC qapi/opts-visitor.o
CC qapi/qapi-clone-visitor.o
CC qapi/qmp-event.o
CC qapi/qapi-util.o
CC qobject/qnull.o
CC qobject/qint.o
CC qobject/qstring.o
CC qobject/qdict.o
CC qobject/qlist.o
CC qobject/qfloat.o
CC qobject/qbool.o
CC qobject/qjson.o
CC qobject/qobject.o
CC qobject/json-lexer.o
CC qobject/json-streamer.o
CC qobject/json-parser.o
GEN trace/generated-tracers.c
CC trace/control.o
CC trace/qmp.o
CC util/osdep.o
CC util/cutils.o
CC util/unicode.o
CC util/qemu-timer-common.o
CC util/bufferiszero.o
CC util/lockcnt.o
CC util/compatfd.o
CC util/event_notifier-posix.o
CC util/mmap-alloc.o
CC util/oslib-posix.o
CC util/qemu-openpty.o
CC util/qemu-thread-posix.o
CC util/envlist.o
CC util/memfd.o
CC util/path.o
CC util/module.o
CC util/bitmap.o
CC util/bitops.o
CC util/hbitmap.o
CC util/fifo8.o
CC util/acl.o
CC util/error.o
CC util/qemu-error.o
CC util/id.o
CC util/iov.o
CC util/qemu-config.o
CC util/qemu-sockets.o
CC util/uri.o
CC util/notify.o
CC util/qemu-option.o
CC util/hexdump.o
CC util/qemu-progress.o
CC util/crc32c.o
CC util/uuid.o
CC util/throttle.o
CC util/getauxval.o
CC util/readline.o
CC util/rcu.o
CC util/qemu-coroutine.o
CC util/qemu-coroutine-lock.o
CC util/qemu-coroutine-io.o
CC util/qemu-coroutine-sleep.o
CC util/coroutine-ucontext.o
CC util/buffer.o
CC util/timed-average.o
CC util/base64.o
CC util/log.o
CC util/qdist.o
CC util/qht.o
CC util/range.o
CC crypto/pbkdf-stub.o
CC stubs/arch-query-cpu-def.o
CC stubs/arch-query-cpu-model-expansion.o
CC stubs/arch-query-cpu-model-comparison.o
CC stubs/arch-query-cpu-model-baseline.o
CC stubs/bdrv-next-monitor-owned.o
CC stubs/blk-commit-all.o
CC stubs/blockdev-close-all-bdrv-states.o
CC stubs/clock-warp.o
CC stubs/cpu-get-clock.o
CC stubs/error-printf.o
CC stubs/cpu-get-icount.o
CC stubs/dump.o
CC stubs/fdset-add-fd.o
CC stubs/fdset-find-fd.o
CC stubs/fdset-get-fd.o
CC stubs/fdset-remove-fd.o
CC stubs/gdbstub.o
CC stubs/get-fd.o
CC stubs/get-next-serial.o
CC stubs/get-vm-name.o
CC stubs/iothread.o
CC stubs/iothread-lock.o
CC stubs/is-daemonized.o
CC stubs/machine-init-done.o
CC stubs/migr-blocker.o
CC stubs/mon-is-qmp.o
CC stubs/monitor-init.o
CC stubs/notify-event.o
CC stubs/qtest.o
CC stubs/replay-user.o
CC stubs/replay.o
CC stubs/reset.o
CC stubs/runstate-check.o
CC stubs/set-fd-handler.o
CC stubs/slirp.o
CC stubs/sysbus.o
CC stubs/trace-control.o
CC stubs/uuid.o
CC stubs/vmstate.o
CC stubs/vm-stop.o
CC stubs/cpus.o
CC stubs/kvm.o
CC stubs/qmp_pc_dimm_device_list.o
CC stubs/target-monitor-defs.o
CC stubs/target-get-monitor-def.o
CC stubs/vhost.o
CC stubs/iohandler.o
CC stubs/smbios_type_38.o
CC stubs/ipmi.o
CC stubs/pc_madt_cpu_entry.o
CC stubs/migration-colo.o
CC contrib/ivshmem-client/ivshmem-client.o
CC contrib/ivshmem-client/main.o
CC contrib/ivshmem-server/ivshmem-server.o
CC contrib/ivshmem-server/main.o
CC qemu-nbd.o
CC async.o
CC thread-pool.o
CC block.o
CC blockjob.o
CC main-loop.o
CC iohandler.o
CC qemu-timer.o
CC aio-posix.o
CC qemu-io-cmds.o
CC replication.o
CC block/raw-format.o
CC block/qcow.o
CC block/vdi.o
CC block/vmdk.o
CC block/cloop.o
CC block/bochs.o
CC block/vpc.o
CC block/vvfat.o
CC block/dmg.o
CC block/qcow2.o
CC block/qcow2-refcount.o
CC block/qcow2-cluster.o
CC block/qcow2-snapshot.o
CC block/qcow2-cache.o
CC block/qed.o
CC block/qed-gencb.o
CC block/qed-l2-cache.o
CC block/qed-table.o
CC block/qed-cluster.o
CC block/qed-check.o
CC block/vhdx.o
CC block/vhdx-endian.o
CC block/vhdx-log.o
CC block/quorum.o
CC block/parallels.o
CC block/blkdebug.o
CC block/blkverify.o
CC block/blkreplay.o
CC block/block-backend.o
CC block/snapshot.o
CC block/qapi.o
CC block/file-posix.o
CC block/null.o
CC block/mirror.o
CC block/commit.o
CC block/io.o
CC block/throttle-groups.o
CC block/nbd.o
CC block/nbd-client.o
CC block/sheepdog.o
CC block/accounting.o
CC block/dirty-bitmap.o
CC block/write-threshold.o
CC block/backup.o
CC block/replication.o
CC block/crypto.o
CC nbd/server.o
CC nbd/client.o
CC nbd/common.o
CC crypto/init.o
CC crypto/hash.o
CC crypto/hash-glib.o
CC crypto/hmac.o
CC crypto/hmac-glib.o
CC crypto/aes.o
CC crypto/desrfb.o
CC crypto/cipher.o
CC crypto/tlscreds.o
CC crypto/tlscredsanon.o
CC crypto/tlscredsx509.o
CC crypto/tlssession.o
CC crypto/secret.o
CC crypto/random-platform.o
CC crypto/pbkdf.o
CC crypto/ivgen.o
CC crypto/ivgen-essiv.o
CC crypto/ivgen-plain.o
CC crypto/ivgen-plain64.o
CC crypto/afsplit.o
CC crypto/xts.o
CC crypto/block.o
CC crypto/block-qcow.o
CC crypto/block-luks.o
CC io/channel.o
CC io/channel-buffer.o
CC io/channel-command.o
CC io/channel-file.o
CC io/channel-socket.o
CC io/channel-tls.o
CC io/channel-watch.o
CC io/channel-websock.o
CC io/channel-util.o
CC io/task.o
CC qom/object.o
CC qom/container.o
CC qom/qom-qobject.o
CC qom/object_interfaces.o
GEN qemu-img-cmds.h
CC qemu-io.o
CC qemu-bridge-helper.o
CC blockdev.o
CC blockdev-nbd.o
CC iothread.o
CC qdev-monitor.o
CC device-hotplug.o
CC os-posix.o
CC qemu-char.o
CC page_cache.o
CC accel.o
CC bt-host.o
CC dma-helpers.o
CC bt-vhci.o
CC vl.o
CC tpm.o
CC device_tree.o
GEN qmp-marshal.c
CC qmp.o
CC hmp.o
CC cpus-common.o
CC audio/audio.o
CC audio/noaudio.o
CC audio/wavaudio.o
CC audio/mixeng.o
CC audio/sdlaudio.o
CC audio/ossaudio.o
CC audio/wavcapture.o
CC backends/rng-egd.o
CC backends/rng.o
CC backends/rng-random.o
CC backends/msmouse.o
CC backends/tpm.o
CC backends/testdev.o
CC backends/hostmem.o
CC backends/hostmem-ram.o
CC backends/hostmem-file.o
CC backends/cryptodev.o
CC backends/cryptodev-builtin.o
CC block/stream.o
CC disas/arm.o
CC disas/i386.o
CC fsdev/qemu-fsdev-dummy.o
CC fsdev/qemu-fsdev-opts.o
CC hw/acpi/core.o
CC hw/acpi/pcihp.o
CC hw/acpi/ich9.o
CC hw/acpi/piix4.o
CC hw/acpi/cpu_hotplug.o
CC hw/acpi/tco.o
CC hw/acpi/cpu.o
CC hw/acpi/memory_hotplug.o
CC hw/acpi/nvdimm.o
CC hw/acpi/acpi_interface.o
CC hw/acpi/bios-linker-loader.o
CC hw/acpi/aml-build.o
CC hw/acpi/ipmi.o
CC hw/audio/sb16.o
CC hw/audio/es1370.o
CC hw/audio/ac97.o
CC hw/audio/fmopl.o
CC hw/audio/adlib.o
CC hw/audio/gus.o
CC hw/audio/gusemu_hal.o
CC hw/audio/gusemu_mixer.o
CC hw/audio/cs4231a.o
CC hw/audio/intel-hda.o
CC hw/audio/hda-codec.o
CC hw/audio/pcspk.o
CC hw/audio/pl041.o
CC hw/audio/wm8750.o
CC hw/audio/lm4549.o
CC hw/audio/marvell_88w8618.o
CC hw/block/block.o
CC hw/block/cdrom.o
CC hw/block/hd-geometry.o
CC hw/block/fdc.o
CC hw/block/m25p80.o
CC hw/block/nand.o
CC hw/block/pflash_cfi01.o
CC hw/block/pflash_cfi02.o
CC hw/block/ecc.o
CC hw/block/onenand.o
CC hw/block/nvme.o
CC hw/bt/core.o
CC hw/bt/l2cap.o
CC hw/bt/sdp.o
CC hw/bt/hci.o
CC hw/bt/hid.o
CC hw/bt/hci-csr.o
CC hw/char/ipoctal232.o
CC hw/char/parallel.o
CC hw/char/pl011.o
CC hw/char/serial.o
CC hw/char/serial-isa.o
CC hw/char/serial-pci.o
CC hw/char/virtio-console.o
CC hw/char/cadence_uart.o
CC hw/char/debugcon.o
CC hw/char/imx_serial.o
CC hw/core/qdev.o
CC hw/core/qdev-properties.o
CC hw/core/bus.o
CC hw/core/fw-path-provider.o
CC hw/core/irq.o
CC hw/core/hotplug.o
CC hw/core/sysbus.o
CC hw/core/ptimer.o
CC hw/core/machine.o
CC hw/core/null-machine.o
CC hw/core/loader.o
CC hw/core/qdev-properties-system.o
CC hw/core/register.o
CC hw/core/or-irq.o
CC hw/core/platform-bus.o
CC hw/display/ads7846.o
CC hw/display/cirrus_vga.o
CC hw/display/pl110.o
CC hw/display/ssd0303.o
CC hw/display/ssd0323.o
CC hw/display/vga-pci.o
CC hw/display/vga-isa.o
CC hw/display/vmware_vga.o
CC hw/display/blizzard.o
CC hw/display/exynos4210_fimd.o
CC hw/display/framebuffer.o
CC hw/display/tc6393xb.o
CC hw/dma/pl080.o
CC hw/dma/pl330.o
CC hw/dma/i8257.o
CC hw/dma/xlnx-zynq-devcfg.o
CC hw/gpio/max7310.o
CC hw/gpio/pl061.o
CC hw/gpio/zaurus.o
CC hw/gpio/gpio_key.o
CC hw/i2c/core.o
CC hw/i2c/smbus.o
CC hw/i2c/smbus_eeprom.o
CC hw/i2c/i2c-ddc.o
CC hw/i2c/versatile_i2c.o
CC hw/i2c/smbus_ich9.o
CC hw/i2c/pm_smbus.o
CC hw/i2c/bitbang_i2c.o
CC hw/i2c/exynos4210_i2c.o
CC hw/i2c/imx_i2c.o
CC hw/i2c/aspeed_i2c.o
CC hw/ide/core.o
CC hw/ide/atapi.o
CC hw/ide/qdev.o
CC hw/ide/pci.o
CC hw/ide/isa.o
CC hw/ide/piix.o
CC hw/ide/microdrive.o
CC hw/ide/ich.o
CC hw/ide/ahci.o
CC hw/input/hid.o
CC hw/input/lm832x.o
CC hw/input/pckbd.o
CC hw/input/pl050.o
CC hw/input/ps2.o
CC hw/input/stellaris_input.o
CC hw/input/tsc2005.o
CC hw/input/vmmouse.o
CC hw/input/virtio-input.o
CC hw/input/virtio-input-hid.o
CC hw/input/virtio-input-host.o
CC hw/intc/i8259_common.o
CC hw/intc/i8259.o
CC hw/intc/pl190.o
CC hw/intc/realview_gic.o
CC hw/intc/imx_avic.o
CC hw/intc/arm_gic_common.o
CC hw/intc/ioapic_common.o
CC hw/intc/arm_gic.o
CC hw/intc/arm_gicv2m.o
CC hw/intc/arm_gicv3_common.o
CC hw/intc/arm_gicv3.o
CC hw/intc/arm_gicv3_dist.o
CC hw/intc/arm_gicv3_redist.o
CC hw/intc/arm_gicv3_its_common.o
CC hw/intc/intc.o
CC hw/ipack/ipack.o
CC hw/ipack/tpci200.o
CC hw/ipmi/ipmi.o
CC hw/ipmi/ipmi_bmc_sim.o
CC hw/ipmi/ipmi_bmc_extern.o
CC hw/ipmi/isa_ipmi_kcs.o
CC hw/isa/isa-bus.o
CC hw/ipmi/isa_ipmi_bt.o
CC hw/isa/apm.o
CC hw/mem/pc-dimm.o
CC hw/mem/nvdimm.o
CC hw/misc/applesmc.o
CC hw/misc/max111x.o
CC hw/misc/tmp105.o
CC hw/misc/debugexit.o
CC hw/misc/sga.o
CC hw/misc/pc-testdev.o
CC hw/misc/pci-testdev.o
CC hw/misc/arm_l2x0.o
CC hw/misc/arm_integrator_debug.o
CC hw/misc/a9scu.o
CC hw/misc/arm11scu.o
CC hw/net/ne2000.o
CC hw/net/eepro100.o
CC hw/net/pcnet.o
CC hw/net/pcnet-pci.o
CC hw/net/e1000.o
CC hw/net/net_tx_pkt.o
CC hw/net/e1000x_common.o
CC hw/net/net_rx_pkt.o
CC hw/net/e1000e.o
CC hw/net/e1000e_core.o
CC hw/net/rtl8139.o
CC hw/net/vmxnet3.o
CC hw/net/smc91c111.o
CC hw/net/lan9118.o
CC hw/net/ne2000-isa.o
CC hw/net/xgmac.o
CC hw/net/allwinner_emac.o
CC hw/net/imx_fec.o
CC hw/net/cadence_gem.o
CC hw/net/stellaris_enet.o
CC hw/net/rocker/rocker.o
CC hw/net/rocker/rocker_fp.o
CC hw/net/rocker/rocker_desc.o
CC hw/net/rocker/rocker_world.o
CC hw/net/rocker/rocker_of_dpa.o
CC hw/nvram/eeprom93xx.o
CC hw/nvram/fw_cfg.o
CC hw/nvram/chrp_nvram.o
CC hw/pci-bridge/pci_bridge_dev.o
CC hw/pci-bridge/pci_expander_bridge.o
CC hw/pci-bridge/xio3130_upstream.o
CC hw/pci-bridge/xio3130_downstream.o
CC hw/pci-bridge/ioh3420.o
CC hw/pci-bridge/i82801b11.o
CC hw/pci-host/pam.o
CC hw/pci-host/versatile.o
CC hw/pci-host/piix.o
CC hw/pci-host/q35.o
/tmp/qemu-test/src/hw/nvram/fw_cfg.c: In function ‘fw_cfg_dma_transfer’:
/tmp/qemu-test/src/hw/nvram/fw_cfg.c:329: warning: ‘read’ may be used uninitialized in this function
CC hw/pci-host/gpex.o
CC hw/pci/pci.o
CC hw/pci/pci_bridge.o
CC hw/pci/msix.o
CC hw/pci/msi.o
CC hw/pci/shpc.o
CC hw/pci/slotid_cap.o
CC hw/pci/pci_host.o
CC hw/pci/pcie_host.o
CC hw/pci/pcie_aer.o
CC hw/pci/pcie.o
CC hw/pci/pcie_port.o
CC hw/pci/pci-stub.o
CC hw/pcmcia/pcmcia.o
CC hw/scsi/scsi-disk.o
CC hw/scsi/scsi-generic.o
CC hw/scsi/scsi-bus.o
CC hw/scsi/lsi53c895a.o
CC hw/scsi/mptsas.o
CC hw/scsi/mptconfig.o
CC hw/scsi/mptendian.o
CC hw/scsi/megasas.o
CC hw/scsi/vmw_pvscsi.o
CC hw/scsi/esp.o
CC hw/scsi/esp-pci.o
CC hw/sd/pl181.o
CC hw/sd/ssi-sd.o
CC hw/sd/core.o
CC hw/sd/sd.o
CC hw/sd/sdhci.o
CC hw/smbios/smbios.o
CC hw/smbios/smbios_type_38.o
CC hw/ssi/pl022.o
CC hw/ssi/ssi.o
CC hw/ssi/xilinx_spips.o
CC hw/ssi/aspeed_smc.o
CC hw/ssi/stm32f2xx_spi.o
CC hw/timer/arm_timer.o
CC hw/timer/arm_mptimer.o
CC hw/timer/a9gtimer.o
CC hw/timer/cadence_ttc.o
CC hw/timer/ds1338.o
CC hw/timer/hpet.o
CC hw/timer/i8254_common.o
CC hw/timer/i8254.o
CC hw/timer/pl031.o
CC hw/timer/twl92230.o
CC hw/timer/imx_epit.o
CC hw/timer/imx_gpt.o
CC hw/timer/stm32f2xx_timer.o
CC hw/timer/aspeed_timer.o
CC hw/tpm/tpm_passthrough.o
CC hw/tpm/tpm_tis.o
CC hw/tpm/tpm_util.o
CC hw/usb/core.o
CC hw/usb/combined-packet.o
CC hw/usb/bus.o
CC hw/usb/libhw.o
CC hw/usb/desc.o
CC hw/usb/desc-msos.o
CC hw/usb/hcd-uhci.o
CC hw/usb/hcd-ohci.o
CC hw/usb/hcd-ehci.o
CC hw/usb/hcd-ehci-pci.o
CC hw/usb/hcd-ehci-sysbus.o
CC hw/usb/hcd-xhci.o
CC hw/usb/hcd-musb.o
CC hw/usb/dev-hub.o
CC hw/usb/dev-hid.o
CC hw/usb/dev-wacom.o
CC hw/usb/dev-storage.o
CC hw/usb/dev-uas.o
CC hw/usb/dev-audio.o
CC hw/usb/dev-serial.o
CC hw/usb/dev-network.o
CC hw/usb/dev-bluetooth.o
CC hw/usb/dev-mtp.o
CC hw/usb/dev-smartcard-reader.o
CC hw/usb/host-stub.o
CC hw/virtio/virtio-rng.o
CC hw/virtio/virtio-pci.o
CC hw/virtio/virtio-bus.o
CC hw/virtio/virtio-mmio.o
CC hw/watchdog/watchdog.o
CC hw/watchdog/wdt_i6300esb.o
CC hw/watchdog/wdt_ib700.o
CC migration/socket.o
CC migration/migration.o
CC migration/fd.o
CC migration/tls.o
CC migration/exec.o
CC migration/colo-comm.o
CC migration/colo.o
CC migration/colo-failover.o
CC migration/vmstate.o
CC migration/qemu-file.o
CC migration/qemu-file-channel.o
CC migration/xbzrle.o
CC migration/postcopy-ram.o
CC migration/qjson.o
CC migration/block.o
CC net/net.o
CC net/queue.o
CC net/util.o
CC net/checksum.o
CC net/hub.o
CC net/socket.o
CC net/dump.o
CC net/eth.o
CC net/tap.o
CC net/l2tpv3.o
CC net/vhost-user.o
CC net/tap-linux.o
CC net/slirp.o
CC net/filter.o
CC net/filter-buffer.o
CC net/filter-mirror.o
CC net/colo-compare.o
CC net/colo.o
CC net/filter-rewriter.o
CC net/filter-replay.o
CC qom/cpu.o
CC replay/replay.o
CC replay/replay-internal.o
CC replay/replay-events.o
CC replay/replay-time.o
CC replay/replay-input.o
CC replay/replay-char.o
CC replay/replay-snapshot.o
CC slirp/cksum.o
CC replay/replay-net.o
CC slirp/if.o
CC slirp/ip6_icmp.o
CC slirp/ip_icmp.o
/tmp/qemu-test/src/replay/replay-internal.c: In function ‘replay_put_array’:
/tmp/qemu-test/src/replay/replay-internal.c:65: warning: ignoring return value of ‘fwrite’, declared with attribute warn_unused_result
CC slirp/ip6_output.o
CC slirp/ip6_input.o
CC slirp/ip_input.o
CC slirp/dnssearch.o
CC slirp/ip_output.o
CC slirp/dhcpv6.o
CC slirp/slirp.o
CC slirp/mbuf.o
CC slirp/misc.o
CC slirp/sbuf.o
CC slirp/socket.o
CC slirp/tcp_input.o
CC slirp/tcp_output.o
CC slirp/tcp_timer.o
CC slirp/tcp_subr.o
CC slirp/udp.o
CC slirp/udp6.o
CC slirp/bootp.o
CC slirp/tftp.o
CC slirp/arp_table.o
CC slirp/ndp_table.o
CC ui/keymaps.o
CC ui/console.o
CC ui/cursor.o
/tmp/qemu-test/src/slirp/tcp_input.c: In function ‘tcp_input’:
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_p’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_len’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_tos’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_id’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_off’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_ttl’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_sum’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_src.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:219: warning: ‘save_ip.ip_dst.s_addr’ may be used uninitialized in this function
/tmp/qemu-test/src/slirp/tcp_input.c:220: warning: ‘save_ip6.ip_nh’ may be used uninitialized in this function
CC ui/qemu-pixman.o
CC ui/input.o
CC ui/input-legacy.o
CC ui/input-keymap.o
CC ui/input-linux.o
CC ui/sdl.o
CC ui/sdl_zoom.o
CC ui/x_keymap.o
CC ui/vnc.o
CC ui/vnc-enc-zlib.o
CC ui/vnc-enc-hextile.o
CC ui/vnc-enc-tight.o
CC ui/vnc-palette.o
CC ui/vnc-enc-zrle.o
CC ui/vnc-ws.o
CC ui/vnc-auth-vencrypt.o
CC ui/vnc-jobs.o
LINK tests/qemu-iotests/socket_scm_helper
CC qga/commands.o
CC qga/guest-agent-command-state.o
CC qga/commands-posix.o
CC qga/main.o
CC qga/channel-posix.o
CC qga/qapi-generated/qga-qapi-types.o
CC qga/qapi-generated/qga-qapi-visit.o
CC qga/qapi-generated/qga-qmp-marshal.o
CC qmp-introspect.o
CC qapi-types.o
CC qapi-visit.o
CC qapi-event.o
AR libqemustub.a
CC qemu-img.o
CC qmp-marshal.o
CC trace/generated-tracers.o
AS optionrom/multiboot.o
AS optionrom/linuxboot.o
CC optionrom/linuxboot_dma.o
AS optionrom/kvmvapic.o
AR libqemuutil.a
cc: unrecognized option '-no-integrated-as'
cc: unrecognized option '-no-integrated-as'
BUILD optionrom/linuxboot_dma.img
BUILD optionrom/multiboot.img
BUILD optionrom/linuxboot_dma.raw
BUILD optionrom/multiboot.raw
BUILD optionrom/linuxboot.img
SIGN optionrom/linuxboot_dma.bin
SIGN optionrom/multiboot.bin
BUILD optionrom/linuxboot.raw
BUILD optionrom/kvmvapic.img
SIGN optionrom/linuxboot.bin
BUILD optionrom/kvmvapic.raw
SIGN optionrom/kvmvapic.bin
LINK ivshmem-client
LINK ivshmem-server
LINK qemu-nbd
LINK qemu-img
LINK qemu-io
LINK qemu-bridge-helper
LINK qemu-ga
GEN x86_64-softmmu/config-target.h
GEN x86_64-softmmu/hmp-commands.h
GEN x86_64-softmmu/hmp-commands-info.h
GEN aarch64-softmmu/hmp-commands.h
GEN aarch64-softmmu/hmp-commands-info.h
GEN aarch64-softmmu/config-target.h
CC aarch64-softmmu/translate-common.o
CC aarch64-softmmu/exec.o
CC aarch64-softmmu/translate-all.o
CC aarch64-softmmu/cpu-exec.o
CC aarch64-softmmu/cpu-exec-common.o
CC aarch64-softmmu/tcg/tcg.o
CC aarch64-softmmu/tcg/tcg-op.o
CC aarch64-softmmu/disas.o
CC aarch64-softmmu/tcg/optimize.o
CC aarch64-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/fpu/softfloat.o
CC aarch64-softmmu/tcg-runtime.o
GEN aarch64-softmmu/gdbstub-xml.c
CC aarch64-softmmu/kvm-stub.o
CC aarch64-softmmu/arch_init.o
CC aarch64-softmmu/cpus.o
CC aarch64-softmmu/monitor.o
CC aarch64-softmmu/gdbstub.o
CC aarch64-softmmu/balloon.o
CC aarch64-softmmu/ioport.o
CC aarch64-softmmu/numa.o
CC aarch64-softmmu/qtest.o
CC aarch64-softmmu/bootdevice.o
CC aarch64-softmmu/memory.o
CC aarch64-softmmu/cputlb.o
CC aarch64-softmmu/memory_mapping.o
CC x86_64-softmmu/exec.o
CC aarch64-softmmu/dump.o
CC x86_64-softmmu/translate-all.o
CC x86_64-softmmu/cpu-exec.o
CC x86_64-softmmu/translate-common.o
CC x86_64-softmmu/cpu-exec-common.o
CC x86_64-softmmu/tcg/tcg.o
CC x86_64-softmmu/tcg/tcg-op.o
CC x86_64-softmmu/tcg/optimize.o
CC aarch64-softmmu/migration/ram.o
CC x86_64-softmmu/tcg/tcg-common.o
CC aarch64-softmmu/migration/savevm.o
CC x86_64-softmmu/fpu/softfloat.o
CC x86_64-softmmu/disas.o
CC x86_64-softmmu/tcg-runtime.o
CC aarch64-softmmu/xen-common-stub.o
CC aarch64-softmmu/xen-hvm-stub.o
CC x86_64-softmmu/arch_init.o
CC x86_64-softmmu/cpus.o
CC x86_64-softmmu/monitor.o
CC x86_64-softmmu/gdbstub.o
CC aarch64-softmmu/hw/adc/stm32f2xx_adc.o
CC aarch64-softmmu/hw/block/virtio-blk.o
CC x86_64-softmmu/balloon.o
CC aarch64-softmmu/hw/block/dataplane/virtio-blk.o
CC x86_64-softmmu/ioport.o
CC aarch64-softmmu/hw/char/exynos4210_uart.o
CC x86_64-softmmu/numa.o
CC aarch64-softmmu/hw/char/omap_uart.o
CC x86_64-softmmu/bootdevice.o
CC x86_64-softmmu/qtest.o
CC x86_64-softmmu/kvm-all.o
CC aarch64-softmmu/hw/char/digic-uart.o
CC aarch64-softmmu/hw/char/stm32f2xx_usart.o
CC aarch64-softmmu/hw/char/bcm2835_aux.o
CC aarch64-softmmu/hw/char/virtio-serial-bus.o
CC aarch64-softmmu/hw/core/nmi.o
CC x86_64-softmmu/memory.o
CC aarch64-softmmu/hw/core/generic-loader.o
CC x86_64-softmmu/cputlb.o
CC aarch64-softmmu/hw/cpu/arm11mpcore.o
CC x86_64-softmmu/memory_mapping.o
CC x86_64-softmmu/dump.o
CC aarch64-softmmu/hw/cpu/realview_mpcore.o
CC aarch64-softmmu/hw/cpu/a9mpcore.o
CC aarch64-softmmu/hw/cpu/a15mpcore.o
CC aarch64-softmmu/hw/display/omap_dss.o
CC aarch64-softmmu/hw/cpu/core.o
CC x86_64-softmmu/migration/ram.o
CC x86_64-softmmu/migration/savevm.o
CC aarch64-softmmu/hw/display/omap_lcdc.o
CC x86_64-softmmu/xen-common-stub.o
CC x86_64-softmmu/hw/block/virtio-blk.o
CC x86_64-softmmu/xen-hvm-stub.o
CC aarch64-softmmu/hw/display/pxa2xx_lcd.o
CC x86_64-softmmu/hw/block/dataplane/virtio-blk.o
CC aarch64-softmmu/hw/display/bcm2835_fb.o
CC aarch64-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/display/virtio-gpu.o
CC x86_64-softmmu/hw/char/virtio-serial-bus.o
CC aarch64-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/display/virtio-gpu-pci.o
CC aarch64-softmmu/hw/display/dpcd.o
CC x86_64-softmmu/hw/core/nmi.o
CC aarch64-softmmu/hw/display/xlnx_dp.o
CC x86_64-softmmu/hw/core/generic-loader.o
CC aarch64-softmmu/hw/dma/xlnx_dpdma.o
CC aarch64-softmmu/hw/dma/omap_dma.o
CC aarch64-softmmu/hw/dma/soc_dma.o
CC x86_64-softmmu/hw/cpu/core.o
CC aarch64-softmmu/hw/dma/pxa2xx_dma.o
CC aarch64-softmmu/hw/dma/bcm2835_dma.o
CC x86_64-softmmu/hw/display/vga.o
CC aarch64-softmmu/hw/gpio/omap_gpio.o
CC x86_64-softmmu/hw/display/virtio-gpu.o
CC x86_64-softmmu/hw/display/virtio-gpu-3d.o
CC aarch64-softmmu/hw/gpio/imx_gpio.o
CC aarch64-softmmu/hw/i2c/omap_i2c.o
CC aarch64-softmmu/hw/input/pxa2xx_keypad.o
CC aarch64-softmmu/hw/input/tsc210x.o
CC x86_64-softmmu/hw/display/virtio-gpu-pci.o
CC x86_64-softmmu/hw/display/virtio-vga.o
CC aarch64-softmmu/hw/intc/armv7m_nvic.o
CC x86_64-softmmu/hw/intc/apic.o
CC x86_64-softmmu/hw/intc/apic_common.o
CC x86_64-softmmu/hw/intc/ioapic.o
CC x86_64-softmmu/hw/isa/lpc_ich9.o
CC aarch64-softmmu/hw/intc/exynos4210_gic.o
CC x86_64-softmmu/hw/misc/vmport.o
CC aarch64-softmmu/hw/intc/exynos4210_combiner.o
CC x86_64-softmmu/hw/misc/ivshmem.o
CC x86_64-softmmu/hw/misc/pvpanic.o
CC x86_64-softmmu/hw/misc/edu.o
CC aarch64-softmmu/hw/intc/omap_intc.o
CC x86_64-softmmu/hw/misc/hyperv_testdev.o
CC x86_64-softmmu/hw/net/virtio-net.o
CC x86_64-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/hw/scsi/virtio-scsi.o
CC x86_64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC x86_64-softmmu/hw/scsi/vhost-scsi.o
CC x86_64-softmmu/hw/timer/mc146818rtc.o
CC x86_64-softmmu/hw/vfio/common.o
CC x86_64-softmmu/hw/vfio/pci.o
CC x86_64-softmmu/hw/vfio/pci-quirks.o
CC aarch64-softmmu/hw/intc/bcm2835_ic.o
CC aarch64-softmmu/hw/intc/bcm2836_control.o
CC aarch64-softmmu/hw/intc/allwinner-a10-pic.o
CC aarch64-softmmu/hw/intc/aspeed_vic.o
CC aarch64-softmmu/hw/intc/arm_gicv3_cpuif.o
CC aarch64-softmmu/hw/misc/ivshmem.o
CC aarch64-softmmu/hw/misc/arm_sysctl.o
CC aarch64-softmmu/hw/misc/cbus.o
CC aarch64-softmmu/hw/misc/exynos4210_pmu.o
CC aarch64-softmmu/hw/misc/imx_ccm.o
CC aarch64-softmmu/hw/misc/imx31_ccm.o
CC aarch64-softmmu/hw/misc/imx25_ccm.o
CC x86_64-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/misc/imx6_ccm.o
CC aarch64-softmmu/hw/misc/imx6_src.o
CC x86_64-softmmu/hw/vfio/calxeda-xgmac.o
CC aarch64-softmmu/hw/misc/mst_fpga.o
CC aarch64-softmmu/hw/misc/omap_clk.o
CC aarch64-softmmu/hw/misc/omap_gpmc.o
CC x86_64-softmmu/hw/vfio/amd-xgbe.o
CC x86_64-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/misc/omap_l4.o
CC x86_64-softmmu/hw/virtio/virtio.o
CC x86_64-softmmu/hw/virtio/virtio-balloon.o
CC x86_64-softmmu/hw/virtio/vhost.o
CC aarch64-softmmu/hw/misc/omap_sdrc.o
CC aarch64-softmmu/hw/misc/omap_tap.o
CC aarch64-softmmu/hw/misc/bcm2835_mbox.o
CC x86_64-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/misc/bcm2835_property.o
CC aarch64-softmmu/hw/misc/zynq_slcr.o
CC x86_64-softmmu/hw/virtio/vhost-user.o
CC aarch64-softmmu/hw/misc/zynq-xadc.o
CC x86_64-softmmu/hw/virtio/vhost-vsock.o
CC x86_64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/misc/stm32f2xx_syscfg.o
CC x86_64-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/misc/edu.o
CC aarch64-softmmu/hw/misc/auxbus.o
CC x86_64-softmmu/hw/i386/multiboot.o
CC x86_64-softmmu/hw/i386/pc.o
CC x86_64-softmmu/hw/i386/pc_piix.o
CC x86_64-softmmu/hw/i386/pc_q35.o
CC x86_64-softmmu/hw/i386/pc_sysfw.o
CC x86_64-softmmu/hw/i386/x86-iommu.o
CC aarch64-softmmu/hw/misc/aspeed_scu.o
CC x86_64-softmmu/hw/i386/intel_iommu.o
CC x86_64-softmmu/hw/i386/amd_iommu.o
CC x86_64-softmmu/hw/i386/kvmvapic.o
CC aarch64-softmmu/hw/misc/aspeed_sdmc.o
CC x86_64-softmmu/hw/i386/acpi-build.o
CC aarch64-softmmu/hw/net/virtio-net.o
CC x86_64-softmmu/hw/i386/pci-assign-load-rom.o
CC x86_64-softmmu/hw/i386/kvm/clock.o
CC x86_64-softmmu/hw/i386/kvm/apic.o
CC aarch64-softmmu/hw/net/vhost_net.o
CC x86_64-softmmu/hw/i386/kvm/i8259.o
CC aarch64-softmmu/hw/pcmcia/pxa2xx.o
/tmp/qemu-test/src/hw/virtio/virtio.c: In function ‘virtqueue_map’:
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
make[1]: *** [hw/virtio/virtio.o] Error 1
make[1]: *** Waiting for unfinished jobs....
CC aarch64-softmmu/hw/scsi/virtio-scsi.o
CC aarch64-softmmu/hw/scsi/virtio-scsi-dataplane.o
CC aarch64-softmmu/hw/scsi/vhost-scsi.o
CC aarch64-softmmu/hw/sd/omap_mmc.o
CC aarch64-softmmu/hw/sd/pxa2xx_mmci.o
CC aarch64-softmmu/hw/ssi/omap_spi.o
CC aarch64-softmmu/hw/ssi/imx_spi.o
CC aarch64-softmmu/hw/timer/exynos4210_mct.o
CC aarch64-softmmu/hw/timer/exynos4210_pwm.o
CC aarch64-softmmu/hw/timer/exynos4210_rtc.o
CC aarch64-softmmu/hw/timer/omap_synctimer.o
CC aarch64-softmmu/hw/timer/omap_gptimer.o
CC aarch64-softmmu/hw/timer/pxa2xx_timer.o
CC aarch64-softmmu/hw/timer/digic-timer.o
CC aarch64-softmmu/hw/timer/allwinner-a10-pit.o
CC aarch64-softmmu/hw/usb/tusb6010.o
CC aarch64-softmmu/hw/vfio/common.o
CC aarch64-softmmu/hw/vfio/pci.o
CC aarch64-softmmu/hw/vfio/pci-quirks.o
CC aarch64-softmmu/hw/vfio/platform.o
CC aarch64-softmmu/hw/vfio/calxeda-xgmac.o
CC aarch64-softmmu/hw/vfio/amd-xgbe.o
CC aarch64-softmmu/hw/vfio/spapr.o
CC aarch64-softmmu/hw/virtio/virtio.o
CC aarch64-softmmu/hw/virtio/virtio-balloon.o
CC aarch64-softmmu/hw/virtio/vhost.o
/tmp/qemu-test/src/hw/i386/pc_piix.c: In function ‘igd_passthrough_isa_bridge_create’:
/tmp/qemu-test/src/hw/i386/pc_piix.c:1046: warning: ‘pch_rev_id’ may be used uninitialized in this function
CC aarch64-softmmu/hw/virtio/vhost-backend.o
CC aarch64-softmmu/hw/virtio/vhost-user.o
CC aarch64-softmmu/hw/virtio/vhost-vsock.o
CC aarch64-softmmu/hw/virtio/virtio-crypto.o
CC aarch64-softmmu/hw/virtio/virtio-crypto-pci.o
CC aarch64-softmmu/hw/arm/boot.o
CC aarch64-softmmu/hw/arm/collie.o
CC aarch64-softmmu/hw/arm/exynos4_boards.o
CC aarch64-softmmu/hw/arm/gumstix.o
CC aarch64-softmmu/hw/arm/highbank.o
CC aarch64-softmmu/hw/arm/digic_boards.o
CC aarch64-softmmu/hw/arm/integratorcp.o
CC aarch64-softmmu/hw/arm/mainstone.o
CC aarch64-softmmu/hw/arm/musicpal.o
CC aarch64-softmmu/hw/arm/nseries.o
CC aarch64-softmmu/hw/arm/omap_sx1.o
CC aarch64-softmmu/hw/arm/palm.o
CC aarch64-softmmu/hw/arm/realview.o
CC aarch64-softmmu/hw/arm/spitz.o
CC aarch64-softmmu/hw/arm/stellaris.o
CC aarch64-softmmu/hw/arm/tosa.o
/tmp/qemu-test/src/hw/i386/acpi-build.c: In function ‘build_append_pci_bus_devices’:
/tmp/qemu-test/src/hw/i386/acpi-build.c:496: warning: ‘notify_method’ may be used uninitialized in this function
CC aarch64-softmmu/hw/arm/versatilepb.o
CC aarch64-softmmu/hw/arm/vexpress.o
CC aarch64-softmmu/hw/arm/virt.o
CC aarch64-softmmu/hw/arm/xilinx_zynq.o
make: *** [subdir-x86_64-softmmu] Error 2
make: *** Waiting for unfinished jobs....
CC aarch64-softmmu/hw/arm/z2.o
/tmp/qemu-test/src/hw/virtio/virtio.c: In function ‘virtqueue_map’:
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:645: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
/tmp/qemu-test/src/hw/virtio/virtio.c:648: error: negative width in bit-field ‘qemu_build_bug_on’
make[1]: *** [hw/virtio/virtio.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [subdir-aarch64-softmmu] Error 2
make[1]: *** [docker-run] Error 2
make[1]: Leaving directory `/var/tmp/patchew-tester-tmp-e_4r2pmr/src'
make: *** [docker-run-test-quick@centos6] Error 2
=== OUTPUT END ===
Test command exited with code: 2
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
` (5 preceding siblings ...)
2017-01-20 14:57 ` no-reply
@ 2017-01-20 15:15 ` no-reply
6 siblings, 0 replies; 25+ messages in thread
From: no-reply @ 2017-01-20 15:15 UTC (permalink / raw)
To: mst; +Cc: famz, qemu-devel
Hi,
Your series seems to have some coding style problems. See output below for
more information:
Subject: [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups
Message-id: 1484859998-25074-1-git-send-email-mst@redhat.com
Type: series
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
# Useful git options
git config --local diff.renamelimit 0
git config --local diff.renames True
commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))
done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
86ed4e3 ARRAY_SIZE: check that argument is an array
6c5d1ef compiler: expression version of QEMU_BUILD_BUG_ON
650275f compiler: rework BUG_ON using a struct
593e31a compiler: drop ; after BUILD_BUG_ON
=== OUTPUT BEGIN ===
Checking PATCH 1/4: compiler: drop ; after BUILD_BUG_ON...
Checking PATCH 2/4: compiler: rework BUG_ON using a struct...
ERROR: spaces prohibited around that ':' (ctx:WxW)
#29: FILE: include/qemu/compiler.h:90:
+ int qemu_build_bug_on : (x) ? -1 : 1; \
^
total: 1 errors, 0 warnings, 15 lines checked
Your patch has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
Checking PATCH 3/4: compiler: expression version of QEMU_BUILD_BUG_ON...
Checking PATCH 4/4: ARRAY_SIZE: check that argument is an array...
=== OUTPUT END ===
Test command exited with code: 1
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@freelists.org
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 7:42 ` Markus Armbruster
@ 2017-01-20 16:57 ` Michael S. Tsirkin
2017-01-20 17:09 ` Paolo Bonzini
0 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-20 16:57 UTC (permalink / raw)
To: Markus Armbruster
Cc: qemu-devel, Peter Maydell, Richard Henderson, Paolo Bonzini
On Fri, Jan 20, 2017 at 08:42:41AM +0100, Markus Armbruster wrote:
> "Michael S. Tsirkin" <mst@redhat.com> writes:
>
> > There are theoretical concerns that some compilers might not trigger
> > build failures on attempts to define an array of size -1 and make it a
> > variable sized array instead. Let rewrite using a struct with a negative
> > bit field size instead as there are no dynamic bit field sizes. This is
> > similar to what Linux does.
> >
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> > ---
> > include/qemu/compiler.h | 9 ++++++---
> > 1 file changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> > index 7512082..c6f673e 100644
> > --- a/include/qemu/compiler.h
> > +++ b/include/qemu/compiler.h
> > @@ -85,9 +85,12 @@
> > #define typeof_field(type, field) typeof(((type *)0)->field)
> > #define type_check(t1,t2) ((t1*)0 - (t2*)0)
> >
> > -#define QEMU_BUILD_BUG_ON(x) \
> > - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> > - __attribute__((unused))
> > +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
> > + struct { \
> > + int qemu_build_bug_on : (x) ? -1 : 1; \
> > + }
>
> The qemu_build_bug_on name space pollution is harmless, but quite
> unnecessary: the name can be simply omitted (unnamed bit-field).
I have concerns about it's portability though. I remember
we had to get rid of unnamed fields in some structs at some point
for the sake of some old compiler.
> > +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
> > + glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
> >
> > #if defined __GNUC__
> > # if !QEMU_GNUC_PREREQ(4, 4)
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 16:57 ` Michael S. Tsirkin
@ 2017-01-20 17:09 ` Paolo Bonzini
2017-01-20 17:45 ` Michael S. Tsirkin
0 siblings, 1 reply; 25+ messages in thread
From: Paolo Bonzini @ 2017-01-20 17:09 UTC (permalink / raw)
To: Michael S. Tsirkin, Markus Armbruster
Cc: qemu-devel, Peter Maydell, Richard Henderson
On 20/01/2017 17:57, Michael S. Tsirkin wrote:
> On Fri, Jan 20, 2017 at 08:42:41AM +0100, Markus Armbruster wrote:
>> "Michael S. Tsirkin" <mst@redhat.com> writes:
>>
>>> There are theoretical concerns that some compilers might not trigger
>>> build failures on attempts to define an array of size -1 and make it a
>>> variable sized array instead. Let rewrite using a struct with a negative
>>> bit field size instead as there are no dynamic bit field sizes. This is
>>> similar to what Linux does.
>>>
>>> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>>> ---
>>> include/qemu/compiler.h | 9 ++++++---
>>> 1 file changed, 6 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
>>> index 7512082..c6f673e 100644
>>> --- a/include/qemu/compiler.h
>>> +++ b/include/qemu/compiler.h
>>> @@ -85,9 +85,12 @@
>>> #define typeof_field(type, field) typeof(((type *)0)->field)
>>> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
>>>
>>> -#define QEMU_BUILD_BUG_ON(x) \
>>> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
>>> - __attribute__((unused))
>>> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
>>> + struct { \
>>> + int qemu_build_bug_on : (x) ? -1 : 1; \
>>> + }
>>
>> The qemu_build_bug_on name space pollution is harmless, but quite
>> unnecessary: the name can be simply omitted (unnamed bit-field).
>
> I have concerns about it's portability though. I remember
> we had to get rid of unnamed fields in some structs at some point
> for the sake of some old compiler.
Unnamed bitfields are in C89 and we definitely use unnamed unions.
Maybe that was an unnamed struct or scalar.
Paolo
>>> +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
>>> + glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
>>>
>>> #if defined __GNUC__
>>> # if !QEMU_GNUC_PREREQ(4, 4)
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 17:09 ` Paolo Bonzini
@ 2017-01-20 17:45 ` Michael S. Tsirkin
2017-01-20 18:33 ` Markus Armbruster
0 siblings, 1 reply; 25+ messages in thread
From: Michael S. Tsirkin @ 2017-01-20 17:45 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Markus Armbruster, qemu-devel, Peter Maydell, Richard Henderson
On Fri, Jan 20, 2017 at 06:09:52PM +0100, Paolo Bonzini wrote:
>
>
> On 20/01/2017 17:57, Michael S. Tsirkin wrote:
> > On Fri, Jan 20, 2017 at 08:42:41AM +0100, Markus Armbruster wrote:
> >> "Michael S. Tsirkin" <mst@redhat.com> writes:
> >>
> >>> There are theoretical concerns that some compilers might not trigger
> >>> build failures on attempts to define an array of size -1 and make it a
> >>> variable sized array instead. Let rewrite using a struct with a negative
> >>> bit field size instead as there are no dynamic bit field sizes. This is
> >>> similar to what Linux does.
> >>>
> >>> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> >>> ---
> >>> include/qemu/compiler.h | 9 ++++++---
> >>> 1 file changed, 6 insertions(+), 3 deletions(-)
> >>>
> >>> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
> >>> index 7512082..c6f673e 100644
> >>> --- a/include/qemu/compiler.h
> >>> +++ b/include/qemu/compiler.h
> >>> @@ -85,9 +85,12 @@
> >>> #define typeof_field(type, field) typeof(((type *)0)->field)
> >>> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
> >>>
> >>> -#define QEMU_BUILD_BUG_ON(x) \
> >>> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
> >>> - __attribute__((unused))
> >>> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
> >>> + struct { \
> >>> + int qemu_build_bug_on : (x) ? -1 : 1; \
> >>> + }
> >>
> >> The qemu_build_bug_on name space pollution is harmless, but quite
> >> unnecessary: the name can be simply omitted (unnamed bit-field).
> >
> > I have concerns about it's portability though. I remember
> > we had to get rid of unnamed fields in some structs at some point
> > for the sake of some old compiler.
>
> Unnamed bitfields are in C89 and we definitely use unnamed unions.
> Maybe that was an unnamed struct or scalar.
>
> Paolo
I don't think we use unnamed bitfields anywhere though. do we?
> >>> +#define QEMU_BUILD_BUG_ON(x) typedef QEMU_BUILD_BUG_ON_STRUCT(x) \
> >>> + glue(qemu_build_bug_on__, __LINE__) __attribute__((unused))
> >>>
> >>> #if defined __GNUC__
> >>> # if !QEMU_GNUC_PREREQ(4, 4)
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct
2017-01-20 17:45 ` Michael S. Tsirkin
@ 2017-01-20 18:33 ` Markus Armbruster
0 siblings, 0 replies; 25+ messages in thread
From: Markus Armbruster @ 2017-01-20 18:33 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Paolo Bonzini, Peter Maydell, Richard Henderson, qemu-devel
"Michael S. Tsirkin" <mst@redhat.com> writes:
> On Fri, Jan 20, 2017 at 06:09:52PM +0100, Paolo Bonzini wrote:
>>
>>
>> On 20/01/2017 17:57, Michael S. Tsirkin wrote:
>> > On Fri, Jan 20, 2017 at 08:42:41AM +0100, Markus Armbruster wrote:
>> >> "Michael S. Tsirkin" <mst@redhat.com> writes:
>> >>
>> >>> There are theoretical concerns that some compilers might not trigger
>> >>> build failures on attempts to define an array of size -1 and make it a
>> >>> variable sized array instead. Let rewrite using a struct with a negative
>> >>> bit field size instead as there are no dynamic bit field sizes. This is
>> >>> similar to what Linux does.
>> >>>
>> >>> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
>> >>> ---
>> >>> include/qemu/compiler.h | 9 ++++++---
>> >>> 1 file changed, 6 insertions(+), 3 deletions(-)
>> >>>
>> >>> diff --git a/include/qemu/compiler.h b/include/qemu/compiler.h
>> >>> index 7512082..c6f673e 100644
>> >>> --- a/include/qemu/compiler.h
>> >>> +++ b/include/qemu/compiler.h
>> >>> @@ -85,9 +85,12 @@
>> >>> #define typeof_field(type, field) typeof(((type *)0)->field)
>> >>> #define type_check(t1,t2) ((t1*)0 - (t2*)0)
>> >>>
>> >>> -#define QEMU_BUILD_BUG_ON(x) \
>> >>> - typedef char glue(qemu_build_bug_on__, __LINE__)[(x) ? -1 : 1] \
>> >>> - __attribute__((unused))
>> >>> +#define QEMU_BUILD_BUG_ON_STRUCT(x) \
>> >>> + struct { \
>> >>> + int qemu_build_bug_on : (x) ? -1 : 1; \
>> >>> + }
>> >>
>> >> The qemu_build_bug_on name space pollution is harmless, but quite
>> >> unnecessary: the name can be simply omitted (unnamed bit-field).
>> >
>> > I have concerns about it's portability though. I remember
>> > we had to get rid of unnamed fields in some structs at some point
>> > for the sake of some old compiler.
>>
>> Unnamed bitfields are in C89 and we definitely use unnamed unions.
>> Maybe that was an unnamed struct or scalar.
>>
>> Paolo
>
> I don't think we use unnamed bitfields anywhere though. do we?
If we were talking about some obscure GCC extension, this would be a
valid question. But we're talking about an ISO C feature that's pretty
central to how bit-fields work, and older than quite a few hackers.
[...]
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2017-01-20 18:33 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-01-19 21:07 [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Michael S. Tsirkin
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 1/4] compiler: drop ; after BUILD_BUG_ON Michael S. Tsirkin
2017-01-19 21:22 ` Eric Blake
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 2/4] compiler: rework BUG_ON using a struct Michael S. Tsirkin
2017-01-19 21:26 ` Eric Blake
2017-01-20 7:44 ` Markus Armbruster
2017-01-20 7:42 ` Markus Armbruster
2017-01-20 16:57 ` Michael S. Tsirkin
2017-01-20 17:09 ` Paolo Bonzini
2017-01-20 17:45 ` Michael S. Tsirkin
2017-01-20 18:33 ` Markus Armbruster
2017-01-20 9:41 ` Dr. David Alan Gilbert
2017-01-20 14:36 ` Eric Blake
2017-01-20 14:53 ` Dr. David Alan Gilbert
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 3/4] compiler: expression version of QEMU_BUILD_BUG_ON Michael S. Tsirkin
2017-01-19 21:28 ` Eric Blake
2017-01-19 21:07 ` [Qemu-devel] [PATCH v3 4/4] ARRAY_SIZE: check that argument is an array Michael S. Tsirkin
2017-01-19 21:59 ` Eric Blake
2017-01-19 22:11 ` Michael S. Tsirkin
2017-01-19 23:00 ` Eric Blake
2017-01-20 7:34 ` Markus Armbruster
2017-01-20 12:20 ` Paolo Bonzini
2017-01-20 7:45 ` [Qemu-devel] [PATCH v3 0/4] ARRAY_SIZE fixups Markus Armbruster
2017-01-20 14:57 ` no-reply
2017-01-20 15:15 ` no-reply
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.