* [PATCH v6] x86/clang: allow integrated assembler usage
@ 2018-02-23 14:11 Roger Pau Monne
2018-02-26 11:16 ` Andrew Cooper
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Roger Pau Monne @ 2018-02-23 14:11 UTC (permalink / raw)
To: xen-devel
Cc: Stefano Stabellini, Wei Liu, George Dunlap, Andrew Cooper,
Ian Jackson, Tim Deegan, Jan Beulich, Roger Pau Monne
If the required features are present.
Modify as-option-add to add an option in case the test fails, and use
it to detect whether the required clang integrated assembler features
are present.
This patch has been tested with clang 3.5, clang 6, gcc 6.4.0 without
retpoline support and gcc 7.3.1 with retpoline support.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Cc: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: George Dunlap <George.Dunlap@eu.citrix.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Jan Beulich <jbeulich@suse.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Stefano Stabellini <sstabellini@kernel.org>
Cc: Tim Deegan <tim@xen.org>
Cc: Wei Liu <wei.liu2@citrix.com>
---
Changes since v5:
- Use as-option-add.
- Add a test to check if as supports .skip with labels.
- Use as-option-add to check for .macro persistence.
Changes since v4:
- Do not use else ifeq on the same line to be compatible with make
3.8.
- Modify as-insn-check to allow adding flags if the test case fails.
Changes since v3:
- Do not modify how the thunk is included, clang upstream (and 6) has
been fixed to propagate .macro-s between asm()-s.
Changes since v1:
- Use as-insn to check if the assembler supports .include.
- Open code a check for whether the assembler forgets .macro-s
between asm()-s.
---
Config.mk | 9 +++++----
xen/Rules.mk | 8 ++++++--
xen/arch/x86/Rules.mk | 15 +++++++++++++++
3 files changed, 26 insertions(+), 6 deletions(-)
diff --git a/Config.mk b/Config.mk
index ab05286630..b5ca57ce90 100644
--- a/Config.mk
+++ b/Config.mk
@@ -163,13 +163,14 @@ as-insn = $(if $(shell echo 'void _(void) { asm volatile ( $(2) ); }' \
| $(filter-out -M% %.d -include %/include/xen/config.h,$(1)) \
-c -x c -o /dev/null - 2>&1),$(4),$(3))
-# as-option-add: Add an option to compilation flags, but only if insn is
-# supported by assembler.
-# Usage: $(call as-option-add,CFLAGS,CC,"insn",option-yes)
-as-option-add = $(eval $(call as-option-add-closure,$(1),$(2),$(3),$(4)))
+# as-option-add: Conditionally add options to flags
+# Usage: $(call as-option-add,CFLAGS,CC,"insn",option-yes,option-no)
+as-option-add = $(eval $(call as-option-add-closure,$(1),$(2),$(3),$(4),$(5)))
define as-option-add-closure
ifeq ($$(call as-insn,$$($(2)) $$($(1)),$(3),y,n),y)
$(1) += $(4)
+ else
+ $(1) += $(5)
endif
endef
diff --git a/xen/Rules.mk b/xen/Rules.mk
index ef26b8d1bb..5337e206ee 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -70,8 +70,12 @@ endif
AFLAGS-y += -D__ASSEMBLY__
-# Clang's built-in assembler can't handle embedded .include's
-CFLAGS-$(clang) += -no-integrated-as
+# Older clang's built-in assembler doesn't understand .skip with labels:
+# https://bugs.llvm.org/show_bug.cgi?id=27369
+ifeq ($(clang),y)
+$(call as-option-add,CFLAGS,CC,".L0:\n.L1:\n.skip (.L1 - .L0)",,\
+ -no-integrated-as)
+endif
ALL_OBJS := $(ALL_OBJS-y)
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 4561713368..9897deaab9 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -44,3 +44,18 @@ endif
# Set up the assembler include path properly for older toolchains.
CFLAGS += -Wa,-I$(BASEDIR)/include
+
+ifeq ($(clang),y)
+# Note: Any test which adds -no-integrated-as will cause subsequent tests to
+# succeed, and not trigger further additions.
+
+# Check whether clang asm()-s support .include.
+$(call as-option-add,CFLAGS,CC,".include \"asm/indirect_thunk_asm.h\"",,\
+ -no-integrated-as)
+
+# Check whether clang keeps .macro-s between asm()-s:
+# https://bugs.llvm.org/show_bug.cgi?id=36110
+$(call as-option-add,CFLAGS,CC,\
+ ".macro FOO\n.endm\"); asm volatile (\".macro FOO\n.endm",\
+ -no-integrated-as)
+endif
--
2.16.1
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v6] x86/clang: allow integrated assembler usage
2018-02-23 14:11 [PATCH v6] x86/clang: allow integrated assembler usage Roger Pau Monne
@ 2018-02-26 11:16 ` Andrew Cooper
2018-02-26 11:22 ` Jan Beulich
2018-02-26 11:24 ` Wei Liu
2 siblings, 0 replies; 4+ messages in thread
From: Andrew Cooper @ 2018-02-26 11:16 UTC (permalink / raw)
To: Roger Pau Monne, xen-devel
Cc: Stefano Stabellini, Wei Liu, George Dunlap, Ian Jackson,
Tim Deegan, Jan Beulich
On 23/02/18 14:11, Roger Pau Monne wrote:
> If the required features are present.
>
> Modify as-option-add to add an option in case the test fails, and use
> it to detect whether the required clang integrated assembler features
> are present.
>
> This patch has been tested with clang 3.5, clang 6, gcc 6.4.0 without
> retpoline support and gcc 7.3.1 with retpoline support.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
FWIW, I've just tested this in combination with my alternatives series
and everything is working as expected. Strictly speaking, it does need
an ack from someone else as it is now SoB myself and Roger.
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v6] x86/clang: allow integrated assembler usage
2018-02-23 14:11 [PATCH v6] x86/clang: allow integrated assembler usage Roger Pau Monne
2018-02-26 11:16 ` Andrew Cooper
@ 2018-02-26 11:22 ` Jan Beulich
2018-02-26 11:24 ` Wei Liu
2 siblings, 0 replies; 4+ messages in thread
From: Jan Beulich @ 2018-02-26 11:22 UTC (permalink / raw)
To: Roger Pau Monne
Cc: Stefano Stabellini, Wei Liu, George Dunlap, Andrew Cooper,
IanJackson, Tim Deegan, xen-devel
>>> On 23.02.18 at 15:11, <roger.pau@citrix.com> wrote:
> If the required features are present.
>
> Modify as-option-add to add an option in case the test fails, and use
> it to detect whether the required clang integrated assembler features
> are present.
>
> This patch has been tested with clang 3.5, clang 6, gcc 6.4.0 without
> retpoline support and gcc 7.3.1 with retpoline support.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v6] x86/clang: allow integrated assembler usage
2018-02-23 14:11 [PATCH v6] x86/clang: allow integrated assembler usage Roger Pau Monne
2018-02-26 11:16 ` Andrew Cooper
2018-02-26 11:22 ` Jan Beulich
@ 2018-02-26 11:24 ` Wei Liu
2 siblings, 0 replies; 4+ messages in thread
From: Wei Liu @ 2018-02-26 11:24 UTC (permalink / raw)
To: Roger Pau Monne
Cc: Stefano Stabellini, Wei Liu, George Dunlap, Andrew Cooper,
Ian Jackson, Tim Deegan, Jan Beulich, xen-devel
On Fri, Feb 23, 2018 at 02:11:00PM +0000, Roger Pau Monne wrote:
> If the required features are present.
>
> Modify as-option-add to add an option in case the test fails, and use
> it to detect whether the required clang integrated assembler features
> are present.
>
> This patch has been tested with clang 3.5, clang 6, gcc 6.4.0 without
> retpoline support and gcc 7.3.1 with retpoline support.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-02-26 11:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-23 14:11 [PATCH v6] x86/clang: allow integrated assembler usage Roger Pau Monne
2018-02-26 11:16 ` Andrew Cooper
2018-02-26 11:22 ` Jan Beulich
2018-02-26 11:24 ` Wei Liu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).