From 0c5221425b888b5f6a9000f56d71280d52d1af97 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Mon, 15 Aug 2016 15:29:28 -0600 Subject: [PATCH] Remove bump allocator --- alloc/bump_allocator/Cargo.toml | 6 --- alloc/bump_allocator/src/lib.rs | 96 --------------------------------- 2 files changed, 102 deletions(-) delete mode 100644 alloc/bump_allocator/Cargo.toml delete mode 100644 alloc/bump_allocator/src/lib.rs diff --git a/alloc/bump_allocator/Cargo.toml b/alloc/bump_allocator/Cargo.toml deleted file mode 100644 index 08a64cf..0000000 --- a/alloc/bump_allocator/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "bump_allocator" -version = "0.1.0" - -[dependencies] -"spin" = "*" diff --git a/alloc/bump_allocator/src/lib.rs b/alloc/bump_allocator/src/lib.rs deleted file mode 100644 index f0606da..0000000 --- a/alloc/bump_allocator/src/lib.rs +++ /dev/null @@ -1,96 +0,0 @@ -//! A simple allocator that never frees, for testing -//! Some code borrowed from [Phil Opp's Blog](http://os.phil-opp.com/kernel-heap.html) - -#![feature(allocator)] -#![feature(const_fn)] -#![allocator] -#![no_std] - -use spin::Mutex; - -extern crate spin; - -pub const HEAP_START: usize = 0x1_0000_0000; // Put at end of 4GB -pub const HEAP_SIZE: usize = 16 * 1024 * 1024; // 16 MB - -static BUMP_ALLOCATOR: Mutex = Mutex::new(BumpAllocator::new(HEAP_START, HEAP_SIZE)); - -#[no_mangle] -pub extern fn __rust_allocate(size: usize, align: usize) -> *mut u8 { - BUMP_ALLOCATOR.lock().allocate(size, align).expect("out of memory") -} - -#[no_mangle] -pub extern fn __rust_usable_size(size: usize, align: usize) -> usize { - size -} - -#[no_mangle] -pub extern fn __rust_deallocate(ptr: *mut u8, size: usize, align: usize) { - -} - -#[no_mangle] -pub extern fn __rust_reallocate(ptr: *mut u8, size: usize, new_size: usize, align: usize) -> *mut u8 { - use core::{ptr, cmp}; - - let new_ptr = __rust_allocate(new_size, align); - unsafe { ptr::copy(ptr, new_ptr, cmp::min(size, new_size)) }; - __rust_deallocate(ptr, size, align); - new_ptr -} - -#[no_mangle] -pub extern fn __rust_reallocate_inplace(ptr: *mut u8, size: usize, new_size: usize, align: usize) -> usize { - size -} - -/// Align downwards. Returns the greatest x with alignment `align` -/// so that x <= addr. The alignment must be a power of 2. -pub fn align_down(addr: usize, align: usize) -> usize { - if align.is_power_of_two() { - addr & !(align - 1) - } else if align == 0 { - addr - } else { - panic!("`align` must be a power of 2"); - } -} - -/// Align upwards. Returns the smallest x with alignment `align` -/// so that x >= addr. The alignment must be a power of 2. -pub fn align_up(addr: usize, align: usize) -> usize { - align_down(addr + align - 1, align) -} - -#[derive(Debug)] -struct BumpAllocator { - heap_start: usize, - heap_size: usize, - next: usize, -} - -impl BumpAllocator { - /// Create a new allocator, which uses the memory in the - /// range [heap_start, heap_start + heap_size). - const fn new(heap_start: usize, heap_size: usize) -> BumpAllocator { - BumpAllocator { - heap_start: heap_start, - heap_size: heap_size, - next: heap_start, - } - } - - /// Allocates a block of memory with the given size and alignment. - fn allocate(&mut self, size: usize, align: usize) -> Option<*mut u8> { - let alloc_start = align_up(self.next, align); - let alloc_end = alloc_start + size; - - if alloc_end <= self.heap_start + self.heap_size { - self.next = alloc_end; - Some(alloc_start as *mut u8) - } else { - None - } - } -}