The following errors are generated when compiling Xen with clang 6: In file included from x86_64/asm-offsets.c:9: In file included from /root/src/xen/xen/include/xen/sched.h:8: In file included from /root/src/xen/xen/include/xen/shared.h:6: In file included from /root/src/xen/xen/include/compat/arch-x86/../xen.h:9: /root/src/xen/xen/include/compat/arch-x86/xen.h:10:10: error: the current #pragma pack aligment value is modified in the included file [-Werror,-Wpragma-pack] #include "xen-x86_32.h" ^ /root/src/xen/xen/include/compat/arch-x86/xen-x86_32.h:40:9: note: previous '#pragma pack' directive that modifies alignment is here #pragma pack() ^ In file included from x86_64/asm-offsets.c:9: In file included from /root/src/xen/xen/include/xen/sched.h:8: In file included from /root/src/xen/xen/include/xen/shared.h:6: /root/src/xen/xen/include/compat/arch-x86/../xen.h:9:10: error: the current #pragma pack aligment value is modified in the included file [-Werror,-Wpragma-pack] #include "arch-x86/xen.h" ^ /root/src/xen/xen/include/compat/arch-x86/xen.h:71:9: note: previous '#pragma pack' directive that modifies alignment is here #pragma pack() ^ 2 errors generated.
Fix this by using pragma push/pop in order to store the current pragma value in the compiler stack and later restoring it when using clang. Signed-off-by: Roger Pau Monné <roger....@citrix.com> --- Cc: Andrew Cooper <andrew.coop...@citrix.com> Cc: George Dunlap <george.dun...@eu.citrix.com> Cc: Ian Jackson <ian.jack...@eu.citrix.com> Cc: Jan Beulich <jbeul...@suse.com> Cc: Konrad Rzeszutek Wilk <konrad.w...@oracle.com> Cc: Stefano Stabellini <sstabell...@kernel.org> Cc: Tim Deegan <t...@xen.org> Cc: Wei Liu <wei.l...@citrix.com> --- Changes since v1: - Only use push/pop with clang. --- xen/include/Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xen/include/Makefile b/xen/include/Makefile index 1299b1962f..19066a33a0 100644 --- a/xen/include/Makefile +++ b/xen/include/Makefile @@ -35,8 +35,13 @@ cppflags-y := -include public/xen-compat.h -DXEN_GENERATING_COMPA cppflags-$(CONFIG_X86) += -m32 # 8-byte types are 4-byte aligned on x86_32 ... +ifeq ($(clang),y) +prefix-$(CONFIG_X86) := \#pragma pack(push, 4) +suffix-$(CONFIG_X86) := \#pragma pack(pop) +else prefix-$(CONFIG_X86) := \#pragma pack(4) suffix-$(CONFIG_X86) := \#pragma pack() +endif endif -- 2.15.1 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel