1 use crate::vm::sys::DecommitBehavior;
2 use std::fs::File;
3 use std::io;
4 use std::mem::MaybeUninit;
5 use std::sync::Arc;
6 use windows_sys::Win32::System::Memory::*;
7 use windows_sys::Win32::System::SystemInformation::*;
8 
9 pub use crate::runtime::vm::pagemap_disabled::{PageMap, reset_with_pagemap};
10 
expose_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()>11 pub unsafe fn expose_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()> {
12     if len == 0 {
13         return Ok(());
14     }
15     if unsafe { VirtualAlloc(ptr.cast(), len, MEM_COMMIT, PAGE_READWRITE).is_null() } {
16         Err(std::io::Error::last_os_error())
17     } else {
18         Ok(())
19     }
20 }
21 
hide_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()>22 pub unsafe fn hide_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()> {
23     unsafe { erase_existing_mapping(ptr, len) }
24 }
25 
erase_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()>26 pub unsafe fn erase_existing_mapping(ptr: *mut u8, len: usize) -> io::Result<()> {
27     if len == 0 {
28         return Ok(());
29     }
30     if unsafe { VirtualFree(ptr.cast(), len, MEM_DECOMMIT) == 0 } {
31         Err(std::io::Error::last_os_error())
32     } else {
33         Ok(())
34     }
35 }
36 
37 #[cfg(feature = "pooling-allocator")]
commit_pages(addr: *mut u8, len: usize) -> io::Result<()>38 pub unsafe fn commit_pages(addr: *mut u8, len: usize) -> io::Result<()> {
39     unsafe { expose_existing_mapping(addr, len) }
40 }
41 
42 #[cfg(feature = "pooling-allocator")]
decommit_pages(addr: *mut u8, len: usize) -> io::Result<()>43 pub unsafe fn decommit_pages(addr: *mut u8, len: usize) -> io::Result<()> {
44     unsafe { erase_existing_mapping(addr, len) }
45 }
46 
get_page_size() -> usize47 pub fn get_page_size() -> usize {
48     unsafe {
49         let mut info = MaybeUninit::uninit();
50         GetSystemInfo(info.as_mut_ptr());
51         info.assume_init_ref().dwPageSize as usize
52     }
53 }
54 
decommit_behavior() -> DecommitBehavior55 pub fn decommit_behavior() -> DecommitBehavior {
56     DecommitBehavior::Zero
57 }
58 
59 #[derive(PartialEq, Debug)]
60 pub enum MemoryImageSource {}
61 
62 impl MemoryImageSource {
from_file(_file: &Arc<File>) -> Option<MemoryImageSource>63     pub fn from_file(_file: &Arc<File>) -> Option<MemoryImageSource> {
64         None
65     }
66 
from_data(_data: &[u8]) -> io::Result<Option<MemoryImageSource>>67     pub fn from_data(_data: &[u8]) -> io::Result<Option<MemoryImageSource>> {
68         Ok(None)
69     }
70 
remap_as_zeros_at(&self, _base: *mut u8, _len: usize) -> io::Result<()>71     pub unsafe fn remap_as_zeros_at(&self, _base: *mut u8, _len: usize) -> io::Result<()> {
72         match *self {}
73     }
74 }
75