Skip to content

Commit

Permalink
Consolidate arch-specific sbrk() implementations
Browse files Browse the repository at this point in the history
Signed-off-by: Peter Tyser <[email protected]>
  • Loading branch information
Peter Tyser authored and wdenx committed Sep 4, 2009
1 parent 65f6f07 commit 5e93bd1
Show file tree
Hide file tree
Showing 14 changed files with 28 additions and 230 deletions.
18 changes: 17 additions & 1 deletion common/dlmalloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1502,7 +1502,23 @@ void malloc_bin_reloc (void)
*p++ += gd->reloc_off;
}
}


ulong mem_malloc_start = 0;
ulong mem_malloc_end = 0;
ulong mem_malloc_brk = 0;

void *sbrk(ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end))
return NULL;

mem_malloc_brk = new;

return (void *)old;
}

/* field-extraction macros */

Expand Down
6 changes: 6 additions & 0 deletions include/malloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -937,6 +937,12 @@ int mALLOPt();
struct mallinfo mALLINFo();
#endif

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
extern ulong mem_malloc_start;
extern ulong mem_malloc_end;
extern ulong mem_malloc_brk;

#ifdef __cplusplus
}; /* end of extern "C" */
Expand Down
20 changes: 0 additions & 20 deletions lib_arm/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,6 @@ extern void rtl8019_get_enetaddr (uchar * addr);
#include <i2c.h>
#endif

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

static
void mem_malloc_init (ulong dest_addr)
{
Expand All @@ -100,19 +93,6 @@ void mem_malloc_init (ulong dest_addr)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;

return ((void *) old);
}


/************************************************************************
* Coloured LED functionality
Expand Down
19 changes: 0 additions & 19 deletions lib_avr32/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,6 @@ const char version_string[] =

unsigned long monitor_flash_len;

/*
* Begin and end of memory area for malloc(), and current "brk"
*/
static unsigned long mem_malloc_start = 0;
static unsigned long mem_malloc_end = 0;
static unsigned long mem_malloc_brk = 0;

/* Weak aliases for optional board functions */
static int __do_nothing(void)
{
Expand All @@ -73,18 +66,6 @@ static void mem_malloc_init(void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk(ptrdiff_t increment)
{
unsigned long old = mem_malloc_brk;
unsigned long new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end))
return NULL;

mem_malloc_brk = new;
return ((void *)old);
}

#ifdef CONFIG_SYS_DMA_ALLOC_LEN
#include <asm/arch/cacheflush.h>
#include <asm/io.h>
Expand Down
20 changes: 3 additions & 17 deletions lib_blackfin/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,27 +44,13 @@ static inline void serial_early_puts(const char *s)
#endif
}

static void *mem_malloc_start, *mem_malloc_end, *mem_malloc_brk;

static void mem_malloc_init(void)
{
mem_malloc_start = (void *)CONFIG_SYS_MALLOC_BASE;
mem_malloc_end = (void *)(CONFIG_SYS_MALLOC_BASE + CONFIG_SYS_MALLOC_LEN);
mem_malloc_start = (ulong)CONFIG_SYS_MALLOC_BASE;
mem_malloc_end = (ulong)(CONFIG_SYS_MALLOC_BASE + CONFIG_SYS_MALLOC_LEN);
mem_malloc_brk = mem_malloc_start;
memset(mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
}

void *sbrk(ptrdiff_t increment)
{
void *old = mem_malloc_brk;
void *new = old + increment;

if (new < mem_malloc_start || new > mem_malloc_end)
return NULL;

mem_malloc_brk = new;

return old;
memset((void*)mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
}

static int display_banner(void)
Expand Down
21 changes: 0 additions & 21 deletions lib_i386/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,6 @@ ulong i386boot_bios_size = (ulong)&_i386boot_bios_size; /* size of BIOS
const char version_string[] =
U_BOOT_VERSION" (" U_BOOT_DATE " - " U_BOOT_TIME ")";


/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

static int mem_malloc_init(void)
{
/* start malloc area right after the stack */
Expand All @@ -96,19 +88,6 @@ static int mem_malloc_init(void)
return 0;
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;

return ((void *) old);
}

/************************************************************************
* Init Utilities *
************************************************************************
Expand Down
20 changes: 0 additions & 20 deletions lib_m68k/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,6 @@ extern int watchdog_disable(void);

ulong monitor_flash_len;

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

/************************************************************************
* Utilities *
************************************************************************
Expand All @@ -129,19 +122,6 @@ static void mem_malloc_init (void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) ||
(new > mem_malloc_end) ) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *)old);
}

/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
Expand Down
19 changes: 0 additions & 19 deletions lib_microblaze/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,6 @@ extern int eth_init (bd_t * bis);
extern int getenv_IPaddr (char *);
#endif

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start;
static ulong mem_malloc_end;
static ulong mem_malloc_brk;

/*
* The Malloc area is immediately below the monitor copy in DRAM
* aka CONFIG_SYS_MONITOR_BASE - Note there is no need for reloc_off
Expand All @@ -66,18 +59,6 @@ static void mem_malloc_init (void)
memset ((void *)mem_malloc_start, 0, mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *)old);
}

/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
Expand Down
19 changes: 0 additions & 19 deletions lib_mips/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,13 +59,6 @@ const char version_string[] =

static char *failed = "*** failed ***\n";

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start;
static ulong mem_malloc_end;
static ulong mem_malloc_brk;

/*
* mips_io_port_base is the begin of the address space to which x86 style
* I/O ports are mapped.
Expand Down Expand Up @@ -97,18 +90,6 @@ static void mem_malloc_init (void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *) old);
}


static int init_func_ram (void)
{
Expand Down
20 changes: 1 addition & 19 deletions lib_nios/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <common.h>
#include <stdio_dev.h>
#include <watchdog.h>
#include <malloc.h>
#include <net.h>
#ifdef CONFIG_STATUS_LED
#include <status_led.h>
Expand All @@ -51,13 +52,6 @@ DECLARE_GLOBAL_DATA_PTR;
extern void malloc_bin_reloc (void);
typedef int (init_fnc_t) (void);

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

/*
* The Malloc area is immediately below the monitor copy in RAM
*/
Expand All @@ -71,18 +65,6 @@ static void mem_malloc_init (void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *) old);
}


/************************************************************************
* Initialization sequence *
Expand Down
20 changes: 1 addition & 19 deletions lib_nios2/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include <common.h>
#include <stdio_dev.h>
#include <watchdog.h>
#include <malloc.h>
#include <net.h>
#ifdef CONFIG_STATUS_LED
#include <status_led.h>
Expand Down Expand Up @@ -54,13 +55,6 @@ DECLARE_GLOBAL_DATA_PTR;
extern void malloc_bin_reloc (void);
typedef int (init_fnc_t) (void);

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

/*
* The Malloc area is immediately below the monitor copy in RAM
*/
Expand All @@ -74,18 +68,6 @@ static void mem_malloc_init (void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *) old);
}


/************************************************************************
* Initialization sequence *
Expand Down
19 changes: 0 additions & 19 deletions lib_ppc/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,13 +136,6 @@ ulong monitor_flash_len;
#include <bedbug/type.h>
#endif

/*
* Begin and End of memory area for malloc(), and current "brk"
*/
static ulong mem_malloc_start = 0;
static ulong mem_malloc_end = 0;
static ulong mem_malloc_brk = 0;

/************************************************************************
* Utilities *
************************************************************************
Expand All @@ -164,18 +157,6 @@ static void mem_malloc_init (void)
mem_malloc_end - mem_malloc_start);
}

void *sbrk (ptrdiff_t increment)
{
ulong old = mem_malloc_brk;
ulong new = old + increment;

if ((new < mem_malloc_start) || (new > mem_malloc_end)) {
return (NULL);
}
mem_malloc_brk = new;
return ((void *) old);
}

/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
Expand Down
Loading

0 comments on commit 5e93bd1

Please sign in to comment.