Serious Bug All Targets -- Please Read

Till Straumann strauman at
Mon Mar 2 19:29:44 UTC 2009

Hmm - AFAIK, c99 doesn't specify the exact representation
of 'bool' / '_Bool'. It only says that

"An object declared as type _Bool is large enough to store the values 0 
and 1"

Hence, there is no really safe way to access such
an object from assembly code.

I wonder if it wouldn't be better to change the
type of _Context_Switch_necessary & friends
to a type of known width. If we sacrifice 6 bytes
we could simply use e.g., 'int32_t' and live
with the existing assembly code.

We'd have to be careful about constructs like

_Context_Switch_necessary == true

(since nonzero is not necessarily == 'true' ) and use e.g.,

_Context_Switch_necessary != 0


-- Till

Joel Sherrill wrote:
> Hi,
> There is a serious bug in all RTEMS 4.9 and newer
> versions including CVS.  It does not impact 4.8 and
> older. 
> With RTEMS 4.9 , we converted from using an internal
> RTEMS boolean type to the C99 standard bool.  This
> changed the size of the variables from four bytes to
> one byte. 
> The CPU dependent code references two boolean variables
> related to scheduling: _Context_Switch_necessary and
> _ISR_Signals_to_thread_executing.  Anywhere these
> are referenced in ASSEMBLY LANGUAGE is most likely
> broken.
> I desperately need help in reviewing and correcting
> my first (uncompiled) attempt at fixing it.  I went
> through the impacted assembly code and mechanically
> tried to convert long/word operations into byte ones.
> I may or may not have gotten it right on any target.
> The first patch version is at:
> Please help!!! I want to cut a 4.9.2 ASAP!!!

More information about the users mailing list