summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2019-12-13 06:18:36 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-02-04 06:06:41 +0100
commiteea21eaca117ecd98afea164e1808d6530ef487f (patch)
treeca4e15da28b71a5ecca5fc357798261a39b3f250 /testsuites
parentbsps: Remove uses of BSP_GET_WORK_AREA_DEBUG (diff)
downloadrtems-eea21eaca117ecd98afea164e1808d6530ef487f.tar.bz2
bsps: Rework work area initialization
The work area initialization was done by the BSP through bsp_work_area_initialize(). This approach predated the system initialization through the system initialization linker set. The workspace and C program heap were unconditionally initialized. The aim is to support RTEMS application configurations which do not need the workspace and C program heap. In these configurations, the workspace and C prgram heap should not get initialized. Change all bsp_work_area_initialize() to implement _Memory_Get() instead. Move the dirty memory, sbrk(), per-CPU data, workspace, and malloc() heap initialization into separate system initialization steps. This makes it also easier to test the individual initialization steps. This change adds a dependency to _Heap_Extend() to all BSPs. This dependency will be removed in a follow up change. Update #3838.
Diffstat (limited to 'testsuites')
-rw-r--r--testsuites/libtests/malloc04/init.c32
-rw-r--r--testsuites/smptests/smpfatal09/init.c33
-rw-r--r--testsuites/sptests/spfatal09/init.c34
-rw-r--r--testsuites/sptests/spfatal12/init.c30
-rw-r--r--testsuites/sptests/spsysinit01/init.c12
5 files changed, 108 insertions, 33 deletions
diff --git a/testsuites/libtests/malloc04/init.c b/testsuites/libtests/malloc04/init.c
index 632ea28fc4..b568c83d85 100644
--- a/testsuites/libtests/malloc04/init.c
+++ b/testsuites/libtests/malloc04/init.c
@@ -78,7 +78,12 @@ rtems_task Init(
)
{
Heap_Control *real_heap;
- Heap_Area area;
+ Memory_Area area;
+ Memory_Information mem = {
+ .count = 0,
+ .areas = &area
+ };
+
void *p;
TEST_BEGIN();
@@ -93,9 +98,8 @@ rtems_task Init(
sbrk_count = 0;
offset = 256;
- area.begin = &Malloc_Heap [0];
- area.size = offset;
- RTEMS_Malloc_Initialize( &area, 1, NULL );
+ _Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
+ RTEMS_Malloc_Initialize( &mem, NULL );
errno = 0;
p = malloc( 256 );
@@ -109,9 +113,8 @@ rtems_task Init(
sbrk_count = 0;
offset = 256;
- area.begin = &Malloc_Heap [0];
- area.size = offset;
- RTEMS_Malloc_Initialize( &area, 1, NULL );
+ _Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
+ RTEMS_Malloc_Initialize( &mem, NULL );
p = malloc(1);
rtems_test_assert( p != NULL );
@@ -125,9 +128,8 @@ rtems_task Init(
sbrk_count = 0;
offset = 256;
- area.begin = &Malloc_Heap [0];
- area.size = offset;
- RTEMS_Malloc_Initialize( &area, 1, NULL );
+ _Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
+ RTEMS_Malloc_Initialize( &mem, NULL );
errno = 0;
p = malloc( sizeof( Malloc_Heap ) );
@@ -139,9 +141,8 @@ rtems_task Init(
sbrk_count = 0;
offset = 256;
- area.begin = &Malloc_Heap [0];
- area.size = offset;
- RTEMS_Malloc_Initialize( &area, 1, NULL );
+ _Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
+ RTEMS_Malloc_Initialize( &mem, NULL );
p = malloc( 128 );
rtems_test_assert( p != NULL );
@@ -155,9 +156,8 @@ rtems_task Init(
sbrk_count = -1;
offset = 256;
- area.begin = &Malloc_Heap [0];
- area.size = offset;
- RTEMS_Malloc_Initialize( &area, 1, NULL );
+ _Memory_Initialize_by_size( &area, &Malloc_Heap[ 0 ], offset );
+ RTEMS_Malloc_Initialize( &mem, NULL );
errno = 0;
p = malloc( 256 );
diff --git a/testsuites/smptests/smpfatal09/init.c b/testsuites/smptests/smpfatal09/init.c
index ecbb54d586..3ef93921b2 100644
--- a/testsuites/smptests/smpfatal09/init.c
+++ b/testsuites/smptests/smpfatal09/init.c
@@ -31,7 +31,8 @@
#include <rtems.h>
#include <rtems/score/percpudata.h>
-#include <rtems/score/wkspace.h>
+#include <rtems/score/memory.h>
+#include <rtems/sysinit.h>
#include <tmacros.h>
@@ -41,7 +42,26 @@ const char rtems_test_name[] = "SMPFATAL 9";
static void Init( rtems_task_argument arg )
{
- Heap_Area area = { .begin = NULL, .size = 0 };
+ (void) arg;
+}
+
+static void consume_all_memory( void )
+{
+ const Memory_Information *mem;
+ size_t i;
+
+ mem = _Memory_Get();
+
+ for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
+ Memory_Area *area;
+
+ area = _Memory_Get_area( mem, i );
+ _Memory_Consume( area, _Memory_Get_free_size( area ) );
+ }
+}
+
+static void begin_test( void )
+{
int i;
TEST_BEGIN();
@@ -49,10 +69,15 @@ static void Init( rtems_task_argument arg )
RTEMS_OBFUSCATE_VARIABLE( i );
rtems_test_assert( i == 123 );
- _Workspace_Handler_initialization( &area, 1, NULL );
- rtems_test_assert( 0 );
+ consume_all_memory();
}
+RTEMS_SYSINIT_ITEM(
+ begin_test,
+ RTEMS_SYSINIT_PER_CPU_DATA,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
static void fatal_extension(
rtems_fatal_source source,
bool always_set_to_false,
diff --git a/testsuites/sptests/spfatal09/init.c b/testsuites/sptests/spfatal09/init.c
index 5aca7a9ea0..df462bcacf 100644
--- a/testsuites/sptests/spfatal09/init.c
+++ b/testsuites/sptests/spfatal09/init.c
@@ -15,18 +15,44 @@
* http://www.rtems.org/license/LICENSE.
*/
-#include <rtems/malloc.h>
-#include <rtems/libcsupport.h>
+#include <rtems/score/memory.h>
+#include <rtems/sysinit.h>
+
+#include <stdlib.h>
#define FATAL_ERROR_TEST_NAME "9"
#define FATAL_ERROR_DESCRIPTION "Bad heap address to malloc"
#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE
#define FATAL_ERROR_EXPECTED_ERROR INTERNAL_ERROR_NO_MEMORY_FOR_HEAP
-static void force_error(void)
+static void force_error( void )
{
- RTEMS_Malloc_Initialize( NULL, 0, NULL );
+ void *p;
+
/* we will not run this far */
+ p = malloc( 1 );
+ RTEMS_OBFUSCATE_VARIABLE( p );
}
+static void consume_all_memory( void )
+{
+ const Memory_Information *mem;
+ size_t i;
+
+ mem = _Memory_Get();
+
+ for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
+ Memory_Area *area;
+
+ area = _Memory_Get_area( mem, i );
+ _Memory_Consume( area, _Memory_Get_free_size( area ) );
+ }
+}
+
+RTEMS_SYSINIT_ITEM(
+ consume_all_memory,
+ RTEMS_SYSINIT_MALLOC,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
#include "../spfatal_support/spfatalimpl.h"
diff --git a/testsuites/sptests/spfatal12/init.c b/testsuites/sptests/spfatal12/init.c
index c3c1afdd78..3fbd6d1fc6 100644
--- a/testsuites/sptests/spfatal12/init.c
+++ b/testsuites/sptests/spfatal12/init.c
@@ -15,6 +15,8 @@
*/
#include <rtems/score/wkspace.h>
+#include <rtems/score/memory.h>
+#include <rtems/sysinit.h>
#define FATAL_ERROR_TEST_NAME "12"
#define FATAL_ERROR_DESCRIPTION \
@@ -22,12 +24,34 @@
#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE
#define FATAL_ERROR_EXPECTED_ERROR INTERNAL_ERROR_TOO_LITTLE_WORKSPACE
-static void force_error(void)
+static void force_error( void )
{
- Heap_Area area = { .begin = NULL, .size = 0 };
+ void *p;
- _Workspace_Handler_initialization( &area, 1, NULL );
/* we will not run this far */
+ p = _Workspace_Allocate( 1 );
+ RTEMS_OBFUSCATE_VARIABLE( p );
}
+static void consume_all_memory( void )
+{
+ const Memory_Information *mem;
+ size_t i;
+
+ mem = _Memory_Get();
+
+ for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
+ Memory_Area *area;
+
+ area = _Memory_Get_area( mem, i );
+ _Memory_Consume( area, _Memory_Get_free_size( area ) );
+ }
+}
+
+RTEMS_SYSINIT_ITEM(
+ consume_all_memory,
+ RTEMS_SYSINIT_WORKSPACE,
+ RTEMS_SYSINIT_ORDER_FIRST
+);
+
#include "../spfatal_support/spfatalimpl.h"
diff --git a/testsuites/sptests/spsysinit01/init.c b/testsuites/sptests/spsysinit01/init.c
index 20d48c6e65..05629f761f 100644
--- a/testsuites/sptests/spsysinit01/init.c
+++ b/testsuites/sptests/spsysinit01/init.c
@@ -71,8 +71,8 @@
const char rtems_test_name[] = "SPSYSINIT 1";
typedef enum {
- BSP_WORK_AREAS_PRE,
- BSP_WORK_AREAS_POST,
+ WORKSPACE_PRE,
+ WORKSPACE_POST,
BSP_START_PRE,
BSP_START_POST,
CPU_COUNTER_PRE,
@@ -200,16 +200,16 @@ static bool info_is_init(const Objects_Information *info, size_t count)
return _Chain_Node_count_unprotected(&info->Inactive) == count;
}
-FIRST(RTEMS_SYSINIT_BSP_WORK_AREAS)
+FIRST(RTEMS_SYSINIT_WORKSPACE)
{
assert(_Workspace_Area.area_begin == 0);
- next_step(BSP_WORK_AREAS_PRE);
+ next_step(WORKSPACE_PRE);
}
-LAST(RTEMS_SYSINIT_BSP_WORK_AREAS)
+LAST(RTEMS_SYSINIT_WORKSPACE)
{
assert(_Workspace_Area.area_begin != 0);
- next_step(BSP_WORK_AREAS_POST);
+ next_step(WORKSPACE_POST);
}
FIRST(RTEMS_SYSINIT_BSP_START)