diff --git a/arch/sim/src/sim/up_heap.c b/arch/sim/src/sim/up_heap.c index 16ace89b586..e57279d3715 100644 --- a/arch/sim/src/sim/up_heap.c +++ b/arch/sim/src/sim/up_heap.c @@ -135,7 +135,8 @@ void mm_initialize(FAR struct mm_heap_s *heap, FAR void *heap_start, size_t heap_size) { FAR struct mm_heap_impl_s *impl; - impl = host_malloc(sizeof(struct mm_heap_impl_s)); + + impl = host_memalign(sizeof(FAR void *), sizeof(*impl)); impl->mm_delaylist = NULL; heap->mm_impl = impl; } @@ -176,10 +177,7 @@ void mm_addregion(FAR struct mm_heap_s *heap, FAR void *heapstart, FAR void *mm_malloc(FAR struct mm_heap_s *heap, size_t size) { - /* Firstly, free mm_delaylist */ - - mm_free_delaylist(heap); - return host_malloc(size); + return mm_realloc(heap, NULL, size); } /**************************************************************************** @@ -218,8 +216,6 @@ FAR void mm_free(FAR struct mm_heap_s *heap, FAR void *mem) { host_free(mem); } - - return; } /**************************************************************************** @@ -262,8 +258,14 @@ FAR void *mm_realloc(FAR struct mm_heap_s *heap, FAR void *oldmem, FAR void *mm_calloc(FAR struct mm_heap_s *heap, size_t n, size_t elem_size) { - mm_free_delaylist(heap); - return host_calloc(n, elem_size); + size_t size = n * elem_size; + + if (size < elem_size) + { + return NULL; + } + + return mm_zalloc(heap, size); } /**************************************************************************** diff --git a/arch/sim/src/sim/up_hostmemory.c b/arch/sim/src/sim/up_hostmemory.c index 0f024ae2f75..e8238b00389 100644 --- a/arch/sim/src/sim/up_hostmemory.c +++ b/arch/sim/src/sim/up_hostmemory.c @@ -119,26 +119,6 @@ void host_free_shmem(void *mem) munmap(mem, 0); } -void *host_malloc(size_t size) -{ - return malloc(size); -} - -void host_free(void *mem) -{ - free(mem); -} - -void *host_realloc(void *oldmem, size_t size) -{ - return realloc(oldmem, size); -} - -void *host_calloc(size_t n, size_t elem_size) -{ - return calloc(n , elem_size); -} - void *host_memalign(size_t alignment, size_t size) { void *p; @@ -153,6 +133,16 @@ void *host_memalign(size_t alignment, size_t size) return p; } +void host_free(void *mem) +{ + free(mem); +} + +void *host_realloc(void *oldmem, size_t size) +{ + return realloc(oldmem, size); +} + void host_mallinfo(struct host_mallinfo *info) { struct mallinfo tmp; diff --git a/arch/sim/src/sim/up_internal.h b/arch/sim/src/sim/up_internal.h index 706d7b6cecc..0e074369ab6 100644 --- a/arch/sim/src/sim/up_internal.h +++ b/arch/sim/src/sim/up_internal.h @@ -158,11 +158,10 @@ void host_abort(int status); void *host_alloc_heap(size_t sz); void *host_alloc_shmem(const char *name, size_t size, int master); void host_free_shmem(void *mem); -void *host_malloc(size_t size); + +void *host_memalign(size_t alignment, size_t size); void host_free(void *mem); void *host_realloc(void *oldmem, size_t size); -void *host_calloc(size_t n, size_t elem_size); -void *host_memalign(size_t alignment, size_t size); /* up_hosttime.c ************************************************************/