forked from Imagelibrary/rtems
score: Add _Thread_Dispatch_direct_no_return()
The __builtin_unreachable() cannot be used with current GCC versions to tell the compiler that a function does not return to the caller, see: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99151 Add a no return variant of _Thread_Dispatch_direct() to avoid generation of dead code.
This commit is contained in:
@@ -125,6 +125,17 @@ void _Thread_Dispatch( void );
|
||||
*/
|
||||
void _Thread_Dispatch_direct( Per_CPU_Control *cpu_self );
|
||||
|
||||
/**
|
||||
* @brief Directly do a thread dispatch and do not return.
|
||||
*
|
||||
* @param cpu_self is the current processor.
|
||||
*
|
||||
* @see _Thread_Dispatch_direct().
|
||||
*/
|
||||
RTEMS_NO_RETURN void _Thread_Dispatch_direct_no_return(
|
||||
Per_CPU_Control *cpu_self
|
||||
);
|
||||
|
||||
/**
|
||||
* @brief Performs a thread dispatch on the current processor.
|
||||
*
|
||||
|
||||
@@ -35,6 +35,6 @@ void pthread_exit( void *value_ptr )
|
||||
|
||||
_Thread_Exit( executing, THREAD_LIFE_TERMINATING, value_ptr );
|
||||
|
||||
_Thread_Dispatch_direct( cpu_self );
|
||||
_Thread_Dispatch_direct_no_return( cpu_self );
|
||||
RTEMS_UNREACHABLE();
|
||||
}
|
||||
|
||||
@@ -42,6 +42,6 @@ void rtems_task_exit( void )
|
||||
NULL
|
||||
);
|
||||
|
||||
_Thread_Dispatch_direct( cpu_self );
|
||||
_Thread_Dispatch_direct_no_return( cpu_self );
|
||||
RTEMS_UNREACHABLE();
|
||||
}
|
||||
|
||||
@@ -358,6 +358,9 @@ void _Thread_Dispatch_direct( Per_CPU_Control *cpu_self )
|
||||
_Thread_Do_dispatch( cpu_self, level );
|
||||
}
|
||||
|
||||
RTEMS_ALIAS( _Thread_Dispatch_direct ) void
|
||||
_Thread_Dispatch_direct_no_return( Per_CPU_Control * );
|
||||
|
||||
void _Thread_Dispatch_enable( Per_CPU_Control *cpu_self )
|
||||
{
|
||||
uint32_t disable_level = cpu_self->thread_dispatch_disable_level;
|
||||
|
||||
@@ -288,7 +288,7 @@ void _Thread_Life_action_handler(
|
||||
if ( _Thread_Is_life_terminating( previous_life_state ) ) {
|
||||
cpu_self = _Thread_Wait_for_join( executing, cpu_self );
|
||||
_Thread_Make_zombie( executing );
|
||||
_Thread_Dispatch_direct( cpu_self );
|
||||
_Thread_Dispatch_direct_no_return( cpu_self );
|
||||
RTEMS_UNREACHABLE();
|
||||
}
|
||||
|
||||
@@ -610,7 +610,7 @@ void _Thread_Restart_self(
|
||||
_Thread_Wait_release_default( executing, lock_context );
|
||||
|
||||
_Thread_Priority_update( &queue_context );
|
||||
_Thread_Dispatch_direct( cpu_self );
|
||||
_Thread_Dispatch_direct_no_return( cpu_self );
|
||||
RTEMS_UNREACHABLE();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user