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.
This commit is contained in:
rsc 2007-08-14 04:05:27 +00:00
parent 5e03dd86c8
commit 3163085ace

2
x86.h
View file

@ -50,7 +50,7 @@ lgdt(struct segdesc *p, int size)
pd[1] = (uint)p; pd[1] = (uint)p;
pd[2] = (uint)p >> 16; pd[2] = (uint)p >> 16;
asm volatile("lgdt (%0)" : : "g" (pd)); asm volatile("lgdt (%0)" : : "r" (&pd));
} }
struct gatedesc; struct gatedesc;