Messages in this thread | | | Date | Thu, 09 Nov 2006 16:52:40 +0200 | From | Avi Kivity <> | Subject | Re: [kvm-devel] [PATCH] KVM: Avoid using vmx instruction directly |
| |
Arnd Bergmann wrote: > On Thursday 09 November 2006 14:36, Avi Kivity wrote: > >>> I'm not an expert on inline assembly, but don't you need an extra >>> '"m" (phys_addr)' to make sure that gcc actually puts the variable >>> on the stack instead of passing a NULL pointer as '"a"(&phys_addr)'? >>> >> Taking a variable's address should force its contents into memory (like >> calling an uninlined function with &var). >> > > No it doesn't. You're not telling gcc that the inline assembly cares > about the contents of the variable, so it could be a reference to > a stack slot while the contents are still in a register.
Wouldn't that make inline assembly useless? Suppose the contents is itself a pointer. What about the pointed-to contents?
e.g.
int x = 3; int *y = &x; int z;
asm ("mov %1, %%rax; movl (%%rax), %0" : "=r"(z) : "g"(y) : "rax"); assert(z == 3);
> Or gcc > might move the assignment of phys_addr to after the inline assembly. > "asm volatile" prevents that (and I'm not 100% sure it's necessary).
-- 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |