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:
parent
5e03dd86c8
commit
3163085ace
1 changed files with 1 additions and 1 deletions
2
x86.h
2
x86.h
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue