Now finally, leaving Hardvard!

This commit is contained in:
Erin 2023-08-09 02:53:55 +02:00 committed by ondra05
parent 6268c96776
commit 06ce899e71
2 changed files with 21 additions and 1 deletions

View file

@ -22,7 +22,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
program: &prog, program: &prog,
root_pt: Box::into_raw(Default::default()), root_pt: Box::into_raw(Default::default()),
}, },
0, 4,
); );
let data = { let data = {
let ptr = std::alloc::alloc_zeroed(std::alloc::Layout::from_size_align_unchecked( let ptr = std::alloc::alloc_zeroed(std::alloc::Layout::from_size_align_unchecked(

View file

@ -97,6 +97,26 @@ impl<'p, PfH: HandlePageFault> SoftPagedMem<'p, PfH> {
permission_check: fn(Permission) -> bool, permission_check: fn(Permission) -> bool,
action: fn(*mut u8, *mut u8, usize), action: fn(*mut u8, *mut u8, usize),
) -> Result<(), u64> { ) -> Result<(), u64> {
let (src, len) = if src < self.program.len() as _ {
let to_copy = len.clamp(0, self.program.len().saturating_sub(src as _));
action(
unsafe { self.program.as_ptr().add(src as _).cast_mut() },
dst,
to_copy,
);
(
src.saturating_add(to_copy as _),
len.saturating_sub(to_copy),
)
} else {
(src, len)
};
if len == 0 {
return Ok(());
}
// Create new splitter // Create new splitter
let mut pspl = AddrPageLookuper::new(src, len, self.root_pt); let mut pspl = AddrPageLookuper::new(src, len, self.root_pt);
loop { loop {