[rtems commit] stackchk01: Check CPU_STACK_MINIMUM_SIZE

Sebastian Huber sebh at rtems.org
Fri Oct 14 09:41:34 UTC 2022


Module:    rtems
Branch:    master
Commit:    6a8208533d80339d20fb36258abac84357811152
Changeset: http://git.rtems.org/rtems/commit/?id=6a8208533d80339d20fb36258abac84357811152

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Oct  6 08:26:47 2022 +0200

stackchk01: Check CPU_STACK_MINIMUM_SIZE

Ensure that the CPU_STACK_MINIMUM_SIZE is suffiently larger than the stack
usage in simple applications.

---

 testsuites/libtests/stackchk01/init.c         | 30 ++++++++++++++++++++-------
 testsuites/libtests/stackchk01/stackchk01.doc | 12 +++++++++--
 2 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/testsuites/libtests/stackchk01/init.c b/testsuites/libtests/stackchk01/init.c
index 9e58409b17..b87b6baa2d 100644
--- a/testsuites/libtests/stackchk01/init.c
+++ b/testsuites/libtests/stackchk01/init.c
@@ -35,14 +35,18 @@
 
 const char rtems_test_name[] = "STACKCHK 1";
 
-/* forward declarations to avoid warnings */
-rtems_task Init(rtems_task_argument argument);
+static void stack_visitor( const rtems_stack_checker_info *info, void *arg )
+{
+  if ( rtems_object_id_get_api( info->id ) == 1 ) {
+    *(uintptr_t *) arg = info->used;
+  }
+}
 
-rtems_task Init(
-  rtems_task_argument argument
-)
+static rtems_task Init( rtems_task_argument argument )
 {
-  bool              blown;
+  bool      blown;
+  uintptr_t used;
+  uintptr_t limit;
 
   TEST_BEGIN();
 
@@ -50,14 +54,26 @@ rtems_task Init(
   blown = rtems_stack_checker_is_blown();
   rtems_test_assert(!blown);
 
+  rtems_task_wake_after( 2 );
+  used = 0;
+  rtems_stack_checker_iterate( stack_visitor, &used );
+  limit = CPU_STACK_MINIMUM_SIZE / 4;
+  printf(
+    "check used IDLE stack size: 0 < %" PRIuPTR " <= %" PRIuPTR "\n",
+    used,
+    limit
+  );
+  rtems_test_assert( used > 0 );
+  rtems_test_assert( used <= limit );
+
   TEST_END();
   rtems_test_exit(0);
 }
 
 /* configuration information */
 
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
 #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
 
 #define CONFIGURE_MAXIMUM_TASKS 1
 #define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
diff --git a/testsuites/libtests/stackchk01/stackchk01.doc b/testsuites/libtests/stackchk01/stackchk01.doc
index 5b3d9c894b..cbb9fb62f9 100644
--- a/testsuites/libtests/stackchk01/stackchk01.doc
+++ b/testsuites/libtests/stackchk01/stackchk01.doc
@@ -30,9 +30,17 @@ This file describes the directives and concepts tested by this test set.
 test set name:  stackchk01
 
 directives:
-  rtems_stack_checker_is_blown
+
+* CPU_STACK_MINIMUM_SIZE
+
+* rtems_stack_checker_is_blown
+
+* rtems_stack_checker_iterate
 
 concepts:
 
-+ ensure that dynamic checks for a blown stack work both when the stack
+* Ensure that dynamic checks for a blown stack work both when the stack
   is not blown and when it is.
+
+* Ensure that the CPU_STACK_MINIMUM_SIZE is suffiently larger than the stack
+  usage in simple applications.



More information about the vc mailing list