]> xenbits.xensource.com Git - people/dwmw2/xen.git/commitdiff
trace: fix build with gcc9
authorJan Beulich <jbeulich@suse.com>
Tue, 4 Jun 2019 13:32:55 +0000 (15:32 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 4 Jun 2019 13:32:55 +0000 (15:32 +0200)
While I've not observed this myself, gcc 9 (imo validly) reportedly may
complain

trace.c: In function '__trace_hypercall':
trace.c:826:19: error: taking address of packed member of 'struct <anonymous>' may result in an unaligned pointer value [-Werror=address-of-packed-member]
  826 |     uint32_t *a = d.args;

and the fix is rather simple - remove the __packed attribute. Introduce
a BUILD_BUG_ON() as replacement, for the unlikely case that Xen might
get ported to an architecture where array alignment higher that that of
its elements.

Reported-by: Martin Liška <martin.liska@suse.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: George Dunlap <george.dunlap@citrix.com>
master commit: 3fd3b266d4198c06e8e421ca515d9ba09ccd5155
master date: 2019-05-13 09:51:23 +0200

xen/common/trace.c

index cc294fc38473ebceb1f00908ed8f7c6dba0ca90a..d1ef81407b718a8d4b4b25f8d6d4c9af5a751f06 100644 (file)
@@ -819,12 +819,18 @@ unlock:
 void __trace_hypercall(uint32_t event, unsigned long op,
                        const xen_ulong_t *args)
 {
-    struct __packed {
+    struct {
         uint32_t op;
         uint32_t args[6];
     } d;
     uint32_t *a = d.args;
 
+    /*
+     * In lieu of using __packed above, which gcc9 legitimately doesn't
+     * like in combination with the address of d.args[] taken.
+     */
+    BUILD_BUG_ON(offsetof(typeof(d), args) != sizeof(d.op));
+
 #define APPEND_ARG32(i)                         \
     do {                                        \
         unsigned i_ = (i);                      \