kvm-unit-tests: fix build on x86-64 with specific gcc versions
PATCH 1/1 kvm-unit-tests: fix build on x86-64 with specific gcc versions
kvm-unit-tests uses the following code on x86/x86-64:
static inline u64 scale_delta(u64 delta, u64 mul_frac)
{
u64 product, unused;
__asm__ (
"mul %3"
: "=d" (product), "=a" (unused) : "1" (delta), "rm" ((u64)mul_frac) );
return product;
}The "mul" instruction does not have a suffix that indicates the width of the data being multiplied. When the data is passed in a register, there is no need to specify the width, but with some gcc versions, the data is passed as a memory reference, and therefore the assembler does not know the width of the data to be multiplied. It causes the following build failure:
x86/hyperv_clock.c: Assembler messages:x86/hyperv_clock.c:21: Error: no instruction mnemonic suffix given and no register operands; can't size instruction
Since the data being multiplied is 64 bit, we explicitly specify the instruction as being "mulq".
Fixes:
http://autobuild.buildroot.net/results/a4a65d01f049db83a93de92660f228dd18532625/
--- ...clock-be-explicit-about-mul-instruction-d.patch | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 package/kvm-unit-tests/0001-x86-hyperv_clock-be-explicit-about-mul-instruction-d.patch
package/kvm-unit-tests/0001-x86-hyperv_clock-be-explicit-about-mul-instruction-d.patch new file +35 -0
@@ -0,0 +1,35 @@ +From 022ae220d6e7b5bd064bc8698c271dca4dac7d8c Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <[email protected]> +Date: Mon, 8 May 2017 22:27:25 +0200 +Subject: [PATCH] x86/hyperv_clock: be explicit about mul instruction data size + +With gcc 4.7.2, the build fails with: + +x86/hyperv_clock.c: Assembler messages: +x86/hyperv_clock.c:21: Error: no instruction mnemonic suffix given and no register operands; can't size instruction + +In order to avoid this, make the mul instruction data size explicit by +adding the appropriate suffix. It operates on 64-bit data, so use +"mulq". + +Signed-off-by: Thomas Petazzoni <[email protected]> +--- + x86/hyperv_clock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/x86/hyperv_clock.c b/x86/hyperv_clock.c +index 8b1deba..6c4dd56 100644 +--- a/x86/hyperv_clock.c ++++ b/x86/hyperv_clock.c +@@ -19,7 +19,7 @@ static inline u64 scale_delta(u64 delta, u64 mul_frac) + u64 product, unused; + + __asm__ ( +- "mul %3" ++ "mulq %3" + : "=d" (product), "=a" (unused) : "1" (delta), "rm" ((u64)mul_frac) ); + + return product; +-- +2.7.4 +
Signature · 1 line
2.7.4
PATCH 1/1 kvm-unit-tests: fix build on x86-64 with specific gcc versions
Quoted 24 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Thomas" == Thomas Petazzoni <[email protected]> writes:
kvm-unit-tests uses the following code on x86/x86-64:
static inline u64scale_delta(u64 delta, u64 mul_frac){ u64 product, unused; __asm__ ( "mul %3" : "=d" (product), "=a" (unused) : "1" (delta), "rm" ((u64)mul_frac) ); return product; }The "mul" instruction does not have a suffix that indicates the width of the data being multiplied. When the data is passed in a register, there is no need to specify the width, but with some gcc versions, the data is passed as a memory reference, and therefore the assembler does not know the width of the data to be multiplied. It causes the following build failure:
x86/hyperv_clock.c: Assembler messages:x86/hyperv_clock.c:21: Error: no instruction mnemonic suffix given and no register operands; can't size instruction
Quoted 8 lines
Since the data being multiplied is 64 bit, we explicitly specify the instruction as being "mulq".
Fixes:
http://autobuild.buildroot.net/results/a4a65d01f049db83a93de92660f228dd18532625/
Signed-off-by Thomas Petazzoni <[email protected]>
Committed to 2017.02.x, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 1/1 kvm-unit-tests: fix build on x86-64 with specific gcc versions
In reply to Thomas PetazzoniHello,
Quoted 3 lines · Thomas Petazzoni
...clock-be-explicit-about-mul-instruction-d.patch | 35 ++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 package/kvm-unit-tests/0001-x86-hyperv_clock-be-explicit-about-mul-instruction-d.patch
This patch has been accepted upstream:
https://git.kernel.org/pub/scm/virt/kvm/kvm-unit-tests.git/commit/?id=45276b5860522921c77fb3ccc1458ff5f223c3c6.
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux and Kernel engineering http://free-electrons.com