From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:40360 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752763AbeEHR62 (ORCPT ); Tue, 8 May 2018 13:58:28 -0400 Subject: Re: [PATCH] compiler-gcc: disable -ftracer for __noclone functions To: Nadav Amit Cc: Linux Kernel Mailing List , kvm list , lkml@tlinx.org, Andrew Morton , Michal Marek , stable@vger.kernel.org References: <1459410252-15531-1-git-send-email-pbonzini@redhat.com> <6BAD64FE-CC59-40C3-9C42-90BB8EEE5453@gmail.com> From: Paolo Bonzini Message-ID: <86f2fb42-b0eb-46d2-0aed-7efdb306bfe0@redhat.com> Date: Tue, 8 May 2018 19:58:25 +0200 MIME-Version: 1.0 In-Reply-To: <6BAD64FE-CC59-40C3-9C42-90BB8EEE5453@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org List-ID: On 05/05/2018 19:22, Nadav Amit wrote: > Paolo Bonzini wrote: > >> -ftracer can duplicate asm blocks causing compilation to fail in >> noclone functions. For example, KVM declares a global variable >> in an asm like >> >> asm("2: ... \n >> .pushsection data \n >> .global vmx_return \n >> vmx_return: .long 2b"); >> >> and -ftracer causes a double declaration. >> >> Cc: Andrew Morton >> Cc: Michal Marek >> Cc: stable@vger.kernel.org >> Cc: kvm@vger.kernel.org >> Reported-by: Linda Walsh >> Signed-off-by: Paolo Bonzini >> --- >> include/linux/compiler-gcc.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h >> index 22ab246feed3..eeae401a2412 100644 >> --- a/include/linux/compiler-gcc.h >> +++ b/include/linux/compiler-gcc.h >> @@ -199,7 +199,7 @@ >> #define unreachable() __builtin_unreachable() >> >> /* Mark a function definition as prohibited from being cloned. */ >> -#define __noclone __attribute__((__noclone__)) >> +#define __noclone __attribute__((__noclone__, __optimize__("no-tracer"))) > > [ Bringing the thread back from the dead for context ] > > Setting different optimization attributes to certain functions apparently > prevents gcc from inlining functions with different “optimizations”. This > results in poor compilation - most notably of vmx_vcpu_run() - and causes > short functions such as to_vmx() not to be inlined. Hmm, I suppose we need to disable -fno-tracer globally... Has this changed in recent versions of GCC? Paolo