X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fuserprog%2Fexception.c;h=dcfccb85f998da6b5e584da19b891819dc7f776f;hb=9869570326bb4e6d39fb41912a9076d53a82ad2d;hp=8b2e8b641adf7b90168b7b3ff4b3ae81e2bf4d6c;hpb=838c30d0075a3ee0413ba4909944b37f4970a10d;p=pintos-anon diff --git a/src/userprog/exception.c b/src/userprog/exception.c index 8b2e8b6..dcfccb8 100644 --- a/src/userprog/exception.c +++ b/src/userprog/exception.c @@ -132,8 +132,11 @@ page_fault (struct intr_frame *f) /* Obtain faulting address, the virtual address that was accessed to cause the fault. It may point to code or to data. It is not necessarily the address of the instruction - that caused the fault (that's f->eip). */ - asm ("movl %%cr2, %0" : "=r" (fault_addr)); + that caused the fault (that's f->eip). + 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)); /* Turn interrupts back on (they were only off so that we could be assured of reading CR2 before it changed). */