Re: 2.6.19-rc5-mm1 fails to compile with gcc 4.2

From: Avi Kivity
Date: Sun Nov 12 2006 - 08:55:38 EST


Bernhard Rosenkraenzer wrote:
On Sunday, 12. November 2006 14:43, Avi Kivity wrote:
'sel' is a variable, so gcc can't provide it as an immediate operand.
Specifying it as "rm" instead of "g" would have been better, but can't
have any real influence.

Specifying it as "rm" instead of "g" does fix it -- patch attached.

Well, for the code you posted in in the gcc bug, it probaby generated
something like

mov $0, %fs

which is indeed invalid assembly. But the kvm miscompile is something
else (running out of registers or something like that).

What am I overlooking? The code is the exact same (except I replaced "u16" with "unsigned short" to avoid the #include), and produces the exact same error message, and the fix is the same ("g" -> "rm").

Well, since it works, I guess I'm overlooking something. Maybe it's just a bad error message from gcc.

I'll apply this. Thanks!

------------------------------------------------------------------------

--- linux-2.6.18/drivers/kvm/kvm_main.c.ark 2006-11-12 14:40:09.000000000 +0100
+++ linux-2.6.18/drivers/kvm/kvm_main.c 2006-11-12 14:44:57.000000000 +0100
@@ -150,12 +150,12 @@
static void load_fs(u16 sel)
{
- asm ("mov %0, %%fs" : : "g"(sel));
+ asm ("mov %0, %%fs" : : "rm"(sel));
}
static void load_gs(u16 sel)
{
- asm ("mov %0, %%gs" : : "g"(sel));
+ asm ("mov %0, %%gs" : : "rm"(sel));
}
#ifndef load_ldt


--
error compiling committee.c: too many arguments to function

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/