diff mbox

[uclibc-ng-devel] uClibc-ng - small C library for embedded systems branch master updated. v1.0.18-11-ga3e5bfd

Message ID 20161013191840.725F1101A7@helium.openadk.org
State Not Applicable
Headers show

Commit Message

wbx Oct. 13, 2016, 7:18 p.m. UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "uClibc-ng - small C library for embedded systems".

The branch, master has been updated
       via  a3e5bfd20712f71790ea9bae9e9be250f07e8c21 (commit)
       via  48442540e4c481474c4493192cbd9cb58c5016ad (commit)
       via  d388c3e67f78b414a24550a61b1bab49d7c01883 (commit)
      from  24ca498fc322936281b0c69c271dd64979c313eb (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit a3e5bfd20712f71790ea9bae9e9be250f07e8c21
Author: Waldemar Brodkorb <wbx@uclibc-ng.org>
Date:   Sun Oct 9 10:08:08 2016 +0200

    cleanup and fix static linking issues
    
    There was a deadlock hanging in a sycall to futex,
    which should be solved now.
    
    Signed-off-by: Waldemar Brodkorb <wbx@uclibc-ng.org>

commit 48442540e4c481474c4493192cbd9cb58c5016ad
Author: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Date:   Fri Oct 7 14:11:17 2016 -0700

    ARC: nptl: cancellable wrappers were broken #2
    
    Despite the prev fix, tst-mqueue3 was still segfaulting.
    The issue was BLINK register not restored properly for return
    
    00002690 <mq_timedsend>:
        2690:	sub	r9,r25,0x448
        2698:	ld	r10,[r9]
        269c:	cmp	r10,0
        26a0:	beq	-36
        26a4:	st.aw	blink,[sp,-4]
        26a8:	st.aw	r0,[sp,-4]
        26ac:	st.aw	r1,[sp,-4]
        26b0:	st.aw	r2,[sp,-4]
        26b4:	st.aw	r3,[sp,-4]
        26b8:	st.aw	r4,[sp,-4]
        26bc:	bl	1e28 <__librt_enable_asynccancel>
        26c0:	mov	r9,r0
        26c4:	ld.ab	r4,[sp,4]
        26c8:	ld.ab	r3,[sp,4]
        26cc:	ld.ab	r2,[sp,4]
        26d0:	ld.ab	r1,[sp,4]
        26d4:	ld.ab	r0,[sp,4]
        26d8:	ld.ab	blink,[sp, 4]   <---- function return BLINK
        26dc:	mov	r8,182
        26e0:	trap_s	0
        26e2:	cmp	r0,-1024
        26e6:	st.aw	r0,[sp,-4]
        26ea:	mov	r0,r9
        26ee:	bl	1e90 <__librt_disable_asynccancel> <-- BLINK clobbered
                                                                    to next PC
    
        26f2:	ld.ab	r0,[sp,4]  <----|   loops here until sp is out of bound
        26fa:	cmp	r0,-1024        |
        26fe:	jls	[blink]	   -----|
        2702:	b	15d8
        2706:	nop_s
    
    So the fix was to retain BLINK on stack before function call, and pop it
    later
    
    -   26d8:	ld.ab	blink,[sp, 4]
    +   26d8:	ld	blink,[sp]      <--- restore BLINK, but retain on stack
        26dc:	mov	r8,182
        26e0:	trap_s	0
        26e2:	cmp	r0,-1024
        26e6:	st.aw	r0,[sp,-4]
        26ea:	mov	r0,r9
        26ee:	bl	1e90 <__librt_disable_asynccancel>
        26f2:	ld.ab	r0,[sp,4]
    +   26f6:	ld.ab	blink,[sp,4]    <--- finally pop BLINK
        26fa:	cmp	r0,-1024
        26fe:	jls	[blink]
    
    Reported-by: Eugeniy Paltsev <paltsev@synopsys.com>
    Cc: Alexey Brodkin <abrodkin@synopsys.com>
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

commit d388c3e67f78b414a24550a61b1bab49d7c01883
Author: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Date:   Fri Oct 7 14:11:16 2016 -0700

    ARC: nptl: cancellable wrappers were broken
    
    This was reported as uClibc test suite failures of tst-mqueue3 and
    tst-mqueue5.
    
    The syscall args were getting clobbered, so use scratch regs which are
    not used for syscall args
    
    00002690 <mq_timedsend>:
    
        ; SINGLE_THREAD_P
    
        2690:	sub	r1,r25,0x448   <--- clobers r1, r2
        2698:	ld	r2,[r1]
        269c:	cmp	r2,0
    
        26a0:	bz	mq_timedsend_nocancel
    
        ; DOCARGS (saves syscall args but r1, r2 clobbered already)
    
        26a4:	st.aw	blink,[sp,-4]
        26a8:	st.aw	r0,[sp,-4]
        26ac:	st.aw	r1,[sp,-4]
        26b0:	st.aw	r2,[sp,-4]
        26b4:	st.aw	r3,[sp,-4]
        26b8:	st.aw	r4,[sp,-4]
        26bc:	bl	1e28 <__librt_enable_asynccancel>
    
    Reported-by: Eugeniy Paltsev <paltsev@synopsys.com>
    Cc: Alexey Brodkin <abrodkin@synopsys.com>
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>

-----------------------------------------------------------------------

Summary of changes:
 libpthread/nptl/sysdeps/pthread/Makefile.in        |  1 -
 libpthread/nptl/sysdeps/pthread/pt-longjmp.c       | 30 ----------------------
 .../sysdeps/unix/sysv/linux/Makefile.commonarch    |  2 +-
 .../sysdeps/unix/sysv/linux/arc/sysdep-cancel.h    | 11 +++++---
 .../nptl/sysdeps/unix/sysv/linux/jmp-unwind.c      |  1 +
 .../sysdeps/unix/sysv/linux/libc-lowlevellock.c    | 20 ---------------
 .../nptl/sysdeps/unix/sysv/linux/lowlevellock.c    |  3 ---
 7 files changed, 9 insertions(+), 59 deletions(-)
 delete mode 100644 libpthread/nptl/sysdeps/pthread/pt-longjmp.c
 delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c



hooks/post-receive
diff mbox

Patch

diff --git a/libpthread/nptl/sysdeps/pthread/Makefile.in b/libpthread/nptl/sysdeps/pthread/Makefile.in
index a501b64..6c09e7b 100644
--- a/libpthread/nptl/sysdeps/pthread/Makefile.in
+++ b/libpthread/nptl/sysdeps/pthread/Makefile.in
@@ -32,7 +32,6 @@  libpthread_pthread_CSRC = \
 	pthread_spin_destroy.c \
 	pthread_spin_init.c \
 	pthread_spin_unlock.c \
-	pt-longjmp.c \
 	pt-sigaction.c \
 	tpp.c
 
diff --git a/libpthread/nptl/sysdeps/pthread/pt-longjmp.c b/libpthread/nptl/sysdeps/pthread/pt-longjmp.c
deleted file mode 100644
index 9fcea04..0000000
--- a/libpthread/nptl/sysdeps/pthread/pt-longjmp.c
+++ /dev/null
@@ -1,30 +0,0 @@ 
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <setjmp.h>
-#include <stdlib.h>
-#include "pthreadP.h"
-
-extern __typeof(longjmp) __libc_longjmp attribute_noreturn;
-
-void
-longjmp (jmp_buf env, int val)
-{
-  __libc_longjmp (env, val);
-}
-weak_alias (longjmp, siglongjmp)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
index 649d188..a438e97 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/Makefile.commonarch
@@ -69,7 +69,7 @@  libpthread_linux_SSRC := #ptw-close.S ptw-open.S ptw-waitid.S ptw-waidpid.S ptw-
 
 libc_linux_CSRC += libc_pthread_init.c libc_multiple_threads.c		\
 	register-atfork.c unregister-atfork.c getpid.c		\
-	raise.c jmp-unwind.c libc-lowlevellock.c
+	raise.c jmp-unwind.c
 
 librt_linux_CSRC += mq_notify.c timer_create.c timer_delete.c		\
 	timer_getoverr.c timer_gettime.c timer_routines.c		\
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/sysdep-cancel.h b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/sysdep-cancel.h
index cddd754..01fd844 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/sysdep-cancel.h
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/sysdep-cancel.h
@@ -38,6 +38,7 @@ 
       mov   r0, r9     /* prep mask for disable_asynccancel */  `	\
       CDISABLE	`	\
       pop  r0           /* get syscall ret value back */  ` \
+      pop  blink	/* UNDOCARGS above left blink on stack */ `	\
       cmp  r0, -1024	`	\
       jls  [blink]					`	\
       b  __syscall_error@plt				`	\
@@ -75,7 +76,9 @@ 
 .endm
 
 #define DOCARGS_0	push blink
-#define UNDOCARGS_0	pop  blink
+
+/* don't pop blink at this point */
+#define UNDOCARGS_0	ld   blink, [sp]
 
 #define DOCARGS_1	DOCARGS_0`	push r0
 #define UNDOCARGS_1			pop  r0`	UNDOCARGS_0
@@ -99,9 +102,9 @@ 
 #define UNDOCARGS_7			pop  r6`	UNDOCARGS_6
 
 #  define SINGLE_THREAD_P 			\
-    THREAD_SELF r1   `				\
-    ld	   r2, [r1, MULTIPLE_THREADS_OFFSET]`	\
-    cmp    r2, 0
+    THREAD_SELF r9   `				\
+    ld	   r10, [r9, MULTIPLE_THREADS_OFFSET]`	\
+    cmp    r10, 0
 
 /*    ld	   r2, [r1, -TLS_PRE_TCB_SIZE + MULTIPLE_THREADS_OFFSET] */
 #else	/* !__ASSEMBLER__ */
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c b/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c
index 6013ab0..965327c 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/jmp-unwind.c
@@ -27,6 +27,7 @@  extern void __pthread_cleanup_upto (__jmp_buf env, char *targetframe);
 void
 _longjmp_unwind (jmp_buf env, int val)
 {
+  if (__pthread_cleanup_upto != NULL)
     __pthread_cleanup_upto (env->__jmpbuf, CURRENT_STACK_FRAME);
 }
 libc_hidden_def(_longjmp_unwind)
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
deleted file mode 100644
index 28672a6..0000000
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c
+++ /dev/null
@@ -1,20 +0,0 @@ 
-/* Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/* No difference to lowlevellock.c, except we lose a couple of functions.  */
-#include "lowlevellock.c"
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
index 75369bd..4294a20 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
@@ -24,9 +24,6 @@ 
 #include <tls.h>
 
 void
-#ifndef IS_IN_libpthread
-weak_function
-#endif
 __lll_lock_wait_private (int *futex)
 {
   if (*futex == 2)