From 1eb6cdde60d702cb7a05927842a1752c133d9927 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 30 Apr 2021 16:58:50 +0200 Subject: 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. --- cpukit/score/src/threaddispatch.c | 3 +++ cpukit/score/src/threadrestart.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'cpukit/score') diff --git a/cpukit/score/src/threaddispatch.c b/cpukit/score/src/threaddispatch.c index 2fd125dd76..fd3f4eda4d 100644 --- a/cpukit/score/src/threaddispatch.c +++ b/cpukit/score/src/threaddispatch.c @@ -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; diff --git a/cpukit/score/src/threadrestart.c b/cpukit/score/src/threadrestart.c index 3c0190164e..364d67d04e 100644 --- a/cpukit/score/src/threadrestart.c +++ b/cpukit/score/src/threadrestart.c @@ -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(); } -- cgit v1.2.3