-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of #83682 - bjorn3:mmap_wrapper, r=cjgillot
Add an Mmap wrapper to rustc_data_structures This wrapper implements StableAddress and falls back to directly reading the file on wasm32. Taken from #83640, which I will close due to the perf regression.
- Loading branch information
Showing
12 changed files
with
63 additions
and
50 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
use std::fs::File; | ||
use std::io; | ||
use std::ops::Deref; | ||
|
||
use crate::owning_ref::StableAddress; | ||
|
||
/// A trivial wrapper for [`memmap2::Mmap`] that implements [`StableAddress`]. | ||
#[cfg(not(target_arch = "wasm32"))] | ||
pub struct Mmap(memmap2::Mmap); | ||
|
||
#[cfg(target_arch = "wasm32")] | ||
pub struct Mmap(Vec<u8>); | ||
|
||
#[cfg(not(target_arch = "wasm32"))] | ||
impl Mmap { | ||
#[inline] | ||
pub unsafe fn map(file: File) -> io::Result<Self> { | ||
memmap2::Mmap::map(&file).map(Mmap) | ||
} | ||
} | ||
|
||
#[cfg(target_arch = "wasm32")] | ||
impl Mmap { | ||
#[inline] | ||
pub unsafe fn map(mut file: File) -> io::Result<Self> { | ||
use std::io::Read; | ||
|
||
let mut data = Vec::new(); | ||
file.read_to_end(&mut data)?; | ||
Ok(Mmap(data)) | ||
} | ||
} | ||
|
||
impl Deref for Mmap { | ||
type Target = [u8]; | ||
|
||
#[inline] | ||
fn deref(&self) -> &[u8] { | ||
&*self.0 | ||
} | ||
} | ||
|
||
// SAFETY: On architectures other than WASM, mmap is used as backing storage. The address of this | ||
// memory map is stable. On WASM, `Vec<u8>` is used as backing storage. The `Mmap` type doesn't | ||
// export any function that can cause the `Vec` to be re-allocated. As such the address of the | ||
// bytes inside this `Vec` is stable. | ||
unsafe impl StableAddress for Mmap {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters