From: rsc Date: Tue, 14 Aug 2007 04:05:27 +0000 (+0000) Subject: Cannot use "g" as an arg constraint because X-Git-Url: https://git.devinivas.org/?a=commitdiff_plain;h=3163085ace9f530bdf6dbc83c62d5e3842728860;p=cs3210-lab1.git 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. --- 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;