summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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.
-rw-r--r--x86.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/x86.h b/x86.h
index ab7882a..4774e75 100644
--- 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;