Fwd: Problem report: Struct aliasing problem causes Thread_Ready_Chain corruption in 4.6.99.3
Joel Sherrill
joel.sherrill at oarcorp.com
Tue Nov 21 16:42:13 UTC 2006
Ralf Corsepius wrote:
> On Tue, 2006-11-21 at 17:16 +0100, Thomas Doerfler wrote:
>
>> 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.
>>
> Right, ... that's why I have been asking Peer and you to prove an
> example really exposing issue.
>
> I am having difficulties in seeing what should be broken with this code.
> But I see suspicious spots in chain.inl.
>
>
I don't think anything is wrong with this code. All I said was that in
the initial
batch of punning warning removals we added intermediate variables to make
gcc a bit happier.
It's VERY VERY likely to be unneeded.
But what _Chain_Head and _Chain_Tail do is probably the culprit.
>> It MAY BE, that this change produces different code, but I don't see,
>> why the code should be more correct.
>>
> ACK.
>
>
For some reason, I don't see able to find one of the examples where gcc
actually
complained that adding an intermediate variable helped. I recall it was
code
that took a pointer of one type, converted it to void *, and then
converted it
to something else. This pattern was usually in BSP or device driver code.
--joel
> Ralf
>
>
>
More information about the users
mailing list