From 3163085ace9f530bdf6dbc83c62d5e3842728860 Mon Sep 17 00:00:00 2001
From: rsc <rsc>
Date: Tue, 14 Aug 2007 04:05:27 +0000
Subject: [PATCH] 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.
---
 x86.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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;
-- 
GitLab