summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/confdefs/percpu.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel@rtems.org>2021-10-07 17:28:26 -0500
committerJoel Sherrill <joel@rtems.org>2021-10-11 08:42:25 -0500
commit822ebb4cae2bb8bc9fe55915bd4acc4942fcd8ce (patch)
treed8b9f10c2f96ca59e190964557f8ab3b0c50af2a /cpukit/include/rtems/confdefs/percpu.h
parentscore: _Thread_queue_Surrender_priority_ceiling() (diff)
downloadrtems-822ebb4cae2bb8bc9fe55915bd4acc4942fcd8ce.tar.bz2
Add support for IDLE Thread stack allocator
Add a stack allocator hook specifically for allocation of IDLE thread stacks. This allows the user to decide if IDLE thread stacks are statically allocated or handled by the same custom allocator mechanism as other thread stacks. Closes #4524.
Diffstat (limited to '')
-rw-r--r--cpukit/include/rtems/confdefs/percpu.h18
1 files changed, 13 insertions, 5 deletions
diff --git a/cpukit/include/rtems/confdefs/percpu.h b/cpukit/include/rtems/confdefs/percpu.h
index badb616988..3bea8340cb 100644
--- a/cpukit/include/rtems/confdefs/percpu.h
+++ b/cpukit/include/rtems/confdefs/percpu.h
@@ -134,11 +134,19 @@ RTEMS_DEFINE_GLOBAL_SYMBOL(
const size_t _Thread_Idle_stack_size = CONFIGURE_IDLE_TASK_STACK_SIZE;
-char _Thread_Idle_stacks[
- _CONFIGURE_MAXIMUM_PROCESSORS
- * ( CONFIGURE_IDLE_TASK_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE )
-] RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT )
-RTEMS_SECTION( ".rtemsstack.idle" );
+/*
+ * If the user provides a custom idle stack allocator, then we do not need
+ * memory reserved for the stacks but the symbol is still referenced in
+ * threadcreateidle.c. The code path just never uses it. Make it minimal
+ * size to proceed.
+ */
+#ifndef CONFIGURE_TASK_STACK_ALLOCATOR_FOR_IDLE
+ char _Thread_Idle_stacks[
+ _CONFIGURE_MAXIMUM_PROCESSORS
+ * ( CONFIGURE_IDLE_TASK_STACK_SIZE + CPU_IDLE_TASK_IS_FP * CONTEXT_FP_SIZE )
+ ] RTEMS_ALIGNED( CPU_INTERRUPT_STACK_ALIGNMENT )
+ RTEMS_SECTION( ".rtemsstack.idle" );
+#endif
#if defined(CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION) && \
!defined(CONFIGURE_IDLE_TASK_BODY)