bug in gcc-3.2.3/gcc/gthr_rtems.h

Till Straumann strauman at slac.stanford.edu
Wed Apr 21 05:55:21 UTC 2004


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:

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.
>>>
>>
>>
>
>







More information about the users mailing list