summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libcsupport')
-rw-r--r--cpukit/libcsupport/src/malloc_initialize.c57
1 files changed, 41 insertions, 16 deletions
diff --git a/cpukit/libcsupport/src/malloc_initialize.c b/cpukit/libcsupport/src/malloc_initialize.c
index dc94b489ff..520960d547 100644
--- a/cpukit/libcsupport/src/malloc_initialize.c
+++ b/cpukit/libcsupport/src/malloc_initialize.c
@@ -18,33 +18,59 @@
#endif
#include <rtems/malloc.h>
+#include <rtems/score/wkspace.h>
+#include <rtems/sysinit.h>
#include "malloc_p.h"
+Heap_Control *RTEMS_Malloc_Heap;
+
+static void _Malloc_Initialize( void )
+{
+ RTEMS_Malloc_Initialize( _Memory_Get(), _Heap_Extend );
+}
+
+RTEMS_SYSINIT_ITEM(
+ _Malloc_Initialize,
+ RTEMS_SYSINIT_MALLOC,
+ RTEMS_SYSINIT_ORDER_MIDDLE
+);
+
#ifdef RTEMS_NEWLIB
+static Heap_Control _Malloc_Heap;
+
void RTEMS_Malloc_Initialize(
- const Heap_Area *areas,
- size_t area_count,
- Heap_Initialization_or_extend_handler extend
+ const Memory_Information *mem,
+ Heap_Initialization_or_extend_handler extend
)
{
- Heap_Control *heap = RTEMS_Malloc_Heap;
+ if ( rtems_configuration_get_unified_work_area() ) {
+ RTEMS_Malloc_Heap = &_Workspace_Area;
+ } else {
+ Heap_Control *heap;
+ Heap_Initialization_or_extend_handler init_or_extend;
+ uintptr_t page_size;
+ size_t i;
+
+ heap = &_Malloc_Heap;
+ RTEMS_Malloc_Heap = heap;
+ init_or_extend = _Heap_Initialize;
+ page_size = CPU_HEAP_ALIGNMENT;
- if ( !rtems_configuration_get_unified_work_area() ) {
- Heap_Initialization_or_extend_handler init_or_extend = _Heap_Initialize;
- uintptr_t page_size = CPU_HEAP_ALIGNMENT;
- size_t i;
+ for (i = 0; i < _Memory_Get_count( mem ); ++i) {
+ Memory_Area *area;
+ uintptr_t space_available;
- for (i = 0; i < area_count; ++i) {
- const Heap_Area *area = &areas [i];
- uintptr_t space_available = (*init_or_extend)(
+ area = _Memory_Get_area( mem, i );
+ space_available = ( *init_or_extend )(
heap,
- area->begin,
- area->size,
+ _Memory_Get_free_begin( area ),
+ _Memory_Get_free_size( area ),
page_size
);
if ( space_available > 0 ) {
+ _Memory_Consume( area, _Memory_Get_free_size( area ) );
init_or_extend = extend;
}
}
@@ -56,9 +82,8 @@ void RTEMS_Malloc_Initialize(
}
#else
void RTEMS_Malloc_Initialize(
- Heap_Area *areas,
- size_t area_count,
- Heap_Initialization_or_extend_handler extend
+ const Memory_Information *mem,
+ Heap_Initialization_or_extend_handler extend
)
{
/* FIXME: Dummy function */