[RTEMS Project] #4753: Encountered "fatal source: 9 (RTEMS_FATAL_SOURCE_EXCEPTION)" when booting up with RTEMS 6 on stm32h7 board

RTEMS trac trac at rtems.org
Thu Nov 10 06:53:38 UTC 2022

#4753: Encountered "fatal source: 9 (RTEMS_FATAL_SOURCE_EXCEPTION)" when booting
up with RTEMS 6 on stm32h7 board
  Reporter:  cal         |      Owner:  (none)
      Type:  defect      |     Status:  new
  Priority:  normal      |  Milestone:
 Component:  arch/arm    |    Version:  6
  Severity:  normal      |   Keywords:  fatal source: 9
                         |  (RTEMS_FATAL_SOURCE_EXCEPTION arm stm32h7
Blocked By:              |   Blocking:

 I have followed the RTEMS Quick Start webpage and have successfully built
 the BSP for stm32h7 (STM32H745I_DISCO board) with the RTEMS source code
 that I git cloned 2 weeks ago. I have successfully compiled a hello world
 application and ran on the board.

 This week, however, I repeated the steps to build the bsp but with the
 latest RTEMS git cloned. After successfully building the BSP and compiled
 the hello world application, I encountered an exception as shown below.

 *** FATAL ***

 R0   = 0x00000000 R8  = 0x00000000
 R1   = 0x00000002 R9  = 0x00000000
 R2   = 0x0000001c R10 = 0x00000000
 R3   = 0x240063a8 R11 = 0x00000000
 R4   = 0x00000001 R12 = 0xffffffff
 R5   = 0x00000000 SP  = 0x24006398
 R6   = 0x00000000 LR  = 0x0800d503
 R7   = 0x00000000 PC  = 0x0800d512
 XPSR = 0x210b0000 VEC = 0x00000004
 RTEMS version: 6.0.0.df814344215b6ec29d46238be47e3bbd2a2e22e4
 RTEMS tools: 12.2.1 20221104 (RTEMS 6, RSB
 f690701431fc88d0d79a56c41bc6a11d4641e60b, Newlib a8526cb)
 executing thread ID: 0x0a010001
 executing thð

 I did a comparison between the previous RTEMS code with the latest
 I replaced some of the codes in the latest code with the older codes.
 Below are the minimum changes that I did to make the board work.

 1) \cpukit\include\rtems\score\tls.h
 Added the lines of codes in the file:

 static inline uintptr_t _TLS_Align_up( uintptr_t val )
   uintptr_t alignment = CPU_STACK_ALIGNMENT;

   return RTEMS_ALIGN_UP( val, alignment );
 static inline void *_TLS_TCB_at_area_begin_initialize( void *tls_area )
   void *tls_block = (char *) tls_area
     + _TLS_Get_thread_control_block_area_size();
   TLS_Thread_control_block *tcb = (TLS_Thread_control_block *) tls_area;
   uintptr_t aligned_size = _TLS_Align_up( (uintptr_t) _TLS_Size );
   TLS_Dynamic_thread_vector *dtv = (TLS_Dynamic_thread_vector *)
     ((char *) tls_block + aligned_size);

    _TLS_Initialize_TCB_and_DTV( tls_block, tcb, dtv );
     _TLS_Copy_and_clear( tls_block );
     return tls_block;

 2) \cpukit\score\cpu\arm\armv7m-context-initialize.c
 Replaces the last line in the code:

 void _CPU_Context_Initialize(
   Context_Control *context,
   void *stack_area_begin,
   size_t stack_area_size,
   uint32_t new_level,
   void (*entry_point)( void ),
   bool is_fp,
   void *tls_area
   char *stack_area_end = (char *) stack_area_begin + stack_area_size;

   memset(context, 0, sizeof(*context));

   context->register_lr = entry_point;
   context->register_sp = stack_area_end;

   if ( tls_area != NULL ) {
     //_TLS_Initialize_area( tls_area );
     //replace the line with:
    ** _TLS_TCB_at_area_begin_initialize( tls_area );**

 3) \cpukit\score\cpu\arm\__aeabi_read_tp.c
 replace the codes:

 void __attribute__((naked)) __aeabi_read_tp(void)
   __asm__ volatile (
     "ldr r0, =_Per_CPU_Information\n"
     "ldr r0, [r0, %[executingoff]]\n"
 #if defined(__thumb__) && !defined(__thumb2__)
     "add r0, %[tlsareaoff]\n"
     "ldr r0, [r0]\n"
     "ldr r0, [r0, %[tlsareaoff]]\n"
     "bx lr\n"
     : [executingoff] "I" (offsetof(Per_CPU_Control, executing)),
       [tlsareaoff] "I" (offsetof(Thread_Control, Start.tls_area))

 May I know if I might have configured the bsp wrongly during the build, or
 it is an actual bug that is introduced in the new code release?


Ticket URL: <http://devel.rtems.org/ticket/4753>
RTEMS Project <http://www.rtems.org/>
RTEMS Project

More information about the bugs mailing list