[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] asm-offsets: encode magic asm-offset runes as strings.



>>> On 03.04.14 at 18:07, <tim@xxxxxxx> wrote:
> 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 <julien.grall@xxxxxxxxxx>
> Suggested-by: Jan Beulich <JBeulich@xxxxxxxx>
> Signed-off-by: Tim Deegan <tim@xxxxxxx>

x86 side
Acked-by: Jan Beulich <jbeulich@xxxxxxxx>

Albeit considering the similarity (if not being fully identical) I wonder
whether these definitions shouldn't be moved into a central place.

Jan

> ---
> v2: make up the '#define' in the C source rather then in sed.
> Not quite as neat as I'd hoped: need to match an extra space
> to stop the second sed expression eating the # in #define.
> 
> diff --git a/xen/Makefile b/xen/Makefile
> index 79fa8f2..afbc962 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 ac628c0..cd1dff7 100644
> --- a/xen/arch/arm/arm32/asm-offsets.c
> +++ b/xen/arch/arm/arm32/asm-offsets.c
> @@ -13,11 +13,12 @@
>  #include <asm/current.h>
>  #include <asm/procinfo.h>
>  
> -#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 d7572fa..a3ce816 100644
> --- a/xen/arch/arm/arm64/asm-offsets.c
> +++ b/xen/arch/arm/arm64/asm-offsets.c
> @@ -12,11 +12,12 @@
>  #include <public/xen.h>
>  #include <asm/current.h>
>  
> -#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 b0098b3..9acb648 100644
> --- a/xen/arch/x86/x86_64/asm-offsets.c
> +++ b/xen/arch/x86/x86_64/asm-offsets.c
> @@ -14,11 +14,12 @@
>  #include <asm/hardirq.h>
>  #include <xen/multiboot.h>
>  
> -#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)



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.