diff options
Diffstat (limited to 'src/mem.rs')
| -rw-r--r-- | src/mem.rs | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -38,10 +38,11 @@ impl Memory { return Some(i); } } + eprintln!("tried to allocate {:X} but there are no more pages!", virtual_addr); None } - pub fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option<usize> { + fn lookup_page(&mut self, virtual_addr: usize, permission: usize) -> Option<usize> { for (i, page) in self.pages.iter().enumerate() { if page.virtual_addr == virtual_addr && permission >= page.permission @@ -50,7 +51,7 @@ impl Memory { return Some(i); } } - return self.create_page(virtual_addr, permission); + self.create_page(virtual_addr, permission) } pub fn ro_lookup(&self, virtual_addr: usize, permission: usize) -> Option<usize> { @@ -62,6 +63,7 @@ impl Memory { return Some(i); } } + println!("virtual_addr {:X} is not allocated", virtual_addr); None } @@ -69,21 +71,22 @@ impl Memory { let page = address & PAGE_MASK; let offset = address - page; - if let Some(page) = self.lookup_page(address, permission) { + if let Some(page) = self.lookup_page(page, permission) { self.memory[self.pages[page].real_addr + offset] = value; - Ok(()) - } else { - Err(()) + return Ok(()); } + Err(()) } pub fn read(&self, address: usize, permission: usize) -> Result<u8, ()> { let page = address & PAGE_MASK; let offset = address - page; - if let Some(page) = self.ro_lookup(address, permission) { + if let Some(page) = self.ro_lookup(page, permission) { Ok(self.memory[self.pages[page].real_addr + offset]) } else { + println!("address {:X} is not allocated", address); + Err(()) } } |
