bug in gcc-3.2.3/gcc/gthr_rtems.h
Joel Sherrill
joel.sherrill at OARcorp.com
Wed Apr 21 14:44:00 UTC 2004
EL KOLLI Yacine wrote:
> Comment interleaved, hope it helps..
I think we are getting there. We might be fixing two things. :(
>> EL KOLLI Yacine wrote:
>>
>> 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.
>
>
> Are you sure that your c++ test is using STL ?
Hmmm.. that may be a hint. I added your list
code before the cout. Now rtems_gxx_mutex_init
is being called but the test fails on the cout.
Can you run the cdtest when
RTEMS_TEST_IO_STREAM is defined in main.cc?
> If no STL constructor is called then gxx_muext_init will not.
> With my test software I was getting gxx_mutex_init called once without
> the patch, and called 3 times with the patch.
>
> try adding the following lines to the cdtest sample:
>
> #include <list>
> .
> .
> .
> cdtest(void){
> .
> std::list<int> int_list;
> for (int i=0;i<10;i++) int_list.push_front(i);
>
>> 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
>
>
> I have the same patch
>
>>
>> Yacine, what BSP are you using? Could you confirm things
>> with psim?
>
>
> I'am using gen405 bsp.
>
> I've never played with psim, I'll give it a try, but this may take some
> time
>
>>>> -- 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