}
}
-/* Page fault error code bits that describe the cause of the exception. */
-#define PF_P 0x1 /* 0: not-present page. 1: access rights violation. */
-#define PF_W 0x2 /* 0: read, 1: write. */
-#define PF_U 0x4 /* 0: kernel, 1: user process. */
-
/* Page fault handler. This is a skeleton that must be filled in
to implement virtual memory. Some solutions to project 2 may
also require modifying this code.
At entry, the address that faulted is in CR2 (Control Register
2) and information about the fault, formatted as described in
- the PF_* macros above, is in F's error_code member. The
+ the PF_* macros in exception.h, is in F's error_code member. The
example code here shows how to parse that information. You
can find more information about both of these in the
description of "Interrupt 14--Page Fault Exception (#PF)" in
See [IA32-v2a] "MOV--Move to/from Control Registers" and
[IA32-v3] 5.14 "Interrupt 14--Page Fault Exception
(#PF)". */
- asm ("mov %0, %%cr2" : "=r" (fault_addr));
+ asm ("movl %%cr2, %0" : "=r" (fault_addr));
/* Turn interrupts back on (they were only off so that we could
be assured of reading CR2 before it changed). */