On 21/01/2016 23:49, Josh Poimboeuf wrote: > The callable functions created with the FOP* and FASTOP* macros are > missing ELF function annotations, which confuses tools like stacktool. > Properly annotate them. > > This adds some additional labels to the assembly, but the generated > binary code is unchanged (with the exception of instructions which have > embedded references to __LINE__). > > Signed-off-by: Josh Poimboeuf <jpoimboe@xxxxxxxxxx> > Cc: Gleb Natapov <gleb@xxxxxxxxxx> > Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> > Cc: kvm@xxxxxxxxxxxxxxx > --- > arch/x86/kvm/emulate.c | 29 +++++++++++++++++++++-------- > 1 file changed, 21 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 1505587..aa4d726 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -309,23 +309,29 @@ static void invalidate_registers(struct x86_emulate_ctxt *ctxt) > > static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > > -#define FOP_ALIGN ".align " __stringify(FASTOP_SIZE) " \n\t" > +#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_START(op) \ > extern void em_##op(struct fastop *fake); \ > asm(".pushsection .text, \"ax\" \n\t" \ > ".global em_" #op " \n\t" \ > - FOP_ALIGN \ > - "em_" #op ": \n\t" > + FOP_FUNC("em_" #op) > > #define FOP_END \ > ".popsection") > > -#define FOPNOP() FOP_ALIGN FOP_RET > +#define FOPNOP() \ > + FOP_FUNC(__stringify(__UNIQUE_ID(nop))) \ > + FOP_RET > > #define FOP1E(op, dst) \ > - FOP_ALIGN "10: " #op " %" #dst " \n\t" FOP_RET > + FOP_FUNC(#op "_" #dst) \ > + "10: " #op " %" #dst " \n\t" FOP_RET > > #define FOP1EEX(op, dst) \ > FOP1E(op, dst) _ASM_EXTABLE(10b, kvm_fastop_exception) > @@ -357,7 +363,8 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > FOP_END > > #define FOP2E(op, dst, src) \ > - FOP_ALIGN #op " %" #src ", %" #dst " \n\t" FOP_RET > + FOP_FUNC(#op "_" #dst "_" #src) \ > + #op " %" #src ", %" #dst " \n\t" FOP_RET > > #define FASTOP2(op) \ > FOP_START(op) \ > @@ -395,7 +402,8 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > FOP_END > > #define FOP3E(op, dst, src, src2) \ > - FOP_ALIGN #op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET > + FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \ > + #op " %" #src2 ", %" #src ", %" #dst " \n\t" FOP_RET > > /* 3-operand, word-only, src2=cl */ > #define FASTOP3WCL(op) \ > @@ -407,7 +415,12 @@ static int fastop(struct x86_emulate_ctxt *ctxt, void (*fop)(struct fastop *)); > FOP_END > > /* Special case for SETcc - 1 instruction per cc */ > -#define FOP_SETCC(op) ".align 4; " #op " %al; ret \n\t" > +#define FOP_SETCC(op) \ > + ".align 4 \n\t" \ > + ".type " #op ", @function \n\t" \ > + #op ": \n\t" \ > + #op " %al \n\t" \ > + FOP_RET > > asm(".global kvm_fastop_exception \n" > "kvm_fastop_exception: xor %esi, %esi; ret"); > Acked-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html