Initial allocator structure

This commit is contained in:
oddcoder
2020-07-15 10:12:59 +02:00
parent 04f77881d0
commit 9a1efda121
2 changed files with 21 additions and 4 deletions
+2 -2
View File
@@ -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) -> ! {
+19 -2
View File
@@ -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