Index: c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c
===================================================================
--- c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ c/src/lib/libbsp/arm/shared/arm-a9mpcore-smp.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -56,4 +56,9 @@
 }
 
+void _CPU_SMP_Prepare_start_multitasking( void )
+{
+  /* Do nothing */
+}
+
 void _CPU_SMP_Send_interrupt( uint32_t target_processor_index )
 {
Index: c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c
===================================================================
--- c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ c/src/lib/libbsp/powerpc/qoriq/startup/bspsmp.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -229,4 +229,9 @@
 }
 
+void _CPU_SMP_Prepare_start_multitasking(void)
+{
+  /* Do nothing */
+}
+
 void _CPU_SMP_Send_interrupt(uint32_t target_processor_index)
 {
Index: c/src/lib/libbsp/shared/bspsmp.c
===================================================================
--- c/src/lib/libbsp/shared/bspsmp.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ c/src/lib/libbsp/shared/bspsmp.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -27,4 +27,8 @@
 }
 
+void _CPU_SMP_Prepare_start_multitasking( void )
+{
+}
+
 void _CPU_SMP_Send_interrupt( uint32_t target_processor_index )
 {
Index: c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c
===================================================================
--- c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ c/src/lib/libbsp/sparc/leon3/startup/bspsmp.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -87,4 +87,9 @@
 }
 
+void _CPU_SMP_Prepare_start_multitasking( void )
+{
+  _CPU_cache_invalidate_entire_instruction();
+}
+
 void _CPU_SMP_Send_interrupt(uint32_t target_processor_index)
 {
@@ -92,10 +97,2 @@
   LEON3_IrqCtrl_Regs->force[target_processor_index] = 1 << LEON3_mp_irq;
 }
-
-void _LEON3_Start_multitasking(
-  Context_Control *heir
-)
-{
-  _CPU_cache_invalidate_entire_instruction();
-  _CPU_Context_Restart_self( heir );
-}
Index: cpukit/score/cpu/arm/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/arm/rtems/score/cpu.h	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/cpu/arm/rtems/score/cpu.h	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -504,4 +504,6 @@
 
   void _CPU_SMP_Finalize_initialization( uint32_t cpu_count );
+
+  void _CPU_SMP_Prepare_start_multitasking( void );
 
   static inline uint32_t _CPU_SMP_Get_current_processor( void )
Index: cpukit/score/cpu/i386/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/i386/rtems/score/cpu.h	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/cpu/i386/rtems/score/cpu.h	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -495,4 +495,6 @@
   void _CPU_SMP_Finalize_initialization( uint32_t cpu_count );
 
+  void _CPU_SMP_Prepare_start_multitasking( void );
+
   uint32_t _CPU_SMP_Get_current_processor( void );
 
Index: cpukit/score/cpu/no_cpu/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/no_cpu/rtems/score/cpu.h	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/cpu/no_cpu/rtems/score/cpu.h	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -1575,4 +1575,16 @@
 
   /**
+   * @brief Prepares a CPU to start multitasking in terms of SMP.
+   *
+   * This function is invoked on all processors requested by the application
+   * during system initialization.
+   *
+   * This function will be called after all processors requested by the
+   * application have been started right before the context switch to the first
+   * thread takes place.
+   */
+  void _CPU_SMP_Prepare_start_multitasking( void );
+
+  /**
    * @brief Returns the index of the current processor.
    *
Index: cpukit/score/cpu/powerpc/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/powerpc/rtems/score/cpu.h	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/cpu/powerpc/rtems/score/cpu.h	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -1124,4 +1124,6 @@
   void _CPU_SMP_Finalize_initialization( uint32_t cpu_count );
 
+  void _CPU_SMP_Prepare_start_multitasking( void );
+
   static inline uint32_t _CPU_SMP_Get_current_processor( void )
   {
Index: cpukit/score/cpu/sparc/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/sparc/rtems/score/cpu.h	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/cpu/sparc/rtems/score/cpu.h	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -1187,4 +1187,6 @@
   void _CPU_SMP_Finalize_initialization( uint32_t cpu_count );
 
+  void _CPU_SMP_Prepare_start_multitasking( void );
+
   #if defined(__leon__) && !defined(RTEMS_PARAVIRT)
     static inline uint32_t _CPU_SMP_Get_current_processor( void )
@@ -1198,10 +1200,4 @@
   void _CPU_SMP_Send_interrupt( uint32_t target_processor_index );
 
-  #if defined(__leon__)
-  void _LEON3_Start_multitasking( Context_Control *heir )
-    RTEMS_COMPILER_NO_RETURN_ATTRIBUTE;
-  #define _CPU_Start_multitasking _LEON3_Start_multitasking
-  #endif
-
   static inline void _CPU_SMP_Processor_event_broadcast( void )
   {
Index: cpukit/score/src/threadstartmultitasking.c
===================================================================
--- cpukit/score/src/threadstartmultitasking.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ cpukit/score/src/threadstartmultitasking.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -63,4 +63,6 @@
 
 #if defined(RTEMS_SMP)
+  _CPU_SMP_Prepare_start_multitasking();
+
   /*
    * The _CPU_Context_Restart_self() implementations usually assume that self
Index: testsuites/smptests/smpfatal08/init.c
===================================================================
--- testsuites/smptests/smpfatal08/init.c	(revision a43a34666e2124c24e86794206aa78d2ad5e910d)
+++ testsuites/smptests/smpfatal08/init.c	(revision c34f94f72df4e88e1c4ea7d7f97f14a9ec6296ef)
@@ -57,4 +57,9 @@
 }
 
+void _CPU_SMP_Prepare_start_multitasking(void)
+{
+  assert(0);
+}
+
 #if defined(RTEMS_PARAVIRT) \
   || (!defined(__leon__) && !defined(__PPC__) && !defined(__arm__))
@@ -62,11 +67,4 @@
 {
   return 0;
-}
-#endif
-
-#if defined(__leon__)
-void _LEON3_Start_multitasking(Context_Control *heir)
-{
-  assert(0);
 }
 #endif
