summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/confdefs/percpu.h
diff options
context:
space:
mode:
authorJoel Sherrill <joel@rtems.org>2021-10-01 14:56:34 -0500
committerJoel Sherrill <joel@rtems.org>2021-10-07 10:31:38 -0500
commitc8a10609883c67629ea029be617a42b75d168f0f (patch)
tree77fb5ef6d9a04763840be4a205516d5fb542d6e4 /cpukit/include/rtems/confdefs/percpu.h
parentpowerpc/motorola_powerpc: Map LibBSD bus space to the PCI base address (diff)
downloadrtems-c8a10609883c67629ea029be617a42b75d168f0f.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 #4520.
Diffstat (limited to 'cpukit/include/rtems/confdefs/percpu.h')
-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 f3a9a4f3e7..b7baebea05 100644
--- a/cpukit/include/rtems/confdefs/percpu.h
+++ b/cpukit/include/rtems/confdefs/percpu.h
@@ -133,11 +133,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)