On 5/28/2014 2:24 PM, Gedare Bloom wrote: > On Wed, May 28, 2014 at 2:49 PM, Joel Sherrill > <joel.sherr...@oarcorp.com> wrote: >> On 5/28/2014 10:22 AM, Gedare Bloom wrote: >>> On Wed, May 28, 2014 at 11:05 AM, Joel Sherrill >>> <joel.sherr...@oarcorp.com> wrote: >>>> On 5/28/2014 7:39 AM, Gedare Bloom wrote: >>>>> On Wed, May 28, 2014 at 5:00 AM, Sebastian Huber >>>>> <sebastian.hu...@embedded-brains.de> wrote: >>>>>> On 2014-05-28 00:16, Joel Sherrill wrote: >>>>>>> - rtems/score/threadimpl.h: _Thread_Start_multitasking does return >>>>>>> on Scheduler Simulator. Initializing RTEMS returns to the command >>>>>>> interpreter. >>>>>>> >>>>>>> - rtems/score/smpimpl.h: >>>>>>> _SMP_Start_multitasking_on_secondary_processor() >>>>>>> is not applicable on the Scheduler Simulator and the no return >>>>>>> attribute >>>>>>> gives a warning. >>>>>>> >>>>>>> - rtems/score/assert.h: Scheduler Simulator uses glibc assert.h on >>>>>>> GNU/Linux. >>>>>>> This will likely need to be adjusted more for other host compilers >>>>>>> and >>>>>>> C libraries >>>>>>> >>>>>>> - threadrestart.c: Disable assert on Scheduler Simulator. Restarting >>>>>>> self >>>>>>> returns to the command interpreter. >>>>>> I would define RTEMS_COMPILER_NO_RETURN_ATTRIBUTE and _Assert() to >>>>>> nothing >>>>>> in case RTEMS_SCHEDSIM is defined. Do you really need this debugging >>>>>> stuff >>>>>> for the scheduler simulator? I don't think we should propagate oddities >>>>>> of >>>>>> the scheduler simulator throughout the code base. >>>>>> >>>>> Yes, this was my initial reaction as well. Probably at least you could >>>>> make Assert_Not_reached() a nop, or write a wrapper for assert that >>>>> depends on schedsim. Can schedsim work more like a real target for >>>>> this case of not returning? I guess usually the system ends up in a >>>>> fatal or halt state? Maybe you can interpose on that state to return >>>>> to the command interpreter. >>>> Schedsim does not really context switch so the paths that assume a task >>>> switches >>>> out and never returns are reachable paths. It is logically a single >>>> thread of control >>>> with the underlying RTEMS code thinking that a thread is "executing" on >>>> the various >>>> cores. When a thread blocks, control returns to the script with a new >>>> executing >>>> thread. In an SMP configuration, the scripts can also change CPU focus >>>> and execute >>>> commands in the context of the executing thread on that core. >>>> >>>> I can live with disabling the noreturn checks and turning off that >>>> warning. I think >>>> that will eliminate the first two of the four spots touched above. >>>> >>>> But I don't want to disable the asserts. Right now, we can run with >>>> --enable-rtems-debug >>>> and not get any asserts. The consistency checks are really handy and >>>> they found >>>> bugs in the Affinity Scheduler. So I really do not want to disable >>>> them. So killing >>>> assertions is undesirable. >>>> >>>> I could try to move all of the alternative assert logic under an >>>> RTEMS_SCHEDSIM. >>>> That would make it clearer what it is for and harder to trip. >>>> >>>> For know, making Assert_Not_reached() nothing on Schedsim would be >>>> acceptable >>>> for the _Thread_Restart() assertion. >>>> >>>> I think this would restrict the patch to the rtems assert.h. Is that >>>> acceptable? >>>> >>> Yes, that would be better. >> I can't turn off the no return warning via the command line. That >> touches basedefs.h. >> >> So basedefs.h and assert.h are the reduced set of files touched. >> >> New version attached. > You changed to using #if instead of #if defined. I think you want it > with the ifdef. How about this one? I tried to stay consistent in style with what was already in the file.
But defined(X) or defined( X ) in the rules? > -Gedare -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985
>From 7a64865a4c609e45855e08ef7f308dcc6cc3ce48 Mon Sep 17 00:00:00 2001 From: Joel Sherrill <joel.sherr...@oarcorp.com> Date: Mon, 14 Apr 2014 16:05:04 -0500 Subject: [PATCH 1/4] Minor conditionals to enable building Scheduler Simulator on GNU/Linux - rtems/score/assert.h: Scheduler Simulator uses glibc assert.h on GNU/Linux. This will likely need to be adjusted more for other host compilers and C libraries. Also disable _Assert_Not_reached() because some of these paths do actually return to the called on the Scheduler Simulator. - basedefs.h: Do not use noreturn attribute when on Scheduler Simulator. Paths which context switch can return to the command interpreter on the Scheduler Simulator. --- cpukit/score/include/rtems/score/assert.h | 26 ++++++++++++++++++++++---- cpukit/score/include/rtems/score/basedefs.h | 4 +++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cpukit/score/include/rtems/score/assert.h b/cpukit/score/include/rtems/score/assert.h index 41ef1ae..3d3bf78 100644 --- a/cpukit/score/include/rtems/score/assert.h +++ b/cpukit/score/include/rtems/score/assert.h @@ -30,10 +30,24 @@ extern "C" { * NDEBUG. */ #if defined( RTEMS_DEBUG ) - #define _Assert( _e ) \ - ( ( _e ) ? \ - ( void ) 0 : \ - __assert_func( __FILE__, __LINE__, __ASSERT_FUNC, #_e ) ) + #if !defined( RTEMS_SCHEDSIM ) + /* __ASSERT_FUNC is newlib. */ + #define _Assert( _e ) \ + ( ( _e ) ? \ + ( void ) 0 : \ + __assert_func( __FILE__, __LINE__, __ASSERT_FUNC, #_e ) ) + #else + /* __ASSERT_FUNCTION is glibc. */ + #if defined(__ASSERT_FUNCTION) + #define _Assert( _e ) \ + ( ( _e ) ? \ + ( void ) 0 : \ + __assert_fail( #_e, __FILE__, __LINE__, __ASSERT_FUNCTION ) ) + #else + #error "What does assert.h use?" + #endif + #endif + #else #define _Assert( _e ) ( ( void ) 0 ) #endif @@ -70,7 +84,11 @@ extern "C" { /** * @brief Asserts that this point is not reached during run-time. */ +#if RTEMS_SCHEDSIM +#define _Assert_Not_reached() +#else #define _Assert_Not_reached() _Assert( 0 ) +#endif #ifdef __cplusplus } diff --git a/cpukit/score/include/rtems/score/basedefs.h b/cpukit/score/include/rtems/score/basedefs.h index a0bebdd..382a97a 100644 --- a/cpukit/score/include/rtems/score/basedefs.h +++ b/cpukit/score/include/rtems/score/basedefs.h @@ -153,7 +153,9 @@ * can impact the code generated following calls to * rtems_fatal_error_occurred and _Terminate. */ -#ifdef __GNUC__ +#if defined(RTEMS_SCHEDSIM) + #define RTEMS_COMPILER_NO_RETURN_ATTRIBUTE +#elif defined(__GNUC__) #define RTEMS_COMPILER_NO_RETURN_ATTRIBUTE \ __attribute__ ((noreturn)) #else -- 1.7.1
_______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel