[PATCH v2] libpthread: modify CFLAGS-pthread_once.c to avoid earlier setting being replaced

Yang Yingliang yangyingliang at huawei.com
Fri Sep 5 03:15:38 UTC 2014


On 2014/9/5 0:13, Bernhard Reutner-Fischer wrote:
> On 3 September 2014 08:55, Yang Yingliang <yangyingliang at huawei.com> wrote:
>> From: Yang Yingliang <yangyingliang at huawei.com>
>>
>> I use uclibc in arch arm. The CFLAGS-pthread_once.c has been set
>> to -DNOT_IN_libc -DIS_IN_libpthread in
>> libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch.
>> But it will be replaced by -fexceptions -fasynchronous-unwind-tables in
>> libpthread/nptl/Makefile.in.
>>
>> If CFLAGS-pthread_once.c has no -DIS_IN_libpthread the testcase
>> tst-once3 in test/nptl/ will be failed. The reason is pthread_once
>> calls another pthread_cleanup_push() which is not under IS_IN_libpthread
>> so that clear_once_control do not be called when the thread is canceled.
>> So pthread_once will hang up when it's called second time.
>>
>> Other parts don't have this problem, because IS_IN_libpthread is defined by
>> CFLAGS-nptl = -DNOT_IN_libc -DIS_IN_libpthread $(SSP_ALL_CFLAGS),
>> CFLAGS-pthread = $(SSP_ALL_CFLAGS) -DNOT_IN_libc -DIS_IN_libpthread,
>> CFLAGS-dir_linuxthreads := -DNOT_IN_libc -DIS_IN_libpthread and
>> CFLAGS-dir_linuxthreads.old := -DNOT_IN_libc -DIS_IN_libpthread.
> 
> These are defined but it seems to me they are not effective, no?
> Please try the attached instead. The hunks in nptl/... should be moved to
> Makerules, near objs: though, so it affects LT and LT.old, too.
> 
> Comments?
> Thanks,

I tried the attachment. The IS_IN_libpthread and NOT_IN_libc are defined twice
when it's compiling the source files in nptl.
One is defined by $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS)),
the other is defined by $(filter-out $(CFLAGS-OMIT-$(notdir $<)),$(CFLAGS-$(notdir $(<D)))).
Here $(CFLAGS-$(notdir $(<D))) is CFLAGS-nptl or CFLAGS-pthread.
They are defined twice in LT and LT.old, too.

Regards,
Yang




More information about the uClibc mailing list