mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Robin Murphy <robin.murphy@arm.com>
To: Arnd Bergmann <arnd@arndb.de>,
	Christoffer Dall <christoffer.dall@linaro.org>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Russell King <linux@armlinux.org.uk>
Cc: Andi Kleen <ak@linux.intel.com>,
	Julien Thierry <julien.thierry@arm.com>,
	Nicolas Pitre <nico@linaro.org>,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org,
	Richard Earnshaw <rearnsha@gcc.gnu.org>,
	Tamar Christina <tnfchris@gcc.gnu.org>,
	kvmarm@lists.cs.columbia.edu,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/2] ARM: kvm: fix building with gcc-8
Date: Fri, 2 Feb 2018 16:23:48 +0000	[thread overview]
Message-ID: <e5afa875-56a5-fca4-1fdd-2c0968b35790@arm.com> (raw)
In-Reply-To: <2cff070a-357d-c5f5-9ec6-036d93112ce4@arm.com>

On 02/02/18 15:55, Robin Murphy wrote:
> On 02/02/18 15:07, Arnd Bergmann wrote:
>> In banked-sr.c, we use a top-level '__asm__(".arch_extension virt")'
>> statement to allow compilation of a multi-CPU kernel for ARMv6
>> and older ARMv7-A that don't normally support access to the banked
>> registers.
>>
>> This is considered to be a programming error by the gcc developers
>> and will no longer work in gcc-8, where we now get a build error:
>>
>> /tmp/cc4Qy7GR.s:34: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,SP_usr'
>> /tmp/cc4Qy7GR.s:41: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,ELR_hyp'
>> /tmp/cc4Qy7GR.s:55: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,SP_svc'
>> /tmp/cc4Qy7GR.s:62: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,LR_svc'
>> /tmp/cc4Qy7GR.s:69: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,SPSR_svc'
>> /tmp/cc4Qy7GR.s:76: Error: Banked registers are not available with 
>> this architecture. -- `mrs r3,SP_abt'
>>
>> Passign the '-march-armv7ve' flag to gcc works, and is ok here, because
>> we know the functions won't ever be called on pre-ARMv7VE machines.
>> Unfortunately, older compiler versions (4.8 and earlier) do not 
>> understand
>> that flag, so we still need to keep the asm around.
>>
>> Backporting to stable kernels (4.6+) is needed to allow those to be built
>> with future compilers as well.
> 
> Is "-Wa,arch=armv7-a+virt" (as we appear to do for a couple of files 
> already) viable as a possibly cleaner alternative, or is GCC itself now 
> policing the contents of inline asms?

In fact, looking at the binutils history, any version capable of 
assembling this file should understand that (modulo my typo), so 
hopefully it ought to be feasible to replace these global asms with 
assembler flags entirely.

Robin.

>> Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84129
>> Fixes: 33280b4cd1dc ("ARM: KVM: Add banked registers save/restore")
>> Cc: stable@vger.kernel.org
>> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
>> ---
>>   arch/arm/kvm/hyp/Makefile    | 5 +++++
>>   arch/arm/kvm/hyp/banked-sr.c | 4 ++++
>>   2 files changed, 9 insertions(+)
>>
>> diff --git a/arch/arm/kvm/hyp/Makefile b/arch/arm/kvm/hyp/Makefile
>> index 5638ce0c9524..63d6b404d88e 100644
>> --- a/arch/arm/kvm/hyp/Makefile
>> +++ b/arch/arm/kvm/hyp/Makefile
>> @@ -7,6 +7,8 @@ ccflags-y += -fno-stack-protector 
>> -DDISABLE_BRANCH_PROFILING
>>   KVM=../../../../virt/kvm
>> +CFLAGS_ARMV7VE           :=$(call cc-option, -march=armv7ve)
>> +
>>   obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v2-sr.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
>> @@ -15,7 +17,10 @@ obj-$(CONFIG_KVM_ARM_HOST) += tlb.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += cp15-sr.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += vfp.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += banked-sr.o
>> +CFLAGS_banked-sr.o       += $(CFLAGS_ARMV7VE)
>> +
>>   obj-$(CONFIG_KVM_ARM_HOST) += entry.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += hyp-entry.o
>>   obj-$(CONFIG_KVM_ARM_HOST) += switch.o
>> +CFLAGS_switch.o           += $(CFLAGS_ARMV7VE)
>>   obj-$(CONFIG_KVM_ARM_HOST) += s2-setup.o
>> diff --git a/arch/arm/kvm/hyp/banked-sr.c b/arch/arm/kvm/hyp/banked-sr.c
>> index 111bda8cdebd..be4b8b0a40ad 100644
>> --- a/arch/arm/kvm/hyp/banked-sr.c
>> +++ b/arch/arm/kvm/hyp/banked-sr.c
>> @@ -20,6 +20,10 @@
>>   #include <asm/kvm_hyp.h>
>> +/*
>> + * gcc before 4.9 doesn't understand -march=armv7ve, so we have to
>> + * trick the assembler.
>> + */
>>   __asm__(".arch_extension     virt");
> 
> Would it be worth wrapping this in a preprocessor check for compilers 
> that won't understand the command-line flag? I believe LLVM tends to 
> choke on these global asm statements entirely, so minimising exposure 
> might be a good thing to do in general.
> 
> Robin.
> 
>>   void __hyp_text __banked_save_state(struct kvm_cpu_context *ctxt)
>>
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2018-02-02 16:23 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-02 15:07 Arnd Bergmann
2018-02-02 15:07 ` [PATCH 2/2] ARM: xscale: fix gcc-8 build Arnd Bergmann
2018-02-02 16:39   ` Nicolas Pitre
2018-02-02 15:55 ` [PATCH 1/2] ARM: kvm: fix building with gcc-8 Robin Murphy
2018-02-02 16:23   ` Robin Murphy [this message]
2018-02-02 16:29     ` Arnd Bergmann
2018-02-02 16:30       ` Robin Murphy
2018-02-04 18:45 ` Christoffer Dall
2018-02-04 20:57   ` Arnd Bergmann
2018-02-05  8:33     ` Christoffer Dall

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=e5afa875-56a5-fca4-1fdd-2c0968b35790@arm.com \
    --to=robin.murphy@arm.com \
    --cc=ak@linux.intel.com \
    --cc=arnd@arndb.de \
    --cc=christoffer.dall@linaro.org \
    --cc=julien.thierry@arm.com \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=marc.zyngier@arm.com \
    --cc=nico@linaro.org \
    --cc=rearnsha@gcc.gnu.org \
    --cc=stable@vger.kernel.org \
    --cc=tnfchris@gcc.gnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®