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

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Fri Aug 29 15:19:17 UTC 2014


On 29 August 2014 05:21, Yang Yingliang <yangyingliang at huawei.com> wrote:
> 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.

yea, but the other parts of libpthread.{so,a} suffer from the same
problem, don't they?
I.e. We should rather do something like:

diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in
index 0008822..228afe0 100644
--- a/libpthread/nptl/Makefile.in
+++ b/libpthread/nptl/Makefile.in
@@ -41,6 +41,8 @@ libpthread-a-y := $(libpthread-static-y:.o=.os)
 else
 libpthread-a-y := $(libpthread-static-y)
 endif
+$(libpthread-so-y) $(libpthread-nonshared-y) $(libpthread-static-y)
$(libpthread-a-y) : \
+ CFLAGS += -DNOT_IN_libc -DIS_IN_libpthread

 libc-shared-routines-y := $(filter-out $(notdir
$(libpthread_libc_OBJS:.o=.c)), $(libc-shared-routines-y))
 libc-static-routines-y := $(filter-out $(notdir
$(libpthread_libc_OBJS:.o=.c)), $(libc-static-routines-y))
@@ -62,6 +64,8 @@ else
 librt-a-y += $(librt_OBJS)
 endif
 librt-so-y += $(librt_OBJS:.o=.oS) $(librt-pt-shared-only-routines-y:.o=.oS)
+$(librt_OBJS) $(librt_OBJS:.o=.os): CFLAGS += -DNOT_IN_libc -DIS_IN_librt
+

 ifeq ($(UCLIBC_CTOR_DTOR),y)
 START_FILE-libpthread.so :=
$(top_builddir)libpthread/nptl/sysdeps/pthread/pt-crti.o


(and check LT and LT.old if they need the same; and remove the now
redundant spots-on).

What do you think?

TIA,
>
> Signed-off-by: Yang Yingliang <yangyingliang at huawei.com>
> ---
>  libpthread/nptl/Makefile.in | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libpthread/nptl/Makefile.in b/libpthread/nptl/Makefile.in
> index 0008822..1b9ba8c 100644
> --- a/libpthread/nptl/Makefile.in
> +++ b/libpthread/nptl/Makefile.in
> @@ -186,7 +186,7 @@ CFLAGS-forward.c = -fexceptions
>  CFLAGS-pthread_testcancel.c = -fexceptions
>  CFLAGS-pthread_join.c = -fexceptions -fasynchronous-unwind-tables
>  CFLAGS-pthread_timedjoin.c = -fexceptions -fasynchronous-unwind-tables
> -CFLAGS-pthread_once.c = $(uses-callbacks) -fexceptions \
> +CFLAGS-pthread_once.c += $(uses-callbacks) -fexceptions \
>                         -fasynchronous-unwind-tables
>  CFLAGS-pthread_cond_wait.c = -fexceptions -fasynchronous-unwind-tables
>  CFLAGS-pthread_cond_timedwait.c = -fexceptions -fasynchronous-unwind-tables
> --
> 1.8.0
>
>
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc


More information about the uClibc mailing list