Re: [2.6.30-rc8 KVM] gcc 3.3 dies at emulate_2op_cl().

From: Avi Kivity
Date: Sun Jun 07 2009 - 06:04:15 EST


Tetsuo Handa wrote:
Avi Kivity wrote:
I can eliminate _tmp by using lahf/sahf, but it's not going to be a trivial patch.

I don't know what's happening here.

If I comment out (_dst).bytes == 2 , it compiles.
The problem happens only "w" + "unsigned short" case.

# diff -urp arch/x86/kvm/x86_emulate.c~ arch/x86/kvm/x86_emulate.c
--- arch/x86/kvm/x86_emulate.c~ 2009-06-03 12:07:25.000000000 +0900
+++ arch/x86/kvm/x86_emulate.c 2009-06-07 17:52:05.591542272 +0900
@@ -461,8 +461,8 @@ static u32 group2_table[] = {
do { \
switch ((_dst).bytes) { \
case 2: \
- __emulate_2op_cl(_op, _cl, _src, _dst, _eflags, \
- "w", unsigned short); \
+ /* __emulate_2op_cl(_op, _cl, _src, _dst, _eflags, \
+ "w", unsigned short); */ \
break; \
case 4: \
__emulate_2op_cl(_op, _cl, _src, _dst, _eflags, \

It's a gcc register allocator bug. Bugs don't have to be reasonable.


--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.

--
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/