From: Sean Christopherson <sean.j.christopherson@intel.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
peterx@redhat.com, Yang Weijiang <weijiang.yang@intel.com>,
stable@vger.kernel.org
Subject: Re: [PATCH] selftests: kvm: Use a shorter encoding to clear RAX
Date: Mon, 17 Aug 2020 10:35:48 -0700 [thread overview]
Message-ID: <20200817173548.GH22407@linux.intel.com> (raw)
In-Reply-To: <20200817172034.26673-1-pbonzini@redhat.com>
On Mon, Aug 17, 2020 at 01:20:34PM -0400, Paolo Bonzini wrote:
> From: Yang Weijiang <weijiang.yang@intel.com>
This shouldn't be here without Weijiang's SOB.
> If debug_regs.c is built with newer binutils, the resulting binary is "optimized"
> by the assembler:
>
> asm volatile("ss_start: "
> "xor %%rax,%%rax\n\t"
> "cpuid\n\t"
> "movl $0x1a0,%%ecx\n\t"
> "rdmsr\n\t"
> : : : "rax", "ecx");
>
> is translated to :
>
> 000000000040194e <ss_start>:
> 40194e: 31 c0 xor %eax,%eax <----- rax->eax?
> 401950: 0f a2 cpuid
> 401952: b9 a0 01 00 00 mov $0x1a0,%ecx
> 401957: 0f 32 rdmsr
>
> As you can see rax is replaced with eax in target binary code.
> This causes a difference is the length of xor instruction (2 Byte vs 3 Byte),
> and makes the hard-coded instruction length check fail:
>
> /* Instruction lengths starting at ss_start */
> int ss_size[4] = {
> 3, /* xor */ <-------- 2 or 3?
> 2, /* cpuid */
> 5, /* mov */
> 2, /* rdmsr */
> };
>
> Encode the shorter version directly and, while at it, fix the "clobbers"
> of the asm.
>
> Reported-by: Yang Weijiang <weijiang.yang@intel.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Sean Christopherson <sean.j.christopherson@intel.com>
> ---
> tools/testing/selftests/kvm/x86_64/debug_regs.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testing/selftests/kvm/x86_64/debug_regs.c
> index 8162c58a1234..b8d14f9db5f9 100644
> --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c
> +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c
> @@ -40,11 +40,11 @@ static void guest_code(void)
>
> /* Single step test, covers 2 basic instructions and 2 emulated */
> asm volatile("ss_start: "
> - "xor %%rax,%%rax\n\t"
> + "xor %%eax,%%eax\n\t"
> "cpuid\n\t"
> "movl $0x1a0,%%ecx\n\t"
> "rdmsr\n\t"
> - : : : "rax", "ecx");
> + : : : "eax", "ebx", "ecx", "edx");
>
> /* DR6.BD test */
> asm volatile("bd_start: mov %%dr0, %%rax" : : : "rax");
> --
> 2.26.2
>
next prev parent reply other threads:[~2020-08-17 17:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-17 17:20 [PATCH] selftests: kvm: Use a shorter encoding to clear RAX Paolo Bonzini
2020-08-17 17:35 ` Sean Christopherson [this message]
2020-08-18 13:21 ` Yang Weijiang
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=20200817173548.GH22407@linux.intel.com \
--to=sean.j.christopherson@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=stable@vger.kernel.org \
--cc=weijiang.yang@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.