bug in gcc-3.2.3/gcc/gthr_rtems.h
Joel Sherrill
joel.sherrill at OARcorp.com
Wed Apr 21 13:50:00 UTC 2004
Grrr... something still isn't right for me. Details and
questions below.
EL KOLLI Yacine wrote:
> Till Straumann wrote:
>
>> 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
I have these symbols as shown above so it looks like the
toolset was built properly.
I rebuilt completely a toolset and RTEMS for psim so that
shouldn't be a problem.
I am still not getting a break at rtems_gxx_mutex_init
and the test is obviously failing.
My patch to gthr-rtems is:
diff -uNr /usr1/rtems/work-tools/original/gcc-3.2.3/gcc/gthr-rtems.h
gcc-3.2.3/gcc/gthr-rtems.h
--- /usr1/rtems/work-tools/original/gcc-3.2.3/gcc/gthr-rtems.h Wed Jan
29 09:57:53 2003
+++ gcc-3.2.3/gcc/gthr-rtems.h Tue Apr 20 14:17:52 2004
@@ -37,7 +37,6 @@
#define __GTHREADS 1
#define __GTHREAD_ONCE_INIT 0
-#define __GTHREAD_MUTEX_INIT 0
#define __GTHREAD_MUTEX_INIT_FUNCTION rtems_gxx_mutex_init
Yacine, what BSP are you using? Could you confirm things
with psim?
>> -- 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