From: Tim Deegan Date: Thu, 3 Apr 2014 16:07:47 +0000 (+0200) Subject: asm-offsets: encode magic asm-offset runes as strings. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~5150 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9793226cf8d78780602a850de7938df371af2876;p=xen.git asm-offsets: encode magic asm-offset runes as strings. Newer versions of clang attempt to parse inline assembler even when not asked to assemble it. Wrap our not-for-assembly runes as strings of the form ``.ascii "==>MAGIC RUNES<=="'' so clang doesn't choke on them. While we're at it, assemble more of the final output line in the C file, to make the sed expression shorter. Reported-by: Julien Grall Suggested-by: Jan Beulich Signed-off-by: Tim Deegan Acked-by: Ian Campbell Acked-by: Jan Beulich --- diff --git a/xen/Makefile b/xen/Makefile index c0cf0c3741..0e58bce91a 100644 --- a/xen/Makefile +++ b/xen/Makefile @@ -150,7 +150,7 @@ include/asm-$(TARGET_ARCH)/asm-offsets.h: arch/$(TARGET_ARCH)/asm-offsets.s echo "#ifndef __ASM_OFFSETS_H__"; \ echo "#define __ASM_OFFSETS_H__"; \ echo ""; \ - sed -ne "/^->/{s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; s:->::; p;}"; \ + sed -rne "/==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \ echo ""; \ echo "#endif") <$< >$@ diff --git a/xen/arch/arm/arm32/asm-offsets.c b/xen/arch/arm/arm32/asm-offsets.c index ac628c00eb..cd1dff7a82 100644 --- a/xen/arch/arm/arm32/asm-offsets.c +++ b/xen/arch/arm/arm32/asm-offsets.c @@ -13,11 +13,12 @@ #include #include -#define DEFINE(_sym, _val) \ - __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) ) -#define BLANK() \ - __asm__ __volatile__ ( "\n->" : : ) -#define OFFSET(_sym, _str, _mem) \ +#define DEFINE(_sym, _val) \ + asm volatile ("\n.ascii\"==>#define " #_sym " %0 /* " #_val " */<==\"" \ + : : "i" (_val) ) +#define BLANK() \ + asm volatile ( "\n.ascii\"==><==\"" : : ) +#define OFFSET(_sym, _str, _mem) \ DEFINE(_sym, offsetof(_str, _mem)); void __dummy__(void) diff --git a/xen/arch/arm/arm64/asm-offsets.c b/xen/arch/arm/arm64/asm-offsets.c index d7572fa650..a3ce81627e 100644 --- a/xen/arch/arm/arm64/asm-offsets.c +++ b/xen/arch/arm/arm64/asm-offsets.c @@ -12,11 +12,12 @@ #include #include -#define DEFINE(_sym, _val) \ - __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) ) -#define BLANK() \ - __asm__ __volatile__ ( "\n->" : : ) -#define OFFSET(_sym, _str, _mem) \ +#define DEFINE(_sym, _val) \ + asm volatile ("\n.ascii\"==>#define " #_sym " %0 /* " #_val " */<==\"" \ + : : "i" (_val) ) +#define BLANK() \ + asm volatile ( "\n.ascii\"==><==\"" : : ) +#define OFFSET(_sym, _str, _mem) \ DEFINE(_sym, offsetof(_str, _mem)); void __dummy__(void) diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index b0098b35a4..9acb648427 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -14,11 +14,12 @@ #include #include -#define DEFINE(_sym, _val) \ - __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) ) -#define BLANK() \ - __asm__ __volatile__ ( "\n->" : : ) -#define OFFSET(_sym, _str, _mem) \ +#define DEFINE(_sym, _val) \ + asm volatile ("\n.ascii\"==>#define " #_sym " %0 /* " #_val " */<==\"" \ + : : "i" (_val) ) +#define BLANK() \ + asm volatile ( "\n.ascii\"==><==\"" : : ) +#define OFFSET(_sym, _str, _mem) \ DEFINE(_sym, offsetof(_str, _mem)); void __dummy__(void)