On Wed, Aug 02, 2023 at 02:41:07PM +0530, Nikunj A Dadhania wrote: > commit 7f4b5cde2409 ("kvm: Disable objtool frame pointer checking for > vmenter.S") had added the vmenter.o file to the exception list. > > objtool gives the following warnings in the newer kernel builds: > > arch/x86/kvm/kvm-amd.o: warning: objtool: __svm_vcpu_run+0x17d: BP used as a scratch register > arch/x86/kvm/kvm-amd.o: warning: objtool: __svm_sev_es_vcpu_run+0x72: BP used as a scratch register > > As kvm-amd.o is a link time object, skipping the kvm-amd.o is not possible > as per the objtool documentation, better to skip the offending functions. > > Functions __svm_vcpu_run() and __svm_sev_es_vcpu_run() saves and restores > RBP. Below is the snippet: > > SYM_FUNC_START(__svm_vcpu_run) > push %_ASM_BP > <…> > pop %_ASM_BP > RET > > Add exceptions to skip both these functions. Remove the > OBJECT_FILES_NON_STANDARD for vmenter.o > > Cc: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> > Cc: Tom Lendacky <thomas.lendacky@xxxxxxx> > Cc: Sean Christopherson <seanjc@xxxxxxxxxx> > Reported-by: Ravi Bangoria <ravi.bangoria@xxxxxxx> > Signed-off-by: Nikunj A Dadhania <nikunj@xxxxxxx> > --- > arch/x86/kvm/Makefile | 4 ---- > arch/x86/kvm/svm/vmenter.S | 2 ++ > 2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/arch/x86/kvm/Makefile b/arch/x86/kvm/Makefile > index 80e3fe184d17..0c5c2f090e93 100644 > --- a/arch/x86/kvm/Makefile > +++ b/arch/x86/kvm/Makefile > @@ -3,10 +3,6 @@ > ccflags-y += -I $(srctree)/arch/x86/kvm > ccflags-$(CONFIG_KVM_WERROR) += -Werror > > -ifeq ($(CONFIG_FRAME_POINTER),y) > -OBJECT_FILES_NON_STANDARD_vmenter.o := y > -endif > - > include $(srctree)/virt/kvm/Makefile.kvm > > kvm-y += x86.o emulate.o i8259.o irq.o lapic.o \ > diff --git a/arch/x86/kvm/svm/vmenter.S b/arch/x86/kvm/svm/vmenter.S > index 8e8295e774f0..8fd37d661c33 100644 > --- a/arch/x86/kvm/svm/vmenter.S > +++ b/arch/x86/kvm/svm/vmenter.S > @@ -289,6 +289,7 @@ SYM_FUNC_START(__svm_vcpu_run) > _ASM_EXTABLE(7b, 70b) > > SYM_FUNC_END(__svm_vcpu_run) > +STACK_FRAME_NON_STANDARD(__svm_vcpu_run) > > /** > * __svm_sev_es_vcpu_run - Run a SEV-ES vCPU via a transition to SVM guest mode > @@ -388,3 +389,4 @@ SYM_FUNC_START(__svm_sev_es_vcpu_run) > _ASM_EXTABLE(1b, 3b) > > SYM_FUNC_END(__svm_sev_es_vcpu_run) > +STACK_FRAME_NON_STANDARD_FP(__svm_sev_es_vcpu_run) Urgh... no, no, this is all broken. By marking them with STACK_FRAME_NON_STANDARD you will get no ORC data at all, and then you also violate the normal framepointer calling convention. This means that if you need to unwind here you're up a creek without no paddles on. Objtool complains for a reason, your changelog does not provide a counter argument for that reason. Hardware/firmware interfaces that require one to violate basic calling conventions are horrible crap.