X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fuserprog%2Fexception.c;h=19aca125e331783bad87330e8e7213f72072e580;hb=2ca95dc97c9dd591d0f71f1f4c411b3aeb82d690;hp=9a4eb90fd7eb184de733e867188c84cce337633a;hpb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999;p=pintos-anon diff --git a/src/userprog/exception.c b/src/userprog/exception.c index 9a4eb90..19aca12 100644 --- a/src/userprog/exception.c +++ b/src/userprog/exception.c @@ -24,8 +24,8 @@ static void page_fault (struct intr_frame *); way as other exceptions, but this will need to change to implement virtual memory. - Refer to [IA32-v3] section 5.14 for a description of each of - these exceptions. */ + Refer to [IA32-v3a] section 5.15 "Exception and Interrupt + Reference" for a description of each of these exceptions. */ void exception_init (void) { @@ -108,22 +108,17 @@ kill (struct intr_frame *f) } } -/* 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 - [IA32-v3] section 5.14, which is pages 5-46 to 5-49. */ + [IA32-v3a] section 5.15 "Exception and Interrupt Reference". */ static void page_fault (struct intr_frame *f) { @@ -137,9 +132,9 @@ page_fault (struct intr_frame *f) data. It is not necessarily the address of the instruction 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 + [IA32-v3a] 5.15 "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). */