Hi Matthias, On Thu, Nov 3, 2011 at 11:02 AM, Matthias Weisser <weiss...@arcor.de> wrote: > Using mmap to allocate memory from the OS for RAM simulation we can use > u-boot own malloc implementation. > > Signed-off-by: Matthias Weisser <weiss...@arcor.de> > --- > Changes in V3: > Fixed a build warning > > 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 > > This patch also fixes the runtime error of sandbox introduced in > 2d01dd9 omap: spl: fix build break due to changes in FAT > > arch/sandbox/cpu/os.c | 7 +++++++ > arch/sandbox/lib/board.c | 17 ++++++++++------- > common/Makefile | 3 --- > include/os.h | 8 ++++++++ > 4 files changed, 25 insertions(+), 10 deletions(-)
Unfortunately the terminal changes got in before you - can you please rebase and resubmit? Otherwise I have tested this again and it work well, thank you. Regards, Simon > > 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..b7997e9 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); > + > 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((ulong)gd->ram_buf + gd->ram_size - TOTAL_MALLOC_LEN, > + TOTAL_MALLOC_LEN); > > /* initialize environment */ > env_relocate(); > diff --git a/common/Makefile b/common/Makefile > index 1b672ad..015c17e 100644 > --- a/common/Makefile > +++ b/common/Makefile > @@ -29,9 +29,6 @@ LIB = $(obj)libcommon.o > ifndef CONFIG_SPL_BUILD > COBJS-y += main.o > COBJS-y += command.o > -ifndef CONFIG_SANDBOX > -COBJS-y += dlmalloc.o > -endif > COBJS-y += exports.o > COBJS-$(CONFIG_SYS_HUSH_PARSER) += hush.o > COBJS-y += image.o > diff --git a/include/os.h b/include/os.h > index 3ea6d2d..2bb2fb7 100644 > --- a/include/os.h > +++ b/include/os.h > @@ -71,3 +71,11 @@ int os_close(int fd); > * @param exit_code exit code for U-Boot > */ > void os_exit(int exit_code); > + > +/** > + * Acquires some memory from the underlying os. > + * > + * \param length Number of bytes to be allocated > + * \return Pointer to length bytes or NULL on error > + */ > +void *os_malloc(size_t length); > -- > 1.7.4.1 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot