X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Fthreads%2Finit.c;h=8495826da379a3624e061d3a53cc8432aa04764c;hp=458f67cb2bbd7a7424950d8a219c9f08747c30f8;hb=e1289bf52f9dbc8da311fe2064af85076edf82b1;hpb=4879d73c341778a907b777da3a6a15a131c5a913 diff --git a/src/threads/init.c b/src/threads/init.c index 458f67c..8495826 100644 --- a/src/threads/init.c +++ b/src/threads/init.c @@ -168,15 +168,17 @@ paging_init (void) { uint32_t *pd, *pt; size_t page; + extern char _start, _end_kernel_text; pd = base_page_dir = palloc_get_page (PAL_ASSERT | PAL_ZERO); pt = NULL; for (page = 0; page < ram_pages; page++) { uintptr_t paddr = page * PGSIZE; - void *vaddr = ptov (paddr); + char *vaddr = ptov (paddr); size_t pde_idx = pd_no (vaddr); size_t pte_idx = pt_no (vaddr); + bool in_kernel_text = &_start <= vaddr && vaddr < &_end_kernel_text; if (pd[pde_idx] == 0) { @@ -184,7 +186,7 @@ paging_init (void) pd[pde_idx] = pde_create (pt); } - pt[pte_idx] = pte_create_kernel (vaddr, true); + pt[pte_idx] = pte_create_kernel (vaddr, !in_kernel_text); } /* Store the physical address of the page directory into CR3