On Thu, Oct 1, 2020 at 9:45 AM Joel Sherrill <j...@rtems.org> wrote: > > > > On Thu, Oct 1, 2020 at 10:07 AM Gedare Bloom <ged...@rtems.org> wrote: >> >> This looks ok to me. I suppose eliminating the dependency requires the >> function pointer indirection. The only thing I don't see is why >> redefinition of the _Workspace_Malloc_initializer is allowed in both >> wkspacemallocinitdefault.c and in confdefs/wkspace.h. I would think >> that will cause an error for multiple definitions. > > > I think Entangle is the wrong work. Disentangle or possibly decouple. > > Does minimum actually reflect what you think is the smallest possible > configuration now? That as always the test's purpose -- to have a single > executable that was the smallest we thought we could produce. It seems > with all your changes that it needs a review for tweaks to the configuration. > Should open a ticket to review this. Certainly after all the static initialization/construct stuff it should be possible to go smaller.
> --joel > > --joel >> >> >> On Wed, Sep 30, 2020 at 5:03 AM Sebastian Huber >> <sebastian.hu...@embedded-brains.de> wrote: >> > >> > 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. >> > --- >> > cpukit/Makefile.am | 3 + >> > cpukit/include/rtems/confdefs/wkspace.h | 3 + >> > cpukit/include/rtems/malloc.h | 2 +- >> > cpukit/include/rtems/score/wkspacedata.h | 26 +++++++ >> > cpukit/libcsupport/src/malloc_initialize.c | 78 +++++++++------------ >> > cpukit/libcsupport/src/mallocheap.c | 56 +++++++++++++++ >> > cpukit/score/src/wkspacemallocinitdefault.c | 44 ++++++++++++ >> > cpukit/score/src/wkspacemallocinitunified.c | 47 +++++++++++++ >> > spec/build/cpukit/librtemscpu.yml | 3 + >> > 9 files changed, 217 insertions(+), 45 deletions(-) >> > create mode 100644 cpukit/libcsupport/src/mallocheap.c >> > create mode 100644 cpukit/score/src/wkspacemallocinitdefault.c >> > create mode 100644 cpukit/score/src/wkspacemallocinitunified.c >> > >> > diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am >> > index 2c35354e66..1f9124e175 100644 >> > --- a/cpukit/Makefile.am >> > +++ b/cpukit/Makefile.am >> > @@ -176,6 +176,7 @@ librtemscpu_a_SOURCES += >> > libcsupport/src/mallocdirtydefault.c >> > librtemscpu_a_SOURCES += libcsupport/src/mallocextenddefault.c >> > librtemscpu_a_SOURCES += libcsupport/src/mallocfreespace.c >> > librtemscpu_a_SOURCES += libcsupport/src/mallocgetheapptr.c >> > +librtemscpu_a_SOURCES += libcsupport/src/mallocheap.c >> > librtemscpu_a_SOURCES += libcsupport/src/mallocinfo.c >> > librtemscpu_a_SOURCES += libcsupport/src/malloc_initialize.c >> > librtemscpu_a_SOURCES += libcsupport/src/_malloc_r.c >> > @@ -1025,6 +1026,8 @@ librtemscpu_a_SOURCES += score/src/interr.c >> > librtemscpu_a_SOURCES += score/src/isr.c >> > librtemscpu_a_SOURCES += score/src/wkspace.c >> > librtemscpu_a_SOURCES += score/src/wkspaceisunifieddefault.c >> > +librtemscpu_a_SOURCES += score/src/wkspacemallocinitdefault.c >> > +librtemscpu_a_SOURCES += score/src/wkspacemallocinitunified.c >> > librtemscpu_a_SOURCES += score/src/wkstringduplicate.c >> > librtemscpu_a_SOURCES += score/src/iobase64.c >> > librtemscpu_a_SOURCES += score/src/ioprintf.c >> > diff --git a/cpukit/include/rtems/confdefs/wkspace.h >> > b/cpukit/include/rtems/confdefs/wkspace.h >> > index 89d7c21b2a..d40194cbec 100644 >> > --- a/cpukit/include/rtems/confdefs/wkspace.h >> > +++ b/cpukit/include/rtems/confdefs/wkspace.h >> > @@ -126,6 +126,9 @@ const uintptr_t _Workspace_Size = >> > CONFIGURE_EXECUTIVE_RAM_SIZE; >> > >> > #ifdef CONFIGURE_UNIFIED_WORK_AREAS >> > const bool _Workspace_Is_unified = true; >> > + >> > + struct Heap_Control *( * const _Workspace_Malloc_initializer )( void ) = >> > + _Workspace_Malloc_initialize_unified; >> > #endif >> > >> > uint32_t rtems_minimum_stack_size = CONFIGURE_MINIMUM_TASK_STACK_SIZE; >> > diff --git a/cpukit/include/rtems/malloc.h b/cpukit/include/rtems/malloc.h >> > index 34bdbcb91e..13e94ac38a 100644 >> > --- a/cpukit/include/rtems/malloc.h >> > +++ b/cpukit/include/rtems/malloc.h >> > @@ -43,7 +43,7 @@ extern "C" { >> > */ >> > extern Heap_Control *RTEMS_Malloc_Heap; >> > >> > -void RTEMS_Malloc_Initialize( >> > +Heap_Control *RTEMS_Malloc_Initialize( >> > const Memory_Information *mem, >> > Heap_Initialization_or_extend_handler extend >> > ); >> > diff --git a/cpukit/include/rtems/score/wkspacedata.h >> > b/cpukit/include/rtems/score/wkspacedata.h >> > index 613a320dfe..fd6fd1c1cb 100644 >> > --- a/cpukit/include/rtems/score/wkspacedata.h >> > +++ b/cpukit/include/rtems/score/wkspacedata.h >> > @@ -43,6 +43,8 @@ >> > extern "C" { >> > #endif >> > >> > +struct Heap_Control; >> > + >> > /** >> > * @addtogroup RTEMSScoreWorkspace >> > * >> > @@ -65,6 +67,30 @@ extern const uintptr_t _Workspace_Size; >> > */ >> > extern const bool _Workspace_Is_unified; >> > >> > +/** >> > + * @brief Initializes the C Program Heap separated from the RTEMS >> > Workspace. >> > + * >> > + * @return Returns the heap control used for the C Program Heap. >> > + */ >> > +struct Heap_Control *_Workspace_Malloc_initialize_separate( void ); >> > + >> > +/** >> > + * @brief Initializes the C Program Heap so that it is unified with the >> > RTEMS >> > + * Workspace. >> > + * >> > + * @return Returns the heap control used for the C Program Heap. >> > + */ >> > +struct Heap_Control *_Workspace_Malloc_initialize_unified( void ); >> > + >> > +/** >> > + * @brief This constant provides the C Program Heap initialization >> > handler. >> > + * >> > + * This constant is defined by the application configuration option >> > + * #CONFIGURE_UNIFIED_WORK_AREAS via <rtems/confdefs.h> or a default >> > + * configuration. >> > + */ >> > +extern struct Heap_Control *( * const _Workspace_Malloc_initializer )( >> > void ); >> > + >> > /** @} */ >> > >> > #ifdef __cplusplus >> > 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 ); >> > +} >> > diff --git a/cpukit/libcsupport/src/mallocheap.c >> > b/cpukit/libcsupport/src/mallocheap.c >> > new file mode 100644 >> > index 0000000000..006362f209 >> > --- /dev/null >> > +++ b/cpukit/libcsupport/src/mallocheap.c >> > @@ -0,0 +1,56 @@ >> > +/* SPDX-License-Identifier: BSD-2-Clause */ >> > + >> > +/** >> > + * @file >> > + * >> > + * @ingroup MallocSupport >> > + * >> > + * @brief This source file provides the C Program Heap control along with >> > the >> > + * system initialization handler. >> > + */ >> > + >> > +/* >> > + * 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/malloc.h> >> > +#include <rtems/sysinit.h> >> > +#include <rtems/score/wkspacedata.h> >> > + >> > +Heap_Control *RTEMS_Malloc_Heap; >> > + >> > +static void _Malloc_Initialize( void ) >> > +{ >> > + RTEMS_Malloc_Heap = ( *_Workspace_Malloc_initializer )(); >> > +} >> > + >> > +RTEMS_SYSINIT_ITEM( >> > + _Malloc_Initialize, >> > + RTEMS_SYSINIT_MALLOC, >> > + RTEMS_SYSINIT_ORDER_MIDDLE >> > +); >> > diff --git a/cpukit/score/src/wkspacemallocinitdefault.c >> > b/cpukit/score/src/wkspacemallocinitdefault.c >> > new file mode 100644 >> > index 0000000000..586c3eef7c >> > --- /dev/null >> > +++ b/cpukit/score/src/wkspacemallocinitdefault.c >> > @@ -0,0 +1,44 @@ >> > +/* SPDX-License-Identifier: BSD-2-Clause */ >> > + >> > +/** >> > + * @file >> > + * >> > + * @ingroup RTEMSScoreWorkspace >> > + * >> > + * @brief This source file provides the default definition of >> > + * _Workspace_Malloc_initializer. >> > + */ >> > + >> > +/* >> > + * 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/score/wkspacedata.h> >> > + >> > +struct Heap_Control *( * const _Workspace_Malloc_initializer )( void ) = >> > + _Workspace_Malloc_initialize_separate; >> > diff --git a/cpukit/score/src/wkspacemallocinitunified.c >> > b/cpukit/score/src/wkspacemallocinitunified.c >> > new file mode 100644 >> > index 0000000000..d90956c051 >> > --- /dev/null >> > +++ b/cpukit/score/src/wkspacemallocinitunified.c >> > @@ -0,0 +1,47 @@ >> > +/* SPDX-License-Identifier: BSD-2-Clause */ >> > + >> > +/** >> > + * @file >> > + * >> > + * @ingroup RTEMSScoreWorkspace >> > + * >> > + * @brief This source file provides the implementation of >> > + * _Workspace_Malloc_initialize_unified(). >> > + */ >> > + >> > +/* >> > + * 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/score/wkspacedata.h> >> > +#include <rtems/score/wkspace.h> >> > + >> > +struct Heap_Control *_Workspace_Malloc_initialize_unified( void ) >> > +{ >> > + return &_Workspace_Area; >> > +} >> > diff --git a/spec/build/cpukit/librtemscpu.yml >> > b/spec/build/cpukit/librtemscpu.yml >> > index 21dc239b1b..2322e33996 100644 >> > --- a/spec/build/cpukit/librtemscpu.yml >> > +++ b/spec/build/cpukit/librtemscpu.yml >> > @@ -669,6 +669,7 @@ source: >> > - cpukit/libcsupport/src/mallocextenddefault.c >> > - cpukit/libcsupport/src/mallocfreespace.c >> > - cpukit/libcsupport/src/mallocgetheapptr.c >> > +- cpukit/libcsupport/src/mallocheap.c >> > - cpukit/libcsupport/src/mallocinfo.c >> > - cpukit/libcsupport/src/malloc_initialize.c >> > - cpukit/libcsupport/src/_malloc_r.c >> > @@ -1575,6 +1576,8 @@ source: >> > - cpukit/score/src/watchdogtimeslicedefault.c >> > - cpukit/score/src/wkspace.c >> > - cpukit/score/src/wkspaceisunifieddefault.c >> > +- cpukit/score/src/wkspacemallocinitdefault.c >> > +- cpukit/score/src/wkspacemallocinitunified.c >> > - cpukit/score/src/wkstringduplicate.c >> > target: rtemscpu >> > type: build >> > -- >> > 2.26.2 >> > >> > _______________________________________________ >> > devel mailing list >> > devel@rtems.org >> > http://lists.rtems.org/mailman/listinfo/devel >> _______________________________________________ >> devel mailing list >> devel@rtems.org >> http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel