diff --git a/src/lib.rs b/src/lib.rs index 589ccb38ab2357acafeb48df61e6217a7fc18709..9425e7d14bff7fbd90f405d9679fc47919d69231 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -59,10 +59,10 @@ pub mod platform; pub mod start; pub mod sync; -use crate::platform::{Allocator, Pal, Sys}; +use crate::platform::{Allocator, Pal, Sys, NEWALLOCATOR}; #[global_allocator] -static ALLOCATOR: Allocator = Allocator; +static ALLOCATOR: Allocator = NEWALLOCATOR; #[no_mangle] pub extern "C" fn relibc_panic(pi: &::core::panic::PanicInfo) -> ! { diff --git a/src/platform/allocator/dlmalloc.rs b/src/platform/allocator/dlmalloc.rs index a5a890f7d37418c9e9d6cfedc23c3edfd53d7692..97acd7fa69d010a2b56ca7207679f2b794aefd77 100644 --- a/src/platform/allocator/dlmalloc.rs +++ b/src/platform/allocator/dlmalloc.rs @@ -1,4 +1,7 @@ -use core::alloc::{GlobalAlloc, Layout}; +use core::{ + alloc::{GlobalAlloc, Layout}, + sync::atomic::{AtomicUsize, Ordering}, +}; use super::types::*; @@ -9,8 +12,22 @@ extern "C" { fn dlfree(mem: *mut c_void); } -pub struct Allocator; +pub struct Allocator { + mstate: AtomicUsize, +} + +pub const NEWALLOCATOR:Allocator = Allocator{ + mstate: AtomicUsize::new(0), +}; +impl Allocator { + pub fn set_bookkeeper(&self, mstate: usize) { + self.mstate.store(mstate, Ordering::Relaxed); + } + fn get_bookKeeper(&self) ->usize { + self.mstate.load(Ordering::Relaxed) + } +} unsafe impl<'a> GlobalAlloc for Allocator { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { alloc_align(layout.size(), layout.align()) as *mut u8