Problem report: Struct aliasing problem causes Thread_Ready_Chain corruption in 4.6.99.3

Ralf Corsepius ralf.corsepius at rtems.org
Thu Dec 7 16:39:59 UTC 2006


On Thu, 2006-12-07 at 10:11 -0600, Joel Sherrill wrote:
> >   
> >>  What piece of work 
> >> can i do, as a user with limited knowledge of kernel functonality?
> >>     
> > Good question.
> >
> > ATM, from my point of view, people being familiar with certain flavors
> > of asm who could identify aliasing showing effects on RTEMS code would
> > be helpful. I have been trying to identify files being affected by
> > strict-aliasing and meanwhile have a list consisting of ca. 20000 object
> > (Note: *.o not *.c!) files (out of ca. 70000) from RTEMS-4.8, which are
> > affected by aliasing.
> >
> > Now, identifying those which really are broken by aliasing would be
> > necessary. So far, apart of Peer's/Thomas's case [1], I haven't found
> > any :)
> >   
> 
> I haven't seen your script but know a bit of your procedure so am going 
> to propose
> something.  I know you are diffing .s files but any differences as a 1st 
> order check.
Yes. I am compiling all BSPs with "default CFLAGS" and with
"-fno-strict-aliasing" added, all BSP's CFLAGS changed to -O2 (-g
removed) and am comparing the disassembly.

> Is it possible to could load and store instructions in the two generated 
> .s files and see
> if the count differed?
Probably doable, but I haven't tried to do so.

> for all files and multilib variants and (eventually) all BSPs
>   (a) compile with and without strict aliasing
>   (b) objdump .o and diff generated .s files
>   if diff shows no changes
>      OK.. strict aliasing did not change output, go on to the next file
>   else
>      count load and store instructions in both .s files
>     if counts are same
>        the file is 
> OK                                                               # is 
> this true?

Except of "counting" and not yet having tried multilibs, that's
essentially what I am doing (One iteration takes approximately one
day!).

>     else
>        definitely a HIGH candidate for breakage check by hand
> 
> I think the role of the user community is to help review the candidates 
> Ralf's automated
> procedure identifies and suggest ways to lower the number of false 
> positives.  We can't
> realistically check 20K files every time gcc bumps a version.

Let me put it this way: Spraying "const's" to (esp. pointer) arguments
of inline functions, so far had been a fairly effective way to eliminate
a fair number (In the range of 1000) of "candidates" ;)

"const'ing arguments" of inline functions, definitely is only affecting
"aliasing" as a "random side-effect" (due to const's having an impact on
optimization), but this is what had eliminated the Peer/Thomas case.

> If no different in .s OR ld/st counts are sufficient to say strict 
> aliasing had no bad impact,
> then it is much easier to check the code automatically.
> 
> A similar technique could also be used to verify that soft-float/integer 
> only executables have no FPU instructions.

Ralf





More information about the users mailing list