forked from Imagelibrary/rtems
libc: Optimize malloc() initialization
The BSPs provide memory for the separate C Program Heap initialization via _Memory_Get(). Most BSPs provide exactly one memory area. Only two BSPs provide more than one memory area (arm/altera-cyclone-v and bsps/powerpc/mpc55xxevb). Only if more than one memory area is provided, there is a need to use _Heap_Extend(). Provide two implementations to initialize the separate C Program Heap and let the BSP select one of the implementations based on the number of provided memory areas. This gets rid of a dependency on _Heap_Extend(). It also avoids dead code sections for most BSPs. Change licence to BSD-2-Clause according to file history. Update #3053.
This commit is contained in:
49
bsps/shared/start/mallocinitmulti.c
Normal file
49
bsps/shared/start/mallocinitmulti.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief This source file contains the _Workspace_Malloc_initialize_separate()
|
||||
* implementation which supports more than one memory area.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/mallocinitmulti.h>
|
||||
#include <rtems/score/wkspacedata.h>
|
||||
|
||||
static Heap_Control _Malloc_Heap;
|
||||
|
||||
Heap_Control *_Workspace_Malloc_initialize_separate( void )
|
||||
{
|
||||
return _Malloc_Initialize_for_multiple_areas( &_Malloc_Heap );
|
||||
}
|
||||
49
bsps/shared/start/mallocinitone.c
Normal file
49
bsps/shared/start/mallocinitone.c
Normal file
@@ -0,0 +1,49 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief This source file contains the _Workspace_Malloc_initialize_separate()
|
||||
* implementation which supports exactly one memory area.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/mallocinitone.h>
|
||||
#include <rtems/score/wkspacedata.h>
|
||||
|
||||
static Heap_Control _Malloc_Heap;
|
||||
|
||||
Heap_Control *_Workspace_Malloc_initialize_separate( void )
|
||||
{
|
||||
return _Malloc_Initialize_for_one_area( &_Malloc_Heap );
|
||||
}
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <rtems.h>
|
||||
#include <rtems/bspIo.h>
|
||||
#include <rtems/libcsupport.h> /* for malloc_walk() */
|
||||
#include <rtems/score/memory.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
@@ -43,10 +42,7 @@ extern "C" {
|
||||
*/
|
||||
extern Heap_Control *RTEMS_Malloc_Heap;
|
||||
|
||||
Heap_Control *RTEMS_Malloc_Initialize(
|
||||
const Memory_Information *mem,
|
||||
Heap_Initialization_or_extend_handler extend
|
||||
);
|
||||
void _Malloc_Initialize( void );
|
||||
|
||||
void rtems_heap_set_sbrk_amount( ptrdiff_t sbrk_amount );
|
||||
|
||||
|
||||
100
cpukit/include/rtems/mallocinitmulti.h
Normal file
100
cpukit/include/rtems/mallocinitmulti.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief This header file provides the implementation of
|
||||
* _Malloc_Initialize_for_multiple_areas().
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RTEMS_MALLOCINITMULTI_H
|
||||
#define _RTEMS_MALLOCINITMULTI_H
|
||||
|
||||
#include <rtems/malloc.h>
|
||||
#include <rtems/score/heapimpl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief Initializes the separate C Program Heap with support for more than
|
||||
* one memory area.
|
||||
*
|
||||
* This implementation should be used by BSPs which provide more than one
|
||||
* memory area via _Memory_Get() to implement
|
||||
* _Workspace_Malloc_initialize_separate().
|
||||
*/
|
||||
RTEMS_INLINE_ROUTINE Heap_Control *_Malloc_Initialize_for_multiple_areas(
|
||||
Heap_Control *heap
|
||||
)
|
||||
{
|
||||
const Memory_Information *mem;
|
||||
Heap_Initialization_or_extend_handler init_or_extend;
|
||||
uintptr_t page_size;
|
||||
size_t i;
|
||||
|
||||
mem = _Memory_Get();
|
||||
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;
|
||||
|
||||
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 = _Heap_Extend;
|
||||
}
|
||||
}
|
||||
|
||||
if ( init_or_extend == _Heap_Initialize ) {
|
||||
_Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP );
|
||||
}
|
||||
|
||||
return heap;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RTEMS_MALLOCINITMULTI_H */
|
||||
90
cpukit/include/rtems/mallocinitone.h
Normal file
90
cpukit/include/rtems/mallocinitone.h
Normal file
@@ -0,0 +1,90 @@
|
||||
/* SPDX-License-Identifier: BSD-2-Clause */
|
||||
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief This header file provides the implementation of
|
||||
* _Malloc_Initialize_for_one_area().
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2012, 2020 embedded brains GmbH (http://www.embedded-brains.de)
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RTEMS_MALLOCINITONE_H
|
||||
#define _RTEMS_MALLOCINITONE_H
|
||||
|
||||
#include <rtems/malloc.h>
|
||||
#include <rtems/score/assert.h>
|
||||
#include <rtems/score/heapimpl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @ingroup MallocSupport
|
||||
*
|
||||
* @brief Initializes the separate C Program Heap with support for exactly one
|
||||
* memory area.
|
||||
*
|
||||
* This implementation should be used by BSPs which provide exactly one memory
|
||||
* area via _Memory_Get() to implement _Workspace_Malloc_initialize_separate().
|
||||
*/
|
||||
RTEMS_INLINE_ROUTINE Heap_Control *_Malloc_Initialize_for_one_area(
|
||||
Heap_Control *heap
|
||||
)
|
||||
{
|
||||
const Memory_Information *mem;
|
||||
Memory_Area *area;
|
||||
uintptr_t space_available;
|
||||
|
||||
mem = _Memory_Get();
|
||||
_Assert( _Memory_Get_count( mem ) == 1 );
|
||||
|
||||
RTEMS_Malloc_Heap = heap;
|
||||
area = _Memory_Get_area( mem, 0 );
|
||||
space_available = _Heap_Initialize(
|
||||
heap,
|
||||
_Memory_Get_free_begin( area ),
|
||||
_Memory_Get_free_size( area ),
|
||||
CPU_HEAP_ALIGNMENT
|
||||
);
|
||||
|
||||
if ( space_available > 0 ) {
|
||||
_Memory_Consume( area, _Memory_Get_free_size( area ) );
|
||||
} else {
|
||||
_Internal_error( INTERNAL_ERROR_NO_MEMORY_FOR_HEAP );
|
||||
}
|
||||
|
||||
return heap;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RTEMS_MALLOCINITONE_H */
|
||||
@@ -1,81 +0,0 @@
|
||||
/**
|
||||
* @file
|
||||
*
|
||||
* @brief RTEMS_Malloc_Initialize() implementation.
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2012.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.org/license/LICENSE.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <rtems/malloc.h>
|
||||
#include <rtems/score/wkspace.h>
|
||||
|
||||
#include "malloc_p.h"
|
||||
|
||||
#ifdef RTEMS_NEWLIB
|
||||
static Heap_Control _Malloc_Heap;
|
||||
|
||||
Heap_Control *RTEMS_Malloc_Initialize(
|
||||
const Memory_Information *mem,
|
||||
Heap_Initialization_or_extend_handler extend
|
||||
)
|
||||
{
|
||||
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;
|
||||
|
||||
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
|
||||
);
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
return heap;
|
||||
}
|
||||
#else
|
||||
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 );
|
||||
}
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
Heap_Control *RTEMS_Malloc_Heap;
|
||||
|
||||
static void _Malloc_Initialize( void )
|
||||
void _Malloc_Initialize( void )
|
||||
{
|
||||
RTEMS_Malloc_Heap = ( *_Workspace_Malloc_initializer )();
|
||||
}
|
||||
|
||||
@@ -139,6 +139,7 @@ source:
|
||||
- bsps/shared/irq/irq-default-handler.c
|
||||
- bsps/shared/start/bsp-fdt.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitmulti.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/stackalloc.c
|
||||
- bsps/shared/start/wkspaceinitmulti.c
|
||||
|
||||
@@ -106,6 +106,7 @@ source:
|
||||
- bsps/shared/start/bsp-fdt.c
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/stackalloc.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
|
||||
@@ -56,6 +56,7 @@ source:
|
||||
- bsps/shared/start/bsp-fdt.c
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/stackalloc.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
|
||||
@@ -80,6 +80,7 @@ source:
|
||||
- bsps/shared/irq/irq-default-handler.c
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
type: build
|
||||
|
||||
@@ -11,5 +11,6 @@ install: []
|
||||
links: []
|
||||
source:
|
||||
- bsps/shared/start/bspgetworkarea-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
type: build
|
||||
|
||||
@@ -94,6 +94,7 @@ source:
|
||||
- bsps/shared/irq/irq-default-handler.c
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitmulti.c
|
||||
- bsps/shared/start/stackalloc.c
|
||||
- bsps/shared/start/wkspaceinitmulti.c
|
||||
type: build
|
||||
|
||||
@@ -11,5 +11,6 @@ install: []
|
||||
links: []
|
||||
source:
|
||||
- bsps/powerpc/shared/start/bspgetworkarea.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
type: build
|
||||
|
||||
@@ -72,6 +72,7 @@ source:
|
||||
- bsps/shared/start/bsp-fdt.c
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
type: build
|
||||
|
||||
@@ -46,6 +46,7 @@ source:
|
||||
- bsps/shared/start/bspfatal-default.c
|
||||
- bsps/shared/start/bspreset-empty.c
|
||||
- bsps/shared/start/gettargethash-default.c
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/sbrk.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
type: build
|
||||
|
||||
@@ -10,6 +10,7 @@ includes: []
|
||||
install: []
|
||||
links: []
|
||||
source:
|
||||
- bsps/shared/start/mallocinitone.c
|
||||
- bsps/shared/start/wkspaceinitone.c
|
||||
- bsps/sparc/shared/start/bspgetworkarea.c
|
||||
type: build
|
||||
|
||||
@@ -675,7 +675,6 @@ source:
|
||||
- cpukit/libcsupport/src/malloc.c
|
||||
- cpukit/libcsupport/src/malloc_deferred.c
|
||||
- cpukit/libcsupport/src/malloc_dirtier.c
|
||||
- cpukit/libcsupport/src/malloc_initialize.c
|
||||
- cpukit/libcsupport/src/malloc_walk.c
|
||||
- cpukit/libcsupport/src/mallocdirtydefault.c
|
||||
- cpukit/libcsupport/src/mallocextenddefault.c
|
||||
|
||||
@@ -78,16 +78,23 @@ rtems_task Init(
|
||||
)
|
||||
{
|
||||
Heap_Control *real_heap;
|
||||
Memory_Area area;
|
||||
Memory_Information mem = {
|
||||
.count = 1,
|
||||
.areas = &area
|
||||
};
|
||||
const Memory_Information *mem;
|
||||
Memory_Area *area;
|
||||
size_t i;
|
||||
|
||||
void *p;
|
||||
|
||||
TEST_BEGIN();
|
||||
|
||||
mem = _Memory_Get();
|
||||
|
||||
for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
|
||||
area = _Memory_Get_area( mem, i );
|
||||
_Memory_Initialize( area, NULL, NULL );
|
||||
}
|
||||
|
||||
area = _Memory_Get_area( mem, 0 );
|
||||
|
||||
/* Safe information on real heap */
|
||||
real_heap = malloc_get_heap_pointer();
|
||||
malloc_set_heap_pointer( &TempHeap );
|
||||
@@ -98,8 +105,8 @@ rtems_task Init(
|
||||
|
||||
sbrk_count = 0;
|
||||
offset = 256;
|
||||
_Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
|
||||
RTEMS_Malloc_Initialize( &mem, NULL );
|
||||
_Memory_Initialize_by_size( area, &Malloc_Heap[ 0 ], offset );
|
||||
_Malloc_Initialize();
|
||||
|
||||
errno = 0;
|
||||
p = malloc( 256 );
|
||||
@@ -113,8 +120,8 @@ rtems_task Init(
|
||||
|
||||
sbrk_count = 0;
|
||||
offset = 256;
|
||||
_Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
|
||||
RTEMS_Malloc_Initialize( &mem, NULL );
|
||||
_Memory_Initialize_by_size( area, &Malloc_Heap[ 0 ], offset );
|
||||
_Malloc_Initialize();
|
||||
|
||||
p = malloc(1);
|
||||
rtems_test_assert( p != NULL );
|
||||
@@ -128,8 +135,8 @@ rtems_task Init(
|
||||
|
||||
sbrk_count = 0;
|
||||
offset = 256;
|
||||
_Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
|
||||
RTEMS_Malloc_Initialize( &mem, NULL );
|
||||
_Memory_Initialize_by_size( area, &Malloc_Heap[ 0 ], offset );
|
||||
_Malloc_Initialize();
|
||||
|
||||
errno = 0;
|
||||
p = malloc( sizeof( Malloc_Heap ) );
|
||||
@@ -141,8 +148,8 @@ rtems_task Init(
|
||||
|
||||
sbrk_count = 0;
|
||||
offset = 256;
|
||||
_Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
|
||||
RTEMS_Malloc_Initialize( &mem, NULL );
|
||||
_Memory_Initialize_by_size( area, &Malloc_Heap[ 0 ], offset );
|
||||
_Malloc_Initialize();
|
||||
|
||||
p = malloc( 128 );
|
||||
rtems_test_assert( p != NULL );
|
||||
@@ -156,8 +163,8 @@ rtems_task Init(
|
||||
|
||||
sbrk_count = -1;
|
||||
offset = 256;
|
||||
_Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
|
||||
RTEMS_Malloc_Initialize( &mem, NULL );
|
||||
_Memory_Initialize_by_size( area, &Malloc_Heap[ 0 ], offset );
|
||||
_Malloc_Initialize();
|
||||
|
||||
errno = 0;
|
||||
p = malloc( 256 );
|
||||
|
||||
Reference in New Issue
Block a user