[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Serious Bug All Targets -- Please Read
- Date: Mon, 02 Mar 2009 11:29:44 -0800
- From: strauman at slac.stanford.edu (Till Straumann)
- Subject: Serious Bug All Targets -- Please Read
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
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
Joel Sherrill wrote:
> There is a serious bug in all RTEMS 4.9 and newer
> versions including CVS. It does not impact 4.8 and
> 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
> 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!!!