------- Comment #24 from joel at gcc dot gnu dot org 2008-04-01 18:02 ------- With Laurent's test program, I have traces of good (powerpc/psim) and bad (qemu) runs. The traced include only entry and exit status info for the following calls are:
_CPU_Context_switch pthread_cond_broadcast pthread_cond_destroy pthread_cond_init pthread_cond_signal pthread_cond_timedwait pthread_cond_wait pthread_create pthread_exit pthread_getschedparam pthread_mutex_destroy pthread_mutex_init pthread_mutex_lock pthread_mutex_timedlock pthread_mutex_unlock pthread_setschedparam rtems_stack_checker_is_blown rtems_task_create There are two anomalies in the i386 run: The first call to pthread_setschedparam() returns EINVAL because it is passed a sched_param with priority == 0. This field is 122 on the valid psim run. Backtrace indicates we are still in initialization. I do not know how to tell where the 0 came from before here. #2 0x0010153f in system.task_primitives.operations.set_priority (t=0x1dbb38, prio=0, loss_of_inheritance=0) at s-taprop.adb:764 #3 0x0010451d in system.tasking.initialize () at s-taskin.adb:188 #4 0x00103fc8 in system.tasking.initialization.init_rts () at s-tasini.adb:322 #5 0x0010032b in adainit () Later there is a pthread_mutex_unlock() call which passes in a bad mutex id. This does not occur on the psim run. The bad pthread_setschedparam call is not THAT far into the execution and the traced calls up until this point are the same. ENTER pthread_create EXIT pthread_create (0) ENTER _CPU_Context_switch ENTER pthread_create EXIT pthread_create (0) ENTER pthread_exit ENTER _CPU_Context_switch ENTER pthread_mutex_init EXIT pthread_mutex_init (0) ENTER pthread_cond_init EXIT pthread_cond_init (0) ENTER pthread_mutex_init EXIT pthread_mutex_init (0) ENTER pthread_mutex_lock EXIT pthread_mutex_lock (0) ENTER pthread_mutex_unlock EXIT pthread_mutex_unlock (0) ENTER pthread_setschedparam -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35284