switch-coreboot/lib/malloc.c
Ronald G. Minnich bd5f0a324e Stupid malloc allocater which we hope that we will never need. But it
has an author.

The use of malloc is very limited in V2, and we are pretty sure we can
reduce usage of malloc to no use at all in V3. 

The device code uses malloc, but that needs to be changed, so that the
device tree is allocated in a known-good-place in ram and can be
passed to other stages and payloads which may want to parse it. 

The built-in-filo and vfs code in v2 both use malloc, but they will not be
brought forward to V3. 

The old elfboot code used malloc, but we have changed that code so much
it no longer needs malloc. 

The only remaining use of malloc is lzma, and we see no need to use such 
a general mechanism for the lzma's single call to malloc. 

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Acked-by: Ronald G. Minnich <rminnich@gmail.com>
Acked-by: Stefan Reinauer <stepan@coresystems.de>



git-svn-id: svn://coreboot.org/repository/LinuxBIOSv3@113 f3766cd6-281f-0410-b1cd-43a5c92072e9
2007-02-25 10:33:49 +00:00

73 lines
2.3 KiB
C

/*
* malloc -- simple non-freeing malloc.
* there have been about a million versions of this but we need one with a known
* author. Almost every OS and bootloader has had this at some time or other.
*
*
* Copyright (C) 2007 Ronald G. Minnich
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
*
*/
#include <stdlib.h>
#include <console/console.h>
#if 0
#define MALLOCDBG(x...)
#else
#define MALLOCDBG(x...) printk (BIOS_SPEW, x)
#endif
/* instead of ldscript magic, just declare an array. The array
* will consume no bytes in the image, and it won't run into trouble
* the way the V2 allocator could. We do not provide zero'd memory.
* note that the execute-in-place code in top of flash is not allowed to call malloc,
* since we can't link this in to it. The FLASH-based code should always be dead simple.
* (in fact, it's not clear we need malloc at all any more -- we're doing our best to
* remove all usage of it -- the only real users were elfboot and lzma, and we have
* removed its usage in elfboot, and will try to remove its usage in lzma).
*/
#define HEAPSIZE (256*1024)
static unsigned char heap[HEAPSIZE];
static unsigned char * free_mem_ptr = heap;
static unsigned long freebytes = HEAPSIZE;
void *malloc(size_t size)
{
void *p;
MALLOCDBG("%s Enter, size %d, free_mem_ptr %p\n", __FUNCTION__, size, free_mem_ptr);
if (size > freebytes){
printk(BIOS_ERR, "OUT OF MEMORY for alloc of %d bytes\n", size);
die("OUT OF MEMORY\n");
}
size = (size + 3) & 3; /* Align */
p = free_mem_ptr;
free_mem_ptr += size;
freebytes -= size;
MALLOCDBG("malloc 0x%08lx\n", (unsigned long)p);
return p;
}
void free(void *where)
{
/* Don't care */
}