From 2d07ce6d2145b4bdc6a9075e0727cde2a50180a6 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 4 Feb 2020 15:26:31 +0100 Subject: config: Add CONFIGURE_DIRTY_MEMORY Replace the BSP_DIRTY_MEMORY BSP option with a CONFIGURE_DIRTY_MEMORY configuration option. Update #3843. --- bsps/shared/start/bootcard.c | 13 ------------ c/src/aclocal/bsp-bootcard-options.m4 | 12 ++--------- cpukit/Makefile.am | 1 + cpukit/include/rtems/confdefs.h | 8 +++++++ cpukit/include/rtems/score/memory.h | 5 +++++ cpukit/score/src/memorydirtyfreeareas.c | 37 +++++++++++++++++++++++++++++++++ testsuites/sptests/sp54/init.c | 2 ++ 7 files changed, 55 insertions(+), 23 deletions(-) create mode 100644 cpukit/score/src/memorydirtyfreeareas.c diff --git a/bsps/shared/start/bootcard.c b/bsps/shared/start/bootcard.c index 2eef1ea710..8f053012ec 100644 --- a/bsps/shared/start/bootcard.c +++ b/bsps/shared/start/bootcard.c @@ -24,19 +24,6 @@ */ const char *bsp_boot_cmdline; -#if BSP_DIRTY_MEMORY == 1 -static void bsp_dirty_memory(void) -{ - _Memory_Fill( _Memory_Get(), 0xcf ); -} - -RTEMS_SYSINIT_ITEM( - bsp_dirty_memory, - RTEMS_SYSINIT_DIRTY_MEMORY, - RTEMS_SYSINIT_ORDER_MIDDLE -); -#endif - RTEMS_SYSINIT_ITEM( bsp_start, RTEMS_SYSINIT_BSP_START, diff --git a/c/src/aclocal/bsp-bootcard-options.m4 b/c/src/aclocal/bsp-bootcard-options.m4 index 2454ec5094..b0d25f383c 100644 --- a/c/src/aclocal/bsp-bootcard-options.m4 +++ b/c/src/aclocal/bsp-bootcard-options.m4 @@ -1,17 +1,9 @@ dnl dnl BSP_BOOTCARD_OPTIONS - some autoconf voodoo to provide each BSPs' dnl configure script with the standard options supported by boot_card() -dnl and other required parts of the BSP Framework. Currently, this is -dnl -dnl - Can optionally dirty memory at boot time. +dnl and other required parts of the BSP Framework. dnl dnl To be used in bsp-configure scripts -AC_DEFUN([RTEMS_BSP_BOOTCARD_OPTIONS],[ -RTEMS_BSPOPTS_SET([BSP_DIRTY_MEMORY],[*],[0]) -RTEMS_BSPOPTS_HELP([BSP_DIRTY_MEMORY], -[If defined, then the BSP Framework will put a non-zero pattern into - the RTEMS Workspace and C program heap. This should assist in finding - code that assumes memory starts set to zero.]) -]) +AC_DEFUN([RTEMS_BSP_BOOTCARD_OPTIONS],[]) diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am index b9ab123b49..9182919558 100644 --- a/cpukit/Makefile.am +++ b/cpukit/Makefile.am @@ -853,6 +853,7 @@ librtemscpu_a_SOURCES += score/src/heapiterate.c librtemscpu_a_SOURCES += score/src/heapgreedy.c librtemscpu_a_SOURCES += score/src/heapnoextend.c librtemscpu_a_SOURCES += score/src/memoryallocate.c +librtemscpu_a_SOURCES += score/src/memorydirtyfreeareas.c librtemscpu_a_SOURCES += score/src/memoryfill.c librtemscpu_a_SOURCES += score/src/memoryzerobeforeuse.c librtemscpu_a_SOURCES += score/src/memoryzerofreeareas.c diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index 982e3ddb56..659fee936f 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -2802,6 +2802,14 @@ struct _reent *__getreent(void) #endif }; + #ifdef CONFIGURE_DIRTY_MEMORY + RTEMS_SYSINIT_ITEM( + _Memory_Dirty_free_areas, + RTEMS_SYSINIT_DIRTY_MEMORY, + RTEMS_SYSINIT_ORDER_MIDDLE + ); + #endif + #ifdef CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY const bool _Memory_Zero_before_use = true; diff --git a/cpukit/include/rtems/score/memory.h b/cpukit/include/rtems/score/memory.h index ffc4897ed5..440a59c793 100644 --- a/cpukit/include/rtems/score/memory.h +++ b/cpukit/include/rtems/score/memory.h @@ -344,6 +344,11 @@ extern const bool _Memory_Zero_before_use; */ void _Memory_Zero_free_areas( void ); +/** + * @brief Dirty all free memory areas of the system. + */ +void _Memory_Dirty_free_areas( void ); + /** @} */ #ifdef __cplusplus diff --git a/cpukit/score/src/memorydirtyfreeareas.c b/cpukit/score/src/memorydirtyfreeareas.c new file mode 100644 index 0000000000..537dff2697 --- /dev/null +++ b/cpukit/score/src/memorydirtyfreeareas.c @@ -0,0 +1,37 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2020 embedded brains GmbH + * + * 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. + */ + +#if HAVE_CONFIG_H +#include "config.h" +#endif + +#include + +void _Memory_Dirty_free_areas( void ) +{ + _Memory_Fill( _Memory_Get(), 0xcf ); +} diff --git a/testsuites/sptests/sp54/init.c b/testsuites/sptests/sp54/init.c index c9c8d6fe30..07001e1e5e 100644 --- a/testsuites/sptests/sp54/init.c +++ b/testsuites/sptests/sp54/init.c @@ -83,6 +83,8 @@ rtems_initialization_tasks_table Initialization_tasks[1] = #define CONFIGURE_INIT_TASK_TABLE_SIZE 0 #define CONFIGURE_INIT_TASK_STACK_SIZE 0 +#define CONFIGURE_DIRTY_MEMORY + /* * Ensure we test the case where memory is zero. */ -- cgit v1.2.3