]> git.proxmox.com Git - rustc.git/blob - vendor/dlmalloc/src/macos.rs
New upstream version 1.45.0+dfsg1
[rustc.git] / vendor / dlmalloc / src / macos.rs
1 extern crate libc;
2
3 use core::ptr;
4
5 pub unsafe fn alloc(size: usize) -> (*mut u8, usize, u32) {
6 let addr = libc::mmap(
7 0 as *mut _,
8 size,
9 libc::PROT_WRITE | libc::PROT_READ,
10 libc::MAP_ANON | libc::MAP_PRIVATE,
11 -1,
12 0,
13 );
14 if addr == libc::MAP_FAILED {
15 (ptr::null_mut(), 0, 0)
16 } else {
17 (addr as *mut u8, size, 0)
18 }
19 }
20
21 pub unsafe fn remap(_ptr: *mut u8, _oldsize: usize, _newsize: usize, _can_move: bool) -> *mut u8 {
22 ptr::null_mut()
23 }
24
25 pub unsafe fn free_part(ptr: *mut u8, oldsize: usize, newsize: usize) -> bool {
26 libc::munmap(ptr.offset(newsize as isize) as *mut _, oldsize - newsize) == 0
27 }
28
29 pub unsafe fn free(ptr: *mut u8, size: usize) -> bool {
30 libc::munmap(ptr as *mut _, size) == 0
31 }
32
33 pub fn can_release_part(_flags: u32) -> bool {
34 true
35 }
36
37 #[cfg(feature = "global")]
38 static mut LOCK: libc::pthread_mutex_t = libc::PTHREAD_MUTEX_INITIALIZER;
39
40 #[cfg(feature = "global")]
41 pub fn acquire_global_lock() {
42 unsafe { assert_eq!(libc::pthread_mutex_lock(&mut LOCK), 0) }
43 }
44
45 #[cfg(feature = "global")]
46 pub fn release_global_lock() {
47 unsafe { assert_eq!(libc::pthread_mutex_unlock(&mut LOCK), 0) }
48 }
49
50 pub fn allocates_zeros() -> bool {
51 true
52 }
53
54 pub fn page_size() -> usize {
55 4096
56 }