X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fuserprog%2Fexception.c;h=19aca125e331783bad87330e8e7213f72072e580;hb=fd2a5afa946474ba0839de0e9da238dbaecbd6a5;hp=d4e02b9b7b5ef736784702309e66086ff850d405;hpb=575dc45e34db19ee7808c116e93485b37e0df716;p=pintos-anon diff --git a/src/userprog/exception.c b/src/userprog/exception.c index d4e02b9..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,7 +132,7 @@ 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 ("movl %%cr2, %0" : "=r" (fault_addr));