All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.