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(a)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(a)uclibc-ng.org>
commit 48442540e4c481474c4493192cbd9cb58c5016ad
Author: Vineet Gupta <Vineet.Gupta1(a)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(a)synopsys.com>
Cc: Alexey Brodkin <abrodkin(a)synopsys.com>
Signed-off-by: Vineet Gupta <vgupta(a)synopsys.com>
commit d388c3e67f78b414a24550a61b1bab49d7c01883
Author: Vineet Gupta <Vineet.Gupta1(a)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(a)synopsys.com>
Cc: Alexey Brodkin <abrodkin(a)synopsys.com>
Signed-off-by: Vineet Gupta <vgupta(a)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(a)redhat.com>om>, 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(a)au.ibm.com>om>, 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
--
uClibc-ng - small C library for embedded systems