From 41c3e0bc640f570831bd6c18fbfb8c7cec23a43d Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Thu, 4 Dec 2014 23:30:15 +0100 Subject: struggling with gcc -O , and other stuff --- kernel/vmem.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'kernel/vmem.c') diff --git a/kernel/vmem.c b/kernel/vmem.c index 5dccc13..a909b1a 100644 --- a/kernel/vmem.c +++ b/kernel/vmem.c @@ -299,8 +299,14 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir) { ptable* table = (ptable*) pmmngr_alloc_block (); - pd_entry *oldentry= &(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]); - ptable* oldtable=pd_entry_get_frame(oldentry); + pd_entry *oldentry=NULL; + ptable* oldtable=NULL; + + if(copy_dir!=NULL) + { + oldentry=&(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]); + oldtable=pd_entry_get_frame(oldentry); + } log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"oldtable at: 0x%08X",oldtable); if (!table)panic(FOOLOS_MODULE_NAME,"unable to alloc table"); @@ -308,6 +314,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir) for (int i=0, virt=virt_addr; i<1024; i++, virt+=4096) { + //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"i = %d",i); phys_addr=pmmngr_alloc_block(); // get free space from the memory manager if (!phys_addr)panic(FOOLOS_MODULE_NAME,"unable to alloc spce for frame"); @@ -350,8 +357,14 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir) { ptable* table = (ptable*) pmmngr_alloc_block (); - pd_entry *oldentry= &(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]); - ptable* oldtable=pd_entry_get_frame(oldentry); + pd_entry *oldentry=NULL; + ptable* oldtable=NULL; + + if(copy_dir!=NULL) + { + oldentry=&(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]); + oldtable=pd_entry_get_frame(oldentry); + } log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"oldtable at: 0x%08X",oldtable); if (!table)panic(FOOLOS_MODULE_NAME,"unable to alloc table"); -- cgit v1.2.3