From 3fd3b266d4198c06e8e421ca515d9ba09ccd5155 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 13 May 2019 09:51:23 +0200 Subject: [PATCH] trace: fix build with gcc9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 ' 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 Signed-off-by: Jan Beulich Acked-by: George Dunlap --- xen/common/trace.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xen/common/trace.c b/xen/common/trace.c index cc294fc38473..d1ef81407b71 100644 --- a/xen/common/trace.c +++ b/xen/common/trace.c @@ -819,12 +819,18 @@ void __trace_var(u32 event, bool_t cycles, unsigned int extra, 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); \ --- xen-4.11.1/xen/drivers/passthrough/vtd/vtd.h.orig 2018-11-29 14:04:11.000000000 +0000 +++ xen-4.11.1/xen/drivers/passthrough/vtd/vtd.h 2019-02-05 21:32:50.056774501 +0000 @@ -28,7 +28,7 @@ /* Allow for both IOAPIC and IOSAPIC. */ #define IO_xAPIC_route_entry IO_APIC_route_entry -struct IO_APIC_route_remap_entry { +struct __packed IO_APIC_route_remap_entry { union { u64 val; struct { --- xen-4.11.1/xen/arch/x86/cpu/mtrr/generic.c.orig 2018-11-29 14:04:11.000000000 +0000 +++ xen-4.11.1/xen/arch/x86/cpu/mtrr/generic.c 2019-02-10 19:24:09.378805103 +0000 @@ -171,6 +171,9 @@ printk("%sMTRR variable ranges %sabled:\n", level, mtrr_state.enabled ? "en" : "dis"); width = (paddr_bits - PAGE_SHIFT + 3) / 4; + if ( width > 64 ) { + width=64; + } for (i = 0; i < num_var_ranges; ++i) { if (mtrr_state.var_ranges[i].mask & MTRR_PHYSMASK_VALID) --- xen-4.6.6/xen/arch/x86/mm.c~ 2017-07-06 09:04:28.000000000 +0200 +++ xen-4.6.6/xen/arch/x86/mm.c 2019-10-27 14:02:41.582770616 +0100 @@ -517,7 +517,7 @@ make_cr3(v, cr3_mfn); } -static const char __section(".bss.page_aligned") zero_page[PAGE_SIZE]; +static const char __section(".bss.page_aligned.const") zero_page[PAGE_SIZE]; static void invalidate_shadow_ldt(struct vcpu *v, int flush) {