Fwd: Problem report: Struct aliasing problem causes Thread_Ready_Chain corruption in 4.6.99.3

Thomas Doerfler Thomas.Doerfler at embedded-brains.de
Tue Nov 21 16:16:15 UTC 2006


Ralf,

Ralf Corsepius schrieb:
> On Tue, 2006-11-21 at 16:38 +0100, Thomas Doerfler wrote:
> 
>> Therefore your patch in malloc.c is IMHO identical to the previous
>> explicit cast.
> Please prove Joel's patch to be broken.

maybe it is my limited horizon, but I don't see the difference applied
by the following patch:

   if (_System_state_Is_up(_System_state_Get())) {
     if ((_Thread_Dispatch_disable_level > 0) || (_ISR_Nest_level > 0)) {
-      Chain_Append(&RTEMS_Malloc_GC_list, (Chain_Node *)ptr);
+      Chain_Node *node = (Chain_Node *)ptr;
+      Chain_Append(&RTEMS_Malloc_GC_list, node);
       return;

The intermediate local variable "node" can easily be optimized by the
compiler. For the compiler, it should be obvious, that "node" is a
direct alias for "(Chain_Node *)ptr". So I don't see ANY reason, what
this additional variable would change in the compiler's behavior.

It MAY BE, that this change produces different code, but I don't see,
why the code should be more correct.

wkr,
Thomas.

> 
> Ralf
> 
> 


-- 
--------------------------------------------
embedded brains GmbH
Thomas Doerfler           Obere Lagerstr. 30
D-82178 Puchheim          Germany
Tel. : +49-89-18 90 80 79-2
Fax  : +49-89-18 90 80 79-9
email: Thomas.Doerfler at embedded-brains.de
PGP public key available on request



More information about the users mailing list