From 5e93bd1c9aaea886c5e5c7c1b6114ab36c30668f Mon Sep 17 00:00:00 2001 From: Peter Tyser Date: Fri, 21 Aug 2009 23:05:19 -0500 Subject: [PATCH] Consolidate arch-specific sbrk() implementations Signed-off-by: Peter Tyser --- common/dlmalloc.c | 18 +++++++++++++++++- include/malloc.h | 6 ++++++ lib_arm/board.c | 20 -------------------- lib_avr32/board.c | 19 ------------------- lib_blackfin/board.c | 20 +++----------------- lib_i386/board.c | 21 --------------------- lib_m68k/board.c | 20 -------------------- lib_microblaze/board.c | 19 ------------------- lib_mips/board.c | 19 ------------------- lib_nios/board.c | 20 +------------------- lib_nios2/board.c | 20 +------------------- lib_ppc/board.c | 19 ------------------- lib_sh/board.c | 18 ------------------ lib_sparc/board.c | 19 ------------------- 14 files changed, 28 insertions(+), 230 deletions(-) diff --git a/common/dlmalloc.c b/common/dlmalloc.c index 4a185620f9..f3bced463f 100644 --- a/common/dlmalloc.c +++ b/common/dlmalloc.c @@ -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 */ diff --git a/include/malloc.h b/include/malloc.h index a38464e629..0382169b6a 100644 --- a/include/malloc.h +++ b/include/malloc.h @@ -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" */ diff --git a/lib_arm/board.c b/lib_arm/board.c index fa87d51373..62b7874437 100644 --- a/lib_arm/board.c +++ b/lib_arm/board.c @@ -82,13 +82,6 @@ extern void rtl8019_get_enetaddr (uchar * addr); #include #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) { @@ -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 diff --git a/lib_avr32/board.c b/lib_avr32/board.c index e2b0a2e1a2..03a520cddc 100644 --- a/lib_avr32/board.c +++ b/lib_avr32/board.c @@ -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) { @@ -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 #include diff --git a/lib_blackfin/board.c b/lib_blackfin/board.c index 5b9efde7a2..9c405ba4bd 100644 --- a/lib_blackfin/board.c +++ b/lib_blackfin/board.c @@ -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) diff --git a/lib_i386/board.c b/lib_i386/board.c index 54ef6e75a8..0262b5e2cb 100644 --- a/lib_i386/board.c +++ b/lib_i386/board.c @@ -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 */ @@ -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 * ************************************************************************ diff --git a/lib_m68k/board.c b/lib_m68k/board.c index 483c9b6df8..4392bccdba 100644 --- a/lib_m68k/board.c +++ b/lib_m68k/board.c @@ -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 * ************************************************************************ @@ -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 diff --git a/lib_microblaze/board.c b/lib_microblaze/board.c index cfed5fefcd..fc25a75305 100644 --- a/lib_microblaze/board.c +++ b/lib_microblaze/board.c @@ -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 @@ -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 diff --git a/lib_mips/board.c b/lib_mips/board.c index aa5b1295ce..68a3697f74 100644 --- a/lib_mips/board.c +++ b/lib_mips/board.c @@ -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. @@ -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) { diff --git a/lib_nios/board.c b/lib_nios/board.c index cd234578b7..30cdb477cf 100644 --- a/lib_nios/board.c +++ b/lib_nios/board.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #ifdef CONFIG_STATUS_LED #include @@ -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 */ @@ -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 * diff --git a/lib_nios2/board.c b/lib_nios2/board.c index b142c59613..e5a8d54069 100644 --- a/lib_nios2/board.c +++ b/lib_nios2/board.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #ifdef CONFIG_STATUS_LED #include @@ -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 */ @@ -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 * diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 9faf7f2a0b..f0cc3ce8d8 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -136,13 +136,6 @@ ulong monitor_flash_len; #include #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 * ************************************************************************ @@ -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 diff --git a/lib_sh/board.c b/lib_sh/board.c index 829455d8b1..001e89c714 100644 --- a/lib_sh/board.c +++ b/lib_sh/board.c @@ -38,10 +38,6 @@ const char version_string[] = U_BOOT_VERSION" ("U_BOOT_DATE" - "U_BOOT_TIME")"; unsigned long monitor_flash_len = CONFIG_SYS_MONITOR_LEN; -static unsigned long mem_malloc_start; -static unsigned long mem_malloc_end; -static unsigned long mem_malloc_brk; - static void mem_malloc_init(void) { @@ -52,20 +48,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; -} - static int sh_flash_init(void) { DECLARE_GLOBAL_DATA_PTR; diff --git a/lib_sparc/board.c b/lib_sparc/board.c index d40834b7b0..37b7c0a594 100644 --- a/lib_sparc/board.c +++ b/lib_sparc/board.c @@ -74,13 +74,6 @@ static char *failed = "*** failed ***\n"; 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 * ************************************************************************ @@ -97,18 +90,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); -} - /***********************************************************************/ /************************************************************************ -- 2.39.5