Now finally, leaving Hardvard!

pull/2/head
ondra05 2023-08-09 02:53:55 +02:00
parent f52eb813ca
commit caceb3c01f
No known key found for this signature in database
GPG Key ID: 0DA6D2BB2285E881
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,
root_pt: Box::into_raw(Default::default()),
},
0,
4,
);
let data = {
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,
action: fn(*mut u8, *mut u8, usize),
) -> 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
let mut pspl = AddrPageLookuper::new(src, len, self.root_pt);
loop {