Am 02.11.2011 21:56, schrieb Simon Glass: > On Wed, Nov 2, 2011 at 1:12 PM, Matthias Weisser <weiss...@arcor.de> wrote: >> Using mmap to allocate memory from the OS for RAM simulation we can use >> u-boots own malloc implementation. >> >> Signed-off-by: Matthias Weisser <weiss...@arcor.de> >> --- >> Changes in V2: >> Removed the address hint for mmap >> Removed the special handling of dlmalloc in common >> Set gd->bd->bi_dram[0].start to 0 again >> >> arch/sandbox/cpu/os.c | 7 +++++++ >> arch/sandbox/lib/board.c | 17 ++++++++++------- >> common/Makefile | 2 -- >> include/os.h | 8 ++++++++ >> 4 files changed, 25 insertions(+), 9 deletions(-) >> >> diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c >> index 6c175d4..05f91f2 100644 >> --- a/arch/sandbox/cpu/os.c >> +++ b/arch/sandbox/cpu/os.c >> @@ -24,6 +24,7 @@ >> #include <unistd.h> >> #include <sys/types.h> >> #include <sys/stat.h> >> +#include <sys/mman.h> >> >> #include <os.h> >> >> @@ -53,3 +54,9 @@ void os_exit(int exit_code) >> { >> exit(exit_code); >> } >> + >> +void *os_malloc(size_t length) >> +{ >> + return mmap(NULL, length, PROT_READ | PROT_WRITE, >> + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); >> +} >> diff --git a/arch/sandbox/lib/board.c b/arch/sandbox/lib/board.c >> index ae5a517..d71cd6f 100644 >> --- a/arch/sandbox/lib/board.c >> +++ b/arch/sandbox/lib/board.c >> @@ -45,8 +45,12 @@ >> #include <version.h> >> #include <serial.h> >> >> +#include <os.h> >> + >> DECLARE_GLOBAL_DATA_PTR; >> >> +static gd_t gd_mem; >> + >> /************************************************************************ >> * Init Utilities * >> ************************************************************************ >> @@ -147,7 +151,7 @@ void board_init_f(ulong bootflag) >> uchar *mem; >> unsigned long addr_sp, addr, size; >> >> - gd = malloc(sizeof(gd_t)); >> + gd = &gd_mem; >> assert(gd); >> >> memset((void *)gd, 0, sizeof(gd_t)); >> @@ -158,7 +162,8 @@ void board_init_f(ulong bootflag) >> } >> >> size = CONFIG_SYS_SDRAM_SIZE; >> - mem = malloc(size); >> + mem = os_malloc(CONFIG_SYS_SDRAM_SIZE); >> + > > Just a suggestion if you like: perhaps also assert that > CONFIG_SYS_SDRAM_SIZE is greater than TOTAL_MALLOC_LEN. Or assert > lower down at the end of board_init_f() that addr_sp is still greatrer > than mem?
I will leave out this point for a separate patch. >> assert(mem); >> gd->ram_buf = mem; >> addr = (ulong)(mem + size); >> @@ -214,11 +219,9 @@ void board_init_r(gd_t *id, ulong dest_addr) >> post_output_backlog(); >> #endif >> >> -#if 0 /* Sandbox uses system malloc for now */ >> - /* The Malloc area is immediately below the monitor copy in DRAM */ >> - malloc_start = dest_addr - TOTAL_MALLOC_LEN; >> - mem_malloc_init(malloc_start, TOTAL_MALLOC_LEN); >> -#endif >> + /* The Malloc area is at the top of simulated DRAM */ >> + mem_malloc_init(gd->ram_buf + gd->ram_size - TOTAL_MALLOC_LEN, >> + TOTAL_MALLOC_LEN); > > I get: > > board.c:224:4: warning: passing argument 1 of ‘mem_malloc_init’ makes > integer from pointer without a cast [enabled by default] Fixed. Will send an updated version. >> >> /* initialize environment */ >> env_relocate(); >> diff --git a/common/Makefile b/common/Makefile >> index 1b672ad..919be42 100644 >> --- a/common/Makefile >> +++ b/common/Makefile >> @@ -29,9 +29,7 @@ LIB = $(obj)libcommon.o >> ifndef CONFIG_SPL_BUILD >> COBJS-y += main.o >> COBJS-y += command.o >> -ifndef CONFIG_SANDBOX >> COBJS-y += dlmalloc.o >> -endif > > I think this can be removed. It was added unconditionally lower down > in the Makefile by this commit: > > 2d01dd9 omap: spl: fix build break due to changes in FAT > > (incidentally this is what has broken sandbox). Will do. Matthias _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot