Add support for dynamically updating the memory capacity

This commit is contained in:
Duncan Ogilvie
2025-01-12 14:09:05 +01:00
parent 8acc071b8a
commit e9c03d562f
2 changed files with 25 additions and 1 deletions
+7 -1
View File
@@ -104,6 +104,12 @@ class Icicle:
sp: int sp: int
"""
Physical memory capacity in pages (adjust when seeing OutOfMemory)
The default limit is set so that the maximum corresponds to ~400 MB of host memory.
"""
mem_capacity: int
# TODO: API to get memory information? # TODO: API to get memory information?
def mem_map(self, address: int, size: int, protection: MemoryProtection): ... def mem_map(self, address: int, size: int, protection: MemoryProtection): ...
@@ -146,7 +152,7 @@ class MemoryException(Exception):
self.code = code self.code = code
def __str__(self): def __str__(self):
return f"{super().__str__()}: {self.code}" return f"{super().__str__()} ({self.code})"
def __ghidra_init(): def __ghidra_init():
import os import os
+18
View File
@@ -312,6 +312,24 @@ impl Icicle {
self.vm.cpu.write_reg(self.vm.cpu.arch.reg_sp, address) self.vm.cpu.write_reg(self.vm.cpu.arch.reg_sp, address)
} }
#[getter]
pub fn get_mem_capacity(&self) -> usize {
self.vm.cpu.mem.capacity()
}
#[setter]
pub fn set_mem_capacity(&mut self, capacity: usize) -> PyResult<()> {
if self.vm.cpu.mem.set_capacity(capacity) {
return Ok(());
}
Err(
raise_MemoryException(
format!("Reducing memory capacity is not supported"),
MemError::Unknown,
)
)
}
#[new] #[new]
#[pyo3(signature = ( #[pyo3(signature = (
architecture, architecture,