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
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)
hooks/post-receive