Re: KVM Test result, kernel 81e4400.., userspace 08385e4.. , One new issue

Avi Kivity
2008-02-25T17:40:05Z

Alexander Graf wrote:
>
> The ebx store was done because of PIC code, which does not allow ebx
> to get clobbered. If we are not in PIC code, =r contains ebx as GPR
> though, so the assumption that ebx needs to be restored was wrong
> then. This new version only enables the store/restore code if i386 and
> PIC code are used. There is no need to distinguish between x86_64 and
> i386 for the other cases.
>
> So does this version work?
>

It probably will, but it seems fragile to depend on the details of PIC.
I committed something more generic:

#ifdef __x86_64__
asm volatile("cpuid"
: "=a"(vec[0]), "=b"(vec[1]),
"=c"(vec[2]), "=d"(vec[3])
: "0"(function) : "cc");
#else
asm volatile("pusha \n\t"
"cpuid \n\t"
"mov %%eax, 0(%1) \n\t"
"mov %%ebx, 4(%1) \n\t"
"mov %%ecx, 8(%1) \n\t"
"mov %%edx, 12(%1) \n\t"
"popa"
: "a"(function), "S"(vec) : "memory", "cc");
#endif

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