bug in gcc-3.2.3/gcc/gthr_rtems.h

EL KOLLI Yacine yacine.elkolli at crf.canon.fr
Wed Apr 21 08:12:24 UTC 2004


Till Straumann wrote:
> Joel Sherrill wrote:
> 
>> Till Straumann wrote:
>>
>>> I think Yacine is right. Looking at gcc-3.2.2 is affected, too.
>>>
>>> Joel apparently added a macro definition on 2003-05-21 (gcc PR 9296)
>>> - however, the reasons for this change are not apparent.
>>>
>>> Joel, can you remember why you thought you had to define
>>> __GTHREAD_MUTEX_INIT ?
>>
>>
>>
>> I will double check myhself tomorrow but this does NOT
>> appear to fix the problem for me.  Maybe it is a build/install/test
>> confusion so I will double check.  Has one of you successfuly
>> made this work with that mod? 
> 
> 
> 
> Well - it seemed to me that Yacine did. I didn't do a runtime check but
> my good friend 'nm' tells me:

Yes I confirm that I've done a run time check, and that solved the problem.
I've removed the __GTHREAD_MUTEX_INIT define, then I've re-built gcc, 
then re-built rtems and then re-built my c++ application.

> without mod:
> 
> [tillpc]> nm -Au libstdc++.a | grep rtems_gxx_mutex_init
> libstdc++.a:eh_alloc.o:rtems_gxx_mutex_init
> 
> with mod (i.e., __GTHREAD_MUTEX_INIT *not* defined):
> [tillpc]> nm -Au libstdc++.a | grep rtems_gxx_mutex_init
> libstdc++.a:globals.o:rtems_gxx_mutex_init
> libstdc++.a:eh_alloc.o:rtems_gxx_mutex_init
> 
> 
> 
> -- Till
> 
>>
>>
>>> Thanks
>>>
>>> -- Till
>>>
>>> The Changelog
>>>
>>> EL KOLLI Yacine wrote:
>>>
>>>> Hello,
>>>>
>>>> I think there is a bug in gthr_rtems.h in the gcc-3.2.3 source tree 
>>>> under gcc-3.2.3/gcc/gthr_rtems.h.
>>>>
>>>> In this file   __GTHREAD_MUTEX_INIT is define to 0 and 
>>>> __GTHREAD_MUTEX_INIT_FUNCTION   is defined to rtems_gxx_mutex_init.
>>>>
>>>> But a comment in gthr.h states:
>>>>      __GTHREAD_MUTEX_INIT
>>>>          to initialize __gthread_mutex_t to get a fast
>>>>     non-recursive mutex.
>>>>      __GTHREAD_MUTEX_INIT_FUNCTION
>>>>          some systems can't initialize a mutex without a
>>>>     function call.  On such systems, define this to a
>>>>     function which looks like this:
>>>>     void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *)
>>>>     Don't define __GTHREAD_MUTEX_INIT in this case
>>>>
>>>> The result of having defined __GTHREAD_MUTEX_INIT is that the STL 
>>>> global constructor does not call rtems_gxx_mutex_init to init its 
>>>> mutex, but rather use the statically defined value 0.
>>>> All locking performed by the STL lib on this mutex fail with return 
>>>> value OBJECT_ERROR, which seems not be tested.
>>>>
>>>> I've recompiled gcc with __THREAD_MUTEX_INIT left undefined. Now STL 
>>>> constructor is calling rtems_gxx_mutex_init , and nothing seems broken.
>>>>
>>>> Any comments ?
>>>>
>>>> Y El Kolli.
>>>>
>>>
>>>
>>
>>
> 
> 
> 
> 


-- 
=====================================================
EL KOLLI Yacine         | yacine.elkolli at crf.canon.fr
Canon C.R.F.            | Phone: +33.(0)2.99.87.68.79
http://www.crf.canon.fr | FAX: +33.(0)2.99.84.11.30
====================================================



More information about the users mailing list