issue = "27783")]
#![feature(allocator)]
#![feature(staged_api)]
-#![cfg_attr(target_os = "redox", feature(libc))]
-#![cfg_attr(unix, feature(libc))]
+#![cfg_attr(any(unix, target_os = "redox"), feature(libc))]
// The minimum alignment guaranteed by the architecture. This value is used to
// add fast paths for low alignment values. In practice, the alignment is a
imp::usable_size(size, align)
}
-#[cfg(target_os = "redox")]
-mod imp {
- extern crate libc;
-
- use core::cmp;
- use core::ptr;
- use MIN_ALIGN;
-
- pub unsafe fn allocate(size: usize, _align: usize) -> *mut u8 {
- libc::malloc(size as libc::size_t) as *mut u8
- }
-
- pub unsafe fn reallocate(ptr: *mut u8, old_size: usize, size: usize, align: usize) -> *mut u8 {
- if align <= MIN_ALIGN {
- libc::realloc(ptr as *mut libc::c_void, size as libc::size_t) as *mut u8
- } else {
- let new_ptr = allocate(size, align);
- if !new_ptr.is_null() {
- ptr::copy(ptr, new_ptr, cmp::min(size, old_size));
- deallocate(ptr, old_size, align);
- }
- new_ptr
- }
- }
-
- pub unsafe fn reallocate_inplace(_ptr: *mut u8,
- old_size: usize,
- _size: usize,
- _align: usize)
- -> usize {
- old_size
- }
-
- pub unsafe fn deallocate(ptr: *mut u8, _old_size: usize, _align: usize) {
- libc::free(ptr as *mut libc::c_void)
- }
-
- pub fn usable_size(size: usize, _align: usize) -> usize {
- size
- }
-}
-
-#[cfg(any(unix))]
+#[cfg(any(unix, target_os = "redox"))]
mod imp {
extern crate libc;
}
}
- #[cfg(target_os = "android")]
+ #[cfg(any(target_os = "android", target_os = "redox"))]
unsafe fn aligned_malloc(size: usize, align: usize) -> *mut u8 {
// On android we currently target API level 9 which unfortunately
// doesn't have the `posix_memalign` API used below. Instead we use
libc::memalign(align as libc::size_t, size as libc::size_t) as *mut u8
}
- #[cfg(not(target_os = "android"))]
+ #[cfg(not(any(target_os = "android", target_os = "redox")))]
unsafe fn aligned_malloc(size: usize, align: usize) -> *mut u8 {
let mut out = ptr::null_mut();
let ret = libc::posix_memalign(&mut out, align as libc::size_t, size as libc::size_t);
target_family: Some("redox".to_string()),
linker_is_gnu: true,
no_default_libraries: true,
- lib_allocation_crate: "ralloc".to_string(),
- exe_allocation_crate: "ralloc".to_string(),
+ lib_allocation_crate: "alloc_system".to_string(),
+ exe_allocation_crate: "alloc_system".to_string(),
has_elf_tls: true,
panic_strategy: PanicStrategy::Abort,
.. Default::default()