active_pd() should return a virtual address.
[pintos-anon] / src / userprog / pagedir.c
index 3f0e9fb47c1217c8bbe0266f8a5b6b7a9e130e0e..d9cfd301e5d5997887eb64e894f8c82e5f282a03 100644 (file)
@@ -192,18 +192,18 @@ pagedir_activate (uint32_t *pd)
      aka PDBR (page directory base register).  This activates our
      new page tables immediately.  See [IA32-v2a] "MOV--Move
      to/from Control Registers" and [IA32-v3] 3.7.5. */
-  asm volatile ("movl %0,%%cr3" :: "r" (vtop (pd)));
+  asm volatile ("mov %%cr3, %0" :: "r" (vtop (pd)));
 }
 
 /* Returns the currently active page directory. */
 static uint32_t *
 active_pd (void) 
 {
-  uint32_t *pd;
-
-  /* Copy CR3, the page directory base register (PDBR), into `pd'
-     for us to examine.  See [IA32-v2a] "MOV--Move to/from
-     Control Registers" and [IA32-v3] 3.7.5. */
-  asm ("movl %%cr3,%0" : "=r" (pd));
-  return pd;
+  /* Copy CR3, the page directory base register (PDBR), into
+     `pd'.
+     See [IA32-v2a] "MOV--Move to/from Control Registers" and
+     [IA32-v3] 3.7.5. */
+  uintptr_t pd;
+  asm ("mov %0, %%cr3" : "=r" (pd));
+  return ptov (pd);
 }