From: Roger Pau Monne Date: Thu, 9 Feb 2017 11:33:12 +0000 (+0000) Subject: x86/vmx: fix build with clang 3.8.0 X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2824 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ac6e7fd7a4826c14b85b9da59fc800a3a1bd3fd0;p=xen.git x86/vmx: fix build with clang 3.8.0 The usage of the __transparent__ attribute in 991033fa introduces some issues when compiled with clang 3.8.0: xen/include/asm/hvm/vmx/vmx.h:605:15: error: transparent_union attribute can only be applied to a union definition; attribute ignored [-Werror,-Wignored-attributes] typedef union __transparent__ ept_qual { ^ xen/include/xen/compiler.h:50:44: note: expanded from macro '__transparent__' This can be easily fixed by moving the attribute to the end of the definition, but then the following error triggers: xen/include/asm/hvm/vmx/vmx.h:607:5: error: size of field '' (16 bits) does not match the size of the first field in transparent union; transparent_union attribute ignored [-Werror,-Wignored-attributes] struct { ^ xen/include/asm/hvm/vmx/vmx.h:606:19: note: size of first field is 64 bits unsigned long raw; ^ Which can be fixed by introducing a new field in the nested structure that contains the padding in order to match the size of an unsigned long. Signed-off-by: Roger Pau Monné Reviewed-by: Andrew Cooper --- diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/include/asm-x86/hvm/vmx/vmx.h index 5f7512bd66..f4183d9615 100644 --- a/xen/include/asm-x86/hvm/vmx/vmx.h +++ b/xen/include/asm-x86/hvm/vmx/vmx.h @@ -602,15 +602,16 @@ void vmx_pi_hooks_assign(struct domain *d); void vmx_pi_hooks_deassign(struct domain *d); /* EPT violation qualifications definitions */ -typedef union __transparent__ ept_qual { +typedef union ept_qual { unsigned long raw; struct { bool read:1, write:1, fetch:1, eff_read:1, eff_write:1, eff_exec:1, /* eff_user_exec */:1, gla_valid:1, gla_fault:1; /* Valid iff gla_valid. */ + unsigned long /* pad */:55; }; -} ept_qual_t; +} __transparent__ ept_qual_t; #define EPT_L4_PAGETABLE_SHIFT 39 #define EPT_PAGETABLE_ENTRIES 512