std: move allocators to sys
This commit is contained in:
parent
a60a9e567a
commit
d456814842
@ -1,4 +1,3 @@
|
|||||||
use super::hermit_abi;
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
@ -1,10 +1,18 @@
|
|||||||
#![forbid(unsafe_op_in_unsafe_fn)]
|
#![forbid(unsafe_op_in_unsafe_fn)]
|
||||||
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::{cmp, ptr};
|
use crate::ptr;
|
||||||
|
|
||||||
// The minimum alignment guaranteed by the architecture. This value is used to
|
// The minimum alignment guaranteed by the architecture. This value is used to
|
||||||
// add fast paths for low alignment values.
|
// add fast paths for low alignment values.
|
||||||
#[cfg(any(
|
#[allow(dead_code)]
|
||||||
|
const MIN_ALIGN: usize = if cfg!(any(
|
||||||
|
all(target_arch = "riscv32", any(target_os = "espidf", target_os = "zkvm")),
|
||||||
|
all(target_arch = "xtensa", target_os = "espidf"),
|
||||||
|
)) {
|
||||||
|
// The allocator on the esp-idf and zkvm platforms guarantees 4 byte alignment.
|
||||||
|
4
|
||||||
|
} else if cfg!(any(
|
||||||
target_arch = "x86",
|
target_arch = "x86",
|
||||||
target_arch = "arm",
|
target_arch = "arm",
|
||||||
target_arch = "m68k",
|
target_arch = "m68k",
|
||||||
@ -16,11 +24,11 @@ use crate::{cmp, ptr};
|
|||||||
target_arch = "sparc",
|
target_arch = "sparc",
|
||||||
target_arch = "wasm32",
|
target_arch = "wasm32",
|
||||||
target_arch = "hexagon",
|
target_arch = "hexagon",
|
||||||
all(target_arch = "riscv32", not(any(target_os = "espidf", target_os = "zkvm"))),
|
target_arch = "riscv32",
|
||||||
all(target_arch = "xtensa", not(target_os = "espidf")),
|
target_arch = "xtensa",
|
||||||
))]
|
)) {
|
||||||
pub const MIN_ALIGN: usize = 8;
|
8
|
||||||
#[cfg(any(
|
} else if cfg!(any(
|
||||||
target_arch = "x86_64",
|
target_arch = "x86_64",
|
||||||
target_arch = "aarch64",
|
target_arch = "aarch64",
|
||||||
target_arch = "arm64ec",
|
target_arch = "arm64ec",
|
||||||
@ -31,16 +39,14 @@ pub const MIN_ALIGN: usize = 8;
|
|||||||
target_arch = "sparc64",
|
target_arch = "sparc64",
|
||||||
target_arch = "riscv64",
|
target_arch = "riscv64",
|
||||||
target_arch = "wasm64",
|
target_arch = "wasm64",
|
||||||
))]
|
)) {
|
||||||
pub const MIN_ALIGN: usize = 16;
|
16
|
||||||
// The allocator on the esp-idf and zkvm platforms guarantee 4 byte alignment.
|
} else {
|
||||||
#[cfg(all(any(
|
panic!("add a value for MIN_ALIGN")
|
||||||
all(target_arch = "riscv32", any(target_os = "espidf", target_os = "zkvm")),
|
};
|
||||||
all(target_arch = "xtensa", target_os = "espidf"),
|
|
||||||
)))]
|
|
||||||
pub const MIN_ALIGN: usize = 4;
|
|
||||||
|
|
||||||
pub unsafe fn realloc_fallback(
|
#[allow(dead_code)]
|
||||||
|
unsafe fn realloc_fallback(
|
||||||
alloc: &System,
|
alloc: &System,
|
||||||
ptr: *mut u8,
|
ptr: *mut u8,
|
||||||
old_layout: Layout,
|
old_layout: Layout,
|
||||||
@ -52,10 +58,37 @@ pub unsafe fn realloc_fallback(
|
|||||||
|
|
||||||
let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
|
let new_ptr = GlobalAlloc::alloc(alloc, new_layout);
|
||||||
if !new_ptr.is_null() {
|
if !new_ptr.is_null() {
|
||||||
let size = cmp::min(old_layout.size(), new_size);
|
let size = usize::min(old_layout.size(), new_size);
|
||||||
ptr::copy_nonoverlapping(ptr, new_ptr, size);
|
ptr::copy_nonoverlapping(ptr, new_ptr, size);
|
||||||
GlobalAlloc::dealloc(alloc, ptr, old_layout);
|
GlobalAlloc::dealloc(alloc, ptr, old_layout);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_ptr
|
new_ptr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cfg_if::cfg_if! {
|
||||||
|
if #[cfg(any(
|
||||||
|
target_family = "unix",
|
||||||
|
target_os = "wasi",
|
||||||
|
target_os = "teeos",
|
||||||
|
))] {
|
||||||
|
mod unix;
|
||||||
|
} else if #[cfg(target_os = "windows")] {
|
||||||
|
mod windows;
|
||||||
|
} else if #[cfg(target_os = "hermit")] {
|
||||||
|
mod hermit;
|
||||||
|
} else if #[cfg(all(target_vendor = "fortanix", target_env = "sgx"))] {
|
||||||
|
mod sgx;
|
||||||
|
} else if #[cfg(target_os = "solid_asp3")] {
|
||||||
|
mod solid;
|
||||||
|
} else if #[cfg(target_os = "uefi")] {
|
||||||
|
mod uefi;
|
||||||
|
} else if #[cfg(target_family = "wasm")] {
|
||||||
|
mod wasm;
|
||||||
|
} else if #[cfg(target_os = "xous")] {
|
||||||
|
mod xous;
|
||||||
|
} else if #[cfg(target_os = "zkvm")] {
|
||||||
|
mod zkvm;
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,8 @@
|
|||||||
use core::sync::atomic::{AtomicBool, Ordering};
|
|
||||||
|
|
||||||
use super::abi::mem as sgx_mem;
|
|
||||||
use super::waitqueue::SpinMutex;
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
|
use crate::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
use crate::sys::pal::abi::mem as sgx_mem;
|
||||||
|
use crate::sys::pal::waitqueue::SpinMutex;
|
||||||
|
|
||||||
// Using a SpinMutex because we never want to exit the enclave waiting for the
|
// Using a SpinMutex because we never want to exit the enclave waiting for the
|
||||||
// allocator.
|
// allocator.
|
@ -1,5 +1,5 @@
|
|||||||
|
use super::{realloc_fallback, MIN_ALIGN};
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::sys::common::alloc::{realloc_fallback, MIN_ALIGN};
|
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
||||||
unsafe impl GlobalAlloc for System {
|
unsafe impl GlobalAlloc for System {
|
@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
use r_efi::protocols::loaded_image;
|
use r_efi::protocols::loaded_image;
|
||||||
|
|
||||||
use super::helpers;
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::sync::OnceLock;
|
use crate::sync::OnceLock;
|
||||||
|
use crate::sys::pal::helpers;
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
||||||
unsafe impl GlobalAlloc for System {
|
unsafe impl GlobalAlloc for System {
|
@ -1,6 +1,6 @@
|
|||||||
|
use super::{realloc_fallback, MIN_ALIGN};
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
use crate::sys::common::alloc::{realloc_fallback, MIN_ALIGN};
|
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
||||||
unsafe impl GlobalAlloc for System {
|
unsafe impl GlobalAlloc for System {
|
||||||
@ -11,7 +11,7 @@ unsafe impl GlobalAlloc for System {
|
|||||||
// Also see <https://github.com/rust-lang/rust/issues/45955> and
|
// Also see <https://github.com/rust-lang/rust/issues/45955> and
|
||||||
// <https://github.com/rust-lang/rust/issues/62251#issuecomment-507580914>.
|
// <https://github.com/rust-lang/rust/issues/62251#issuecomment-507580914>.
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
||||||
libc::malloc(layout.size()) as *mut u8
|
unsafe { libc::malloc(layout.size()) as *mut u8 }
|
||||||
} else {
|
} else {
|
||||||
// `posix_memalign` returns a non-aligned value if supplied a very
|
// `posix_memalign` returns a non-aligned value if supplied a very
|
||||||
// large alignment on older versions of Apple's platforms (unknown
|
// large alignment on older versions of Apple's platforms (unknown
|
||||||
@ -25,7 +25,7 @@ unsafe impl GlobalAlloc for System {
|
|||||||
return ptr::null_mut();
|
return ptr::null_mut();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
aligned_malloc(&layout)
|
unsafe { aligned_malloc(&layout) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,11 +33,11 @@ unsafe impl GlobalAlloc for System {
|
|||||||
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
||||||
// See the comment above in `alloc` for why this check looks the way it does.
|
// See the comment above in `alloc` for why this check looks the way it does.
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
||||||
libc::calloc(layout.size(), 1) as *mut u8
|
unsafe { libc::calloc(layout.size(), 1) as *mut u8 }
|
||||||
} else {
|
} else {
|
||||||
let ptr = self.alloc(layout);
|
let ptr = unsafe { self.alloc(layout) };
|
||||||
if !ptr.is_null() {
|
if !ptr.is_null() {
|
||||||
ptr::write_bytes(ptr, 0, layout.size());
|
unsafe { ptr::write_bytes(ptr, 0, layout.size()) };
|
||||||
}
|
}
|
||||||
ptr
|
ptr
|
||||||
}
|
}
|
||||||
@ -45,15 +45,15 @@ unsafe impl GlobalAlloc for System {
|
|||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
|
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
|
||||||
libc::free(ptr as *mut libc::c_void)
|
unsafe { libc::free(ptr as *mut libc::c_void) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
|
if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
|
||||||
libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8
|
unsafe { libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8 }
|
||||||
} else {
|
} else {
|
||||||
realloc_fallback(self, ptr, layout, new_size)
|
unsafe { realloc_fallback(self, ptr, layout, new_size) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ cfg_if::cfg_if! {
|
|||||||
// posix_memalign only has one, clear requirement: that the alignment be a multiple of
|
// posix_memalign only has one, clear requirement: that the alignment be a multiple of
|
||||||
// `sizeof(void*)`. Since these are all powers of 2, we can just use max.
|
// `sizeof(void*)`. Since these are all powers of 2, we can just use max.
|
||||||
let align = layout.align().max(crate::mem::size_of::<usize>());
|
let align = layout.align().max(crate::mem::size_of::<usize>());
|
||||||
let ret = libc::posix_memalign(&mut out, align, layout.size());
|
let ret = unsafe { libc::posix_memalign(&mut out, align, layout.size()) };
|
||||||
if ret != 0 { ptr::null_mut() } else { out as *mut u8 }
|
if ret != 0 { ptr::null_mut() } else { out as *mut u8 }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,10 @@
|
|||||||
use core::mem::MaybeUninit;
|
use super::{realloc_fallback, MIN_ALIGN};
|
||||||
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
use crate::ffi::c_void;
|
use crate::ffi::c_void;
|
||||||
|
use crate::mem::MaybeUninit;
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
use crate::sync::atomic::{AtomicPtr, Ordering};
|
use crate::sync::atomic::{AtomicPtr, Ordering};
|
||||||
use crate::sys::c;
|
use crate::sys::c;
|
||||||
use crate::sys::common::alloc::{realloc_fallback, MIN_ALIGN};
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
@ -113,28 +112,28 @@ fn init_or_get_process_heap() -> c::HANDLE {
|
|||||||
extern "C" fn process_heap_init_and_alloc(
|
extern "C" fn process_heap_init_and_alloc(
|
||||||
_heap: MaybeUninit<c::HANDLE>, // We pass this argument to match the ABI of `HeapAlloc`
|
_heap: MaybeUninit<c::HANDLE>, // We pass this argument to match the ABI of `HeapAlloc`
|
||||||
flags: u32,
|
flags: u32,
|
||||||
dwBytes: usize,
|
bytes: usize,
|
||||||
) -> *mut c_void {
|
) -> *mut c_void {
|
||||||
let heap = init_or_get_process_heap();
|
let heap = init_or_get_process_heap();
|
||||||
if core::intrinsics::unlikely(heap.is_null()) {
|
if core::intrinsics::unlikely(heap.is_null()) {
|
||||||
return ptr::null_mut();
|
return ptr::null_mut();
|
||||||
}
|
}
|
||||||
// SAFETY: `heap` is a non-null handle returned by `GetProcessHeap`.
|
// SAFETY: `heap` is a non-null handle returned by `GetProcessHeap`.
|
||||||
unsafe { HeapAlloc(heap, flags, dwBytes) }
|
unsafe { HeapAlloc(heap, flags, bytes) }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(never)]
|
#[inline(never)]
|
||||||
fn process_heap_alloc(
|
fn process_heap_alloc(
|
||||||
_heap: MaybeUninit<c::HANDLE>, // We pass this argument to match the ABI of `HeapAlloc`,
|
_heap: MaybeUninit<c::HANDLE>, // We pass this argument to match the ABI of `HeapAlloc`,
|
||||||
flags: u32,
|
flags: u32,
|
||||||
dwBytes: usize,
|
bytes: usize,
|
||||||
) -> *mut c_void {
|
) -> *mut c_void {
|
||||||
let heap = HEAP.load(Ordering::Relaxed);
|
let heap = HEAP.load(Ordering::Relaxed);
|
||||||
if core::intrinsics::likely(!heap.is_null()) {
|
if core::intrinsics::likely(!heap.is_null()) {
|
||||||
// SAFETY: `heap` is a non-null handle returned by `GetProcessHeap`.
|
// SAFETY: `heap` is a non-null handle returned by `GetProcessHeap`.
|
||||||
unsafe { HeapAlloc(heap, flags, dwBytes) }
|
unsafe { HeapAlloc(heap, flags, bytes) }
|
||||||
} else {
|
} else {
|
||||||
process_heap_init_and_alloc(MaybeUninit::uninit(), flags, dwBytes)
|
process_heap_init_and_alloc(MaybeUninit::uninit(), flags, bytes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
use super::abi;
|
|
||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
use crate::alloc::{GlobalAlloc, Layout, System};
|
||||||
|
use crate::sys::pal::abi;
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
||||||
unsafe impl GlobalAlloc for System {
|
unsafe impl GlobalAlloc for System {
|
@ -5,6 +5,7 @@
|
|||||||
/// descriptors.
|
/// descriptors.
|
||||||
mod pal;
|
mod pal;
|
||||||
|
|
||||||
|
mod alloc;
|
||||||
mod personality;
|
mod personality;
|
||||||
|
|
||||||
pub mod anonymous_pipe;
|
pub mod anonymous_pipe;
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod small_c_string;
|
pub mod small_c_string;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
use crate::os::raw::c_char;
|
use crate::os::raw::c_char;
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod fd;
|
pub mod fd;
|
||||||
|
@ -9,7 +9,6 @@ use crate::io::ErrorKind;
|
|||||||
use crate::sync::atomic::{AtomicBool, Ordering};
|
use crate::sync::atomic::{AtomicBool, Ordering};
|
||||||
|
|
||||||
pub mod abi;
|
pub mod abi;
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod fd;
|
pub mod fd;
|
||||||
|
@ -16,7 +16,6 @@ pub mod itron {
|
|||||||
use super::unsupported;
|
use super::unsupported;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
#[path = "../unsupported/args.rs"]
|
#[path = "../unsupported/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
|
||||||
use crate::ptr;
|
|
||||||
use crate::sys::common::alloc::{realloc_fallback, MIN_ALIGN};
|
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
|
||||||
unsafe impl GlobalAlloc for System {
|
|
||||||
#[inline]
|
|
||||||
unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
|
|
||||||
// jemalloc provides alignment less than MIN_ALIGN for small allocations.
|
|
||||||
// So only rely on MIN_ALIGN if size >= align.
|
|
||||||
// Also see <https://github.com/rust-lang/rust/issues/45955> and
|
|
||||||
// <https://github.com/rust-lang/rust/issues/62251#issuecomment-507580914>.
|
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
|
||||||
unsafe { libc::malloc(layout.size()) as *mut u8 }
|
|
||||||
} else {
|
|
||||||
unsafe { aligned_malloc(&layout) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
|
|
||||||
// See the comment above in `alloc` for why this check looks the way it does.
|
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= layout.size() {
|
|
||||||
unsafe { libc::calloc(layout.size(), 1) as *mut u8 }
|
|
||||||
} else {
|
|
||||||
let ptr = unsafe { self.alloc(layout) };
|
|
||||||
if !ptr.is_null() {
|
|
||||||
unsafe { ptr::write_bytes(ptr, 0, layout.size()) };
|
|
||||||
}
|
|
||||||
ptr
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
|
|
||||||
unsafe { libc::free(ptr as *mut libc::c_void) }
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
|
|
||||||
if layout.align() <= MIN_ALIGN && layout.align() <= new_size {
|
|
||||||
unsafe { libc::realloc(ptr as *mut libc::c_void, new_size) as *mut u8 }
|
|
||||||
} else {
|
|
||||||
unsafe { realloc_fallback(self, ptr, layout, new_size) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn aligned_malloc(layout: &Layout) -> *mut u8 {
|
|
||||||
let mut out = ptr::null_mut();
|
|
||||||
// posix_memalign requires that the alignment be a multiple of `sizeof(void*)`.
|
|
||||||
// Since these are all powers of 2, we can just use max.
|
|
||||||
let align = layout.align().max(crate::mem::size_of::<usize>());
|
|
||||||
let ret = unsafe { libc::posix_memalign(&mut out, align, layout.size()) };
|
|
||||||
if ret != 0 { ptr::null_mut() } else { out as *mut u8 }
|
|
||||||
}
|
|
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
pub use self::rand::hashmap_random_keys;
|
pub use self::rand::hashmap_random_keys;
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
#[path = "../unsupported/args.rs"]
|
#[path = "../unsupported/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
#[path = "../unsupported/env.rs"]
|
#[path = "../unsupported/env.rs"]
|
||||||
|
@ -13,11 +13,11 @@
|
|||||||
//! [`OsString`]: crate::ffi::OsString
|
//! [`OsString`]: crate::ffi::OsString
|
||||||
#![forbid(unsafe_op_in_unsafe_fn)]
|
#![forbid(unsafe_op_in_unsafe_fn)]
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
#[path = "../unsupported/fs.rs"]
|
#[path = "../unsupported/fs.rs"]
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
|
pub mod helpers;
|
||||||
#[path = "../unsupported/io.rs"]
|
#[path = "../unsupported/io.rs"]
|
||||||
pub mod io;
|
pub mod io;
|
||||||
#[path = "../unsupported/net.rs"]
|
#[path = "../unsupported/net.rs"]
|
||||||
@ -30,8 +30,6 @@ pub mod stdio;
|
|||||||
pub mod thread;
|
pub mod thread;
|
||||||
pub mod time;
|
pub mod time;
|
||||||
|
|
||||||
mod helpers;
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ use crate::io::ErrorKind;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod weak;
|
pub mod weak;
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod fd;
|
pub mod fd;
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
use crate::alloc::{GlobalAlloc, Layout, System};
|
|
||||||
use crate::ptr::null_mut;
|
|
||||||
|
|
||||||
#[stable(feature = "alloc_system_type", since = "1.28.0")]
|
|
||||||
unsafe impl GlobalAlloc for System {
|
|
||||||
#[inline]
|
|
||||||
unsafe fn alloc(&self, _layout: Layout) -> *mut u8 {
|
|
||||||
null_mut()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn alloc_zeroed(&self, _layout: Layout) -> *mut u8 {
|
|
||||||
null_mut()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn dealloc(&self, _ptr: *mut u8, _layout: Layout) {}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
unsafe fn realloc(&self, _ptr: *mut u8, _layout: Layout, _new_size: usize) -> *mut u8 {
|
|
||||||
null_mut()
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,5 @@
|
|||||||
#![deny(unsafe_op_in_unsafe_fn)]
|
#![deny(unsafe_op_in_unsafe_fn)]
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod fs;
|
pub mod fs;
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
//! compiling for wasm. That way it's a compile time error for something that's
|
//! compiling for wasm. That way it's a compile time error for something that's
|
||||||
//! guaranteed to be a runtime error!
|
//! guaranteed to be a runtime error!
|
||||||
|
|
||||||
#[path = "../unix/alloc.rs"]
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
pub mod fd;
|
pub mod fd;
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
//! To begin with, this target mirrors the wasi target 1 to 1, but over
|
//! To begin with, this target mirrors the wasi target 1 to 1, but over
|
||||||
//! time this will change significantly.
|
//! time this will change significantly.
|
||||||
|
|
||||||
#[path = "../unix/alloc.rs"]
|
|
||||||
pub mod alloc;
|
|
||||||
#[path = "../wasi/args.rs"]
|
#[path = "../wasi/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
#[path = "../wasi/env.rs"]
|
#[path = "../wasi/env.rs"]
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
#![deny(unsafe_op_in_unsafe_fn)]
|
#![deny(unsafe_op_in_unsafe_fn)]
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
#[path = "../unsupported/args.rs"]
|
#[path = "../unsupported/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
|
@ -15,7 +15,6 @@ pub mod compat;
|
|||||||
|
|
||||||
mod api;
|
mod api;
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod c;
|
pub mod c;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#![forbid(unsafe_op_in_unsafe_fn)]
|
#![forbid(unsafe_op_in_unsafe_fn)]
|
||||||
|
|
||||||
pub mod alloc;
|
|
||||||
#[path = "../unsupported/args.rs"]
|
#[path = "../unsupported/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
#[path = "../unsupported/env.rs"]
|
#[path = "../unsupported/env.rs"]
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
const WORD_SIZE: usize = core::mem::size_of::<u32>();
|
const WORD_SIZE: usize = core::mem::size_of::<u32>();
|
||||||
|
|
||||||
pub mod alloc;
|
pub mod abi;
|
||||||
#[path = "../zkvm/args.rs"]
|
#[path = "../zkvm/args.rs"]
|
||||||
pub mod args;
|
pub mod args;
|
||||||
pub mod env;
|
pub mod env;
|
||||||
@ -26,13 +26,10 @@ pub mod pipe;
|
|||||||
#[path = "../unsupported/process.rs"]
|
#[path = "../unsupported/process.rs"]
|
||||||
pub mod process;
|
pub mod process;
|
||||||
pub mod stdio;
|
pub mod stdio;
|
||||||
#[path = "../unsupported/time.rs"]
|
|
||||||
pub mod time;
|
|
||||||
|
|
||||||
#[path = "../unsupported/thread.rs"]
|
#[path = "../unsupported/thread.rs"]
|
||||||
pub mod thread;
|
pub mod thread;
|
||||||
|
#[path = "../unsupported/time.rs"]
|
||||||
mod abi;
|
pub mod time;
|
||||||
|
|
||||||
use crate::io as std_io;
|
use crate::io as std_io;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user