Messages in this thread | | | Subject | Re: [PATCH 02/22] x86/kvm: Fix fastop function ELF metadata | From | Paolo Bonzini <> | Date | Mon, 15 Jul 2019 11:05:00 +0200 |
| |
On 15/07/19 02:36, Josh Poimboeuf wrote: > Some of the fastop functions, e.g. em_setcc(), are actually just used as > global labels which point to blocks of functions. The global labels are > incorrectly annotated as functions. Also the functions themselves don't > have size annotations. > > Fixes a bunch of warnings like the following: > > arch/x86/kvm/emulate.o: warning: objtool: seto() is missing an ELF size annotation > arch/x86/kvm/emulate.o: warning: objtool: em_setcc() is missing an ELF size annotation > arch/x86/kvm/emulate.o: warning: objtool: setno() is missing an ELF size annotation > arch/x86/kvm/emulate.o: warning: objtool: setc() is missing an ELF size annotation > > Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com> > --- > Cc: Paolo Bonzini <pbonzini@redhat.com> > Cc: Radim Krčmář <rkrcmar@redhat.com> > --- > arch/x86/kvm/emulate.c | 44 +++++++++++++++++++++++++++++------------- > 1 file changed, 31 insertions(+), 13 deletions(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 8e409ad448f9..718f7d9afedc 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -312,29 +312,42 @@ static void invalidate_registers(struct x86_emulate_ctxt *ctxt) > > static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > > -#define FOP_FUNC(name) \ > +#define __FOP_FUNC(name) \ > ".align " __stringify(FASTOP_SIZE) " \n\t" \ > ".type " name ", @function \n\t" \ > name ":\n\t" > > -#define FOP_RET "ret \n\t" > +#define FOP_FUNC(name) \ > + __FOP_FUNC(#name) > + > +#define __FOP_RET(name) \ > + "ret \n\t" \ > + ".size " name ", .-" name "\n\t" > + > +#define FOP_RET(name) \ > + __FOP_RET(#name) > > #define FOP_START(op) \ > extern void em_##op(struct fastop *fake); \ > asm(".pushsection .text, \"ax\" \n\t" \ > ".global em_" #op " \n\t" \ > - FOP_FUNC("em_" #op) > + ".align " __stringify(FASTOP_SIZE) " \n\t" \ > + "em_" #op ":\n\t" > > #define FOP_END \ > ".popsection") > > +#define __FOPNOP(name) \ > + __FOP_FUNC(name) \ > + __FOP_RET(name) > + > #define FOPNOP() \ > - FOP_FUNC(__stringify(__UNIQUE_ID(nop))) \ > - FOP_RET > + __FOPNOP(__stringify(__UNIQUE_ID(nop))) > > #define FOP1E(op, dst) \ > - FOP_FUNC(#op "_" #dst) \ > - "10: " #op " %" #dst " \n\t" FOP_RET > + __FOP_FUNC(#op "_" #dst) \ > + "10: " #op " %" #dst " \n\t" \ > + __FOP_RET(#op "_" #dst) > > #define FOP1EEX(op, dst) \ > FOP1E(op, dst) _ASM_EXTABLE(10b, kvm_fastop_exception) > @@ -366,8 +379,9 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > FOP_END > > #define FOP2E(op, dst, src) \ > - FOP_FUNC(#op "_" #dst "_" #src) \ > - #op " %" #src ", %" #dst " \n\t" FOP_RET > + __FOP_FUNC(#op "_" #dst "_" #src) \ > + #op " %" #src ", %" #dst " \n\t" \ > + __FOP_RET(#op "_" #dst "_" #src) > > #define FASTOP2(op) \ > FOP_START(op) \ > @@ -405,8 +419,9 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > FOP_END > > #define FOP3E(op, dst, src, src2) \ > - FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \ > - #op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET > + __FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \ > + #op " %" #src2 ", %" #src ", %" #dst " \n\t"\ > + __FOP_RET(#op "_" #dst "_" #src "_" #src2) > > /* 3-operand, word-only, src2=cl */ > #define FASTOP3WCL(op) \ > @@ -423,7 +438,7 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > ".type " #op ", @function \n\t" \ > #op ": \n\t" \ > #op " %al \n\t" \ > - FOP_RET > + __FOP_RET(#op) > > asm(".pushsection .fixup, \"ax\"\n" > ".global kvm_fastop_exception \n" > @@ -449,7 +464,10 @@ FOP_SETCC(setle) > FOP_SETCC(setnle) > FOP_END; > > -FOP_START(salc) "pushf; sbb %al, %al; popf \n\t" FOP_RET > +FOP_START(salc) > +FOP_FUNC(salc) > +"pushf; sbb %al, %al; popf \n\t" > +FOP_RET(salc) > FOP_END; > > /* >
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
| |