summaryrefslogtreecommitdiffstats
path: root/cpukit/libcsupport/src/malloc_initialize.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-09-30 11:31:58 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-10-01 19:05:33 +0200
commitf2185d109930fb5db31a5c228a3f46178072f270 (patch)
tree166d29b19bcf7ff01b4368f351e3fab52b750c19 /cpukit/libcsupport/src/malloc_initialize.c
parentrtems: Canonicalize name and id checks (diff)
downloadrtems-f2185d109930fb5db31a5c228a3f46178072f270.tar.bz2
Decouple the C Program Heap initialization
Before this patch RTEMS_Malloc_Initialize() had a fixed dependency on _Workspace_Area. Introduce _Workspace_Malloc_initializer to have this dependency only if CONFIGURE_UNIFIED_WORK_AREAS is defined by the application configuration.
Diffstat (limited to 'cpukit/libcsupport/src/malloc_initialize.c')
-rw-r--r--cpukit/libcsupport/src/malloc_initialize.c78
1 files changed, 34 insertions, 44 deletions
diff --git a/cpukit/libcsupport/src/malloc_initialize.c b/cpukit/libcsupport/src/malloc_initialize.c
index 0203e22411..fb0999df01 100644
--- a/cpukit/libcsupport/src/malloc_initialize.c
+++ b/cpukit/libcsupport/src/malloc_initialize.c
@@ -19,73 +19,63 @@
#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(
+Heap_Control *RTEMS_Malloc_Initialize(
const Memory_Information *mem,
Heap_Initialization_or_extend_handler extend
)
{
- 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_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;
+ heap = &_Malloc_Heap;
+ RTEMS_Malloc_Heap = heap;
+ init_or_extend = _Heap_Initialize;
+ page_size = CPU_HEAP_ALIGNMENT;
- for (i = 0; i < _Memory_Get_count( mem ); ++i) {
- Memory_Area *area;
- uintptr_t space_available;
+ for (i = 0; i < _Memory_Get_count( mem ); ++i) {
+ Memory_Area *area;
+ uintptr_t space_available;
- area = _Memory_Get_area( mem, i );
- space_available = ( *init_or_extend )(
- heap,
- _Memory_Get_free_begin( area ),
- _Memory_Get_free_size( area ),
- page_size
- );
+ area = _Memory_Get_area( mem, i );
+ space_available = ( *init_or_extend )(
+ heap,
+ _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;
- }
+ if ( space_available > 0 ) {
+ _Memory_Consume( area, _Memory_Get_free_size( area ) );
+ init_or_extend = extend;
}
+ }
- if ( init_or_extend == _Heap_Initialize ) {
- _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP );
- }
+ if ( init_or_extend == _Heap_Initialize ) {
+ _Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP );
}
+
+ return heap;
}
#else
-void RTEMS_Malloc_Initialize(
+Heap_Control *RTEMS_Malloc_Initialize(
const Memory_Information *mem,
Heap_Initialization_or_extend_handler extend
)
{
/* FIXME: Dummy function */
+ return NULL;
}
#endif
+
+Heap_Control *_Workspace_Malloc_initialize_separate( void )
+{
+ return RTEMS_Malloc_Initialize( _Memory_Get(), _Heap_Extend );
+}