All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Deegan <tim@xen.org>
To: Jan Beulich <JBeulich@suse.com>
Cc: xen-devel@lists.xenproject.org,
	Julien Grall <julien.grall@linaro.org>,
	Keir Fraser <keir@xen.org>,
	ian.campbell@citrix.com, stefano.stabellini@citrix.com
Subject: Re: [PATCH 02/34] xen: clang: Disable built-in assembler
Date: Thu, 27 Mar 2014 19:01:34 +0100	[thread overview]
Message-ID: <20140327180134.GN91759@deinos.phlegethon.org> (raw)
In-Reply-To: <533300BC02000078000027D4@nat28.tlf.novell.com>

At 15:30 +0000 on 26 Mar (1395844252), Jan Beulich wrote:
> >>> On 26.03.14 at 16:08, <julien.grall@linaro.org> wrote:
> > Hi Tim,
> > 
> > On 03/26/2014 01:16 PM, Tim Deegan wrote:
> >> At 11:53 +0000 on 26 Mar (1395831232), Jan Beulich wrote:
> >>>>>> On 25.03.14 at 17:55, <julien.grall@linaro.org> wrote:
> >>>> --- a/xen/Rules.mk
> >>>> +++ b/xen/Rules.mk
> >>>> @@ -74,6 +74,7 @@ AFLAGS-y                += -D__ASSEMBLY__ -include 
> >>>> $(BASEDIR)/include/xen/config
> >>>>  
> >>>>  # Clang's built-in assembler can't handle .code16/.code32/.code64 yet
> >>>>  AFLAGS-$(clang)         += -no-integrated-as
> >>>> +CFLAGS-$(clang)         += -no-integrated-as
> >>>
> >>> Iirc Tim had found and worked around other built-in assembler issues
> >>> in the past, so if this is to be done unconditionally I wonder whether
> >>> we shouldn't then drop those workarounds.
> >> 
> >> I would prefer, wherever possible, to make things work with the clang
> >> assembler rather than rely on the binutils one forever.
> > 
> > The clang integrated assembler is too powerful for some part of Xen :).
> > Every inline assembly code is parsing by the assembler to check the syntax.
> > 
> > This will result to failure to generate asm-offsets.c because of the ->
> > in the code (see arch/arm/arm32/asm-offsets.c: DEFINE/BLANK macros).
> > Indeed, the -> is not a valid assembler syntax.
> 
> But what business does the compiler have to pass the assembly
> code to its internal assembler when all it was asked was to output
> assembly? That may be acceptable as an optional internal
> consistency check (verifying the compiler produced valid assembly),
> but shouldn't constrain the user from using the compiler for things
> where it's known the output isn't going to be valid assembly.
> 
> That said, I think it wouldn't be too difficult to change the
> asm-offsets logic to produce something that does look like valid
> assembly.

The patch below works for me (at least as far as building
asm-offsets.h on x86) by wrapping everything in a string.  I did try
just prefixing with '#' but clang 3.5 also strips the comments out.
That seems unhelpful, since I know some people put comments in their
inline assembler too. :(

---8<---

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.

Reported-by: Julien Grall <julien.grall@linaro.org>
Suggested-by: Jan Beulich <JBeulich@suse.com>
Signed-off-by: Tim Deegan <tim@xen.org>

---
It should be possible to go futher and assemble the #define in
the C macro, just leaving sed to handle extracting them, but that's for
another day.

diff --git a/xen/Makefile b/xen/Makefile
index 79fa8f2..11aef27 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 -ne "/==>/{s:^.*==>\(.*\)<==.*:\1:; s:^\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; p;}"; \
 	  echo ""; \
 	  echo "#endif") <$< >$@
 
diff --git a/xen/arch/arm/arm32/asm-offsets.c b/xen/arch/arm/arm32/asm-offsets.c
index ac628c0..db4bced 100644
--- a/xen/arch/arm/arm32/asm-offsets.c
+++ b/xen/arch/arm/arm32/asm-offsets.c
@@ -14,9 +14,9 @@
 #include <asm/procinfo.h>
 
 #define DEFINE(_sym, _val) \
-    __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) )
+    __asm__ __volatile__ ( "\n.ascii\"==>" #_sym " %0 " #_val "<==\"": : "i" (_val) )
 #define BLANK() \
-    __asm__ __volatile__ ( "\n->" : : )
+    __asm__ __volatile__ ( "\n.ascii\"==><==\"" : : )
 #define OFFSET(_sym, _str, _mem) \
     DEFINE(_sym, offsetof(_str, _mem));
 
diff --git a/xen/arch/arm/arm64/asm-offsets.c b/xen/arch/arm/arm64/asm-offsets.c
index d7572fa..769416e 100644
--- a/xen/arch/arm/arm64/asm-offsets.c
+++ b/xen/arch/arm/arm64/asm-offsets.c
@@ -13,9 +13,9 @@
 #include <asm/current.h>
 
 #define DEFINE(_sym, _val) \
-    __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) )
+    __asm__ __volatile__ ( "\n.ascii\"==>" #_sym " %0 " #_val "<==\"": : "i" (_val) )
 #define BLANK() \
-    __asm__ __volatile__ ( "\n->" : : )
+    __asm__ __volatile__ ( "\n.ascii\"==><==\"" : : )
 #define OFFSET(_sym, _str, _mem) \
     DEFINE(_sym, offsetof(_str, _mem));
 
diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c
index b0098b3..e677214 100644
--- a/xen/arch/x86/x86_64/asm-offsets.c
+++ b/xen/arch/x86/x86_64/asm-offsets.c
@@ -15,9 +15,9 @@
 #include <xen/multiboot.h>
 
 #define DEFINE(_sym, _val) \
-    __asm__ __volatile__ ( "\n->" #_sym " %0 " #_val : : "i" (_val) )
+    __asm__ __volatile__ ( "\n.ascii\"==>" #_sym " %0 " #_val "<==\"": : "i" (_val) )
 #define BLANK() \
-    __asm__ __volatile__ ( "\n->" : : )
+    __asm__ __volatile__ ( "\n.ascii\"==><==\"" : : )
 #define OFFSET(_sym, _str, _mem) \
     DEFINE(_sym, offsetof(_str, _mem));

  reply	other threads:[~2014-03-27 18:01 UTC|newest]

Thread overview: 152+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-25 16:55 [PATCH 00/34] Add clang support for ARM and cleanups Julien Grall
2014-03-25 16:55 ` [PATCH 01/34] xen: clang: Disable initializer-overrides warning Julien Grall
2014-03-26 11:51   ` Jan Beulich
2014-03-26 15:00     ` Julien Grall
2014-03-26 15:09       ` Tim Deegan
2014-03-26 15:11         ` Julien Grall
2014-03-25 16:55 ` [PATCH 02/34] xen: clang: Disable built-in assembler Julien Grall
2014-03-26 11:53   ` Jan Beulich
2014-03-26 13:16     ` Tim Deegan
2014-03-26 15:08       ` Julien Grall
2014-03-26 15:30         ` Jan Beulich
2014-03-27 18:01           ` Tim Deegan [this message]
2014-03-28  8:14             ` Jan Beulich
2014-03-28 11:28               ` Tim Deegan
2014-03-28 11:39                 ` Jan Beulich
2014-04-03 16:07                   ` [PATCH v2] asm-offsets: encode magic asm-offset runes as strings Tim Deegan
2014-04-03 16:25                     ` Ian Campbell
2014-04-04  7:11                     ` Jan Beulich
2014-04-23 13:17                     ` Julien Grall
2014-04-24 10:45                       ` Tim Deegan
2014-04-24 11:29                         ` Julien Grall
2014-03-29 22:55             ` [PATCH 02/34] xen: clang: Disable built-in assembler Julien Grall
2014-03-31  8:58               ` Jan Beulich
2014-04-01 13:11               ` Ian Campbell
2014-04-01 14:50                 ` Julien Grall
2014-04-01 15:28                   ` Ian Campbell
2014-04-01 15:52                     ` Julien Grall
2014-03-25 16:55 ` [PATCH 03/34] xen: clang: Support correctly cross-compile Julien Grall
2014-03-25 16:55 ` [PATCH 04/34] xen/compiler: Introduce always_unused define Julien Grall
2014-03-25 17:34   ` Stefano Stabellini
2014-03-25 17:56     ` Julien Grall
2014-03-25 16:55 ` [PATCH 05/34] xen/xsm: flask: Remove unused function avc_sidcmp Julien Grall
2014-03-25 17:36   ` Daniel De Graaf
2014-03-26 11:57   ` Jan Beulich
2014-03-26 16:11     ` Julien Grall
2014-03-26 16:42       ` Jan Beulich
2014-03-26 17:06         ` Julien Grall
2014-03-26 17:30           ` Julien Grall
2014-03-25 16:55 ` [PATCH 06/34] xen/x86: shadow: sh_next_page is only used when GUEST_PAGING_LEVELS = 2 Julien Grall
2014-03-25 16:55 ` [PATCH 07/34] xen/common: sched_sedf: Remove unused functions Julien Grall
2014-03-25 17:03   ` George Dunlap
2014-03-25 16:55 ` [PATCH 08/34] xen/common: rcupdate: Remove unused function rcu_batch_after Julien Grall
2014-03-25 16:55 ` [PATCH 09/34] xen/common: tmem: Remove dumb check in do_tmem_destroy_pool Julien Grall
2014-03-25 18:05   ` Andrew Cooper
2014-03-25 18:18     ` Julien Grall
2014-04-03 18:06       ` Konrad Rzeszutek Wilk
2014-05-22 16:01         ` [PATCH 09/34] xen/common: tmem: Remove dumb check in do_tmem_destroy_pool [and 2 more messages] Ian Jackson
2014-05-23  6:08           ` Jan Beulich
2014-05-23 10:23             ` Ian Jackson
2014-05-23 10:47               ` Jan Beulich
2014-03-25 16:55 ` [PATCH 10/34] xen/crypto: rijndael: Fix compilation with Clang 3.5 Julien Grall
2014-04-01 15:54   ` Keir Fraser
2014-03-25 16:55 ` [PATCH 11/34] xen/arm: Introduce __builtin_stack_pointer Julien Grall
2014-03-25 17:18   ` Ian Campbell
2014-03-25 18:01     ` Julien Grall
2014-03-26 10:31       ` Ian Campbell
2014-03-26 10:38         ` Julien Grall
2014-03-26 10:42           ` Ian Campbell
2014-03-25 16:55 ` [PATCH 12/34] xen/arm: psci: Don't need to check if vcpuid is negative Julien Grall
2014-03-27 16:42   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 13/34] xen/arm: gic: Introduce GIC_SGI_MAX Julien Grall
2014-03-25 18:19   ` Stefano Stabellini
2014-03-25 23:23     ` Julien Grall
2014-03-26  9:03       ` Ian Campbell
2014-03-26  9:41         ` Julien Grall
2014-03-26 10:21           ` Ian Campbell
2014-03-26  9:57         ` Julien Grall
2014-03-26 14:24           ` Stefano Stabellini
2014-03-25 16:55 ` [PATCH 14/34] xen/arm: mm: Mark check_memory_layout_alignment_constraints as unused Julien Grall
2014-03-27 16:42   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 15/34] xen/arm: traps: Mark check_stack_alignment_constraints " Julien Grall
2014-03-27 16:43   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 16/34] xen/arm: Guard correctly asm-arm/platforms/midway.h Julien Grall
2014-03-27 16:43   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 17/34] xen/arm: Guard correctly asm-arm/platform/omap5.h Julien Grall
2014-03-27 16:44   ` Ian Campbell
2014-03-27 16:52     ` Julien Grall
2014-03-27 17:06       ` Ian Campbell
2014-03-25 16:55 ` [PATCH 18/34] xen/arm: omap5: Correctly constify platform compatibility list Julien Grall
2014-03-27 17:03   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 19/34] xen/arm: Provide eabi wrapper for __aeabi_mem* functions Julien Grall
2014-03-25 17:25   ` Ian Campbell
2014-03-25 18:12     ` Julien Grall
2014-03-26 10:39       ` Ian Campbell
2014-03-26 15:38         ` Julien Grall
2014-03-26 15:46           ` Julien Grall
2014-03-26 15:47           ` Ian Campbell
2014-03-26 16:01             ` Julien Grall
2014-03-26 16:11               ` Ian Campbell
2014-03-26 16:16                 ` Julien Grall
2014-03-26 16:22                 ` Tim Deegan
2014-03-26 16:39                   ` Julien Grall
2014-03-26 16:42                     ` Ian Campbell
2014-03-26 16:46                     ` Tim Deegan
2014-03-26 16:52                       ` Julien Grall
2014-03-25 16:55 ` [PATCH 20/34] xen/common: cpupool: cpupool_unassign_cpu is only used internally Julien Grall
2014-03-31  5:02   ` Juergen Gross
2014-03-25 16:55 ` [PATCH 21/34] xen/common: domctl: Some functions are " Julien Grall
2014-04-01 17:40   ` Keir Fraser
2014-03-25 16:55 ` [PATCH 22/34] xen/common: tmem: " Julien Grall
2014-03-25 16:55 ` [PATCH 23/34] xen/sched: credit2: " Julien Grall
2014-03-25 17:03   ` George Dunlap
2014-03-25 16:55 ` [PATCH 24/34] xen/arm: setup: setup_cache is " Julien Grall
2014-03-27 17:07   ` Ian Campbell
2014-03-28 17:17     ` Julien Grall
2014-03-25 16:55 ` [PATCH 25/34] xen/arm: traps: show_stack " Julien Grall
2014-03-27 17:08   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 26/34] xen/arm: traps: Drop dump_guest_s1_walk Julien Grall
2014-03-27 17:09   ` Ian Campbell
2014-04-01 16:59     ` Julien Grall
2014-04-02  8:38       ` Ian Campbell
2014-03-25 16:55 ` [PATCH 27/34] xen/arm: time: move ticks_to_ns and ns_to_ticks in asm/time.h Julien Grall
2014-03-27 17:11   ` Ian Campbell
2014-03-25 16:55 ` [PATCH 28/34] xen/xsm: flask: flask_disable is only used internally Julien Grall
2014-03-25 17:36   ` Daniel De Graaf
2014-03-25 16:55 ` [PATCH 29/34] xen/xsm: flask: ss: remove unused function determine_oocontext Julien Grall
2014-03-25 17:37   ` Daniel De Graaf
2014-03-25 16:55 ` [PATCH 30/34] xen: Add missing includes on different files Julien Grall
2014-03-25 17:38   ` Daniel De Graaf
2014-03-26 12:57   ` Jan Beulich
2014-03-26 17:41     ` Julien Grall
2014-03-27  7:57       ` Jan Beulich
2014-04-09 16:06         ` Julien Grall
2014-04-09 16:17           ` Jan Beulich
2014-04-09 16:40             ` Julien Grall
2014-03-27 17:11   ` Ian Campbell
2014-03-27 17:30     ` Julien Grall
2014-03-27 17:39       ` Ian Campbell
2014-03-27 17:47         ` Julien Grall
2014-03-28  9:59           ` Ian Campbell
2014-04-01 17:58             ` Julien Grall
2014-04-02  8:45               ` Ian Campbell
2014-03-25 16:55 ` [PATCH 31/34] tools: Disable ignored-attributes warning when compiling with clang Julien Grall
2014-03-27 17:14   ` Ian Campbell
2014-03-27 17:49     ` Julien Grall
2014-09-13 18:42       ` [PATCH] clang: sizeof(type) must not have __attribute__(aligned) Marcin Cieslak
2014-09-16 16:21         ` Ian Campbell
2014-09-16 18:26           ` Julien Grall
2014-09-16 18:32             ` Ian Campbell
2014-09-17 10:50               ` Jan Beulich
2014-09-17 21:18                 ` Julien Grall
2014-03-25 16:55 ` [PATCH 32/34] tools/libxl: list_domains: shutdown is typed unsigned Julien Grall
2014-03-25 18:22   ` Andrew Cooper
2014-03-27 17:15     ` Ian Campbell
2014-03-25 16:55 ` [PATCH 33/34] tools/libxl: libxl__json_object_to_yajl_gen should return yajl_gen_status Julien Grall
2014-03-25 17:28   ` Ian Campbell
2014-03-27 12:37     ` Julien Grall
2014-03-27 17:16       ` [PATCH 33/34] tools/libxl: libxl__json_object_to_yajl_gen should Ian Campbell
2014-03-25 16:55 ` [PATCH 34/34] DO NOT APPLY xen/common: kernel: Workaround clang 3.5 Julien Grall
2014-03-25 18:22 ` [PATCH 00/34] Add clang support for ARM and cleanups Stefano Stabellini
2014-03-25 23:26   ` Julien Grall
2014-03-27 16:34 ` Tim Deegan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140327180134.GN91759@deinos.phlegethon.org \
    --to=tim@xen.org \
    --cc=JBeulich@suse.com \
    --cc=ian.campbell@citrix.com \
    --cc=julien.grall@linaro.org \
    --cc=keir@xen.org \
    --cc=stefano.stabellini@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.