commit 3163085ace9f530bdf6dbc83c62d5e3842728860
parent 5e03dd86c8de6180ddbddb16974e5af1a010f60b
Author: rsc <rsc>
Date: Tue, 14 Aug 2007 04:05:27 +0000
Cannot use "g" as an arg constraint because
some memory references aren't actually valid
and gcc is a bit too smart in parsing (%0) and
a bit too dumb in knowing which memory refs
are not valid. Using "r" seems to constrain gcc
to use a register as in (%eax) and not substitute
a memory reference like (-36(%ebp)).
No one really understands these things.
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/x86.h b/x86.h
@@ -50,7 +50,7 @@ lgdt(struct segdesc *p, int size)
pd[1] = (uint)p;
pd[2] = (uint)p >> 16;
- asm volatile("lgdt (%0)" : : "g" (pd));
+ asm volatile("lgdt (%0)" : : "r" (&pd));
}
struct gatedesc;