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