From patchwork Thu Oct 13 19:18:40 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wbx X-Patchwork-Id: 681926 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from helium.openadk.org (helium.openadk.org [89.238.66.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3sw0rk20PBz9sC3 for ; Fri, 14 Oct 2016 06:18:45 +1100 (AEDT) Received: from helium.openadk.org (localhost [IPv6:::1]) by helium.openadk.org (Postfix) with ESMTP id 3C3BE101A7; Thu, 13 Oct 2016 21:18:42 +0200 (CEST) X-Original-To: devel@uclibc-ng.org Delivered-To: devel@helium.openadk.org Received: by helium.openadk.org (Postfix, from userid 1000) id 725F1101A7; Thu, 13 Oct 2016 21:18:40 +0200 (CEST) MIME-Version: 1.0 To: devel@uclibc-ng.org X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 24ca498fc322936281b0c69c271dd64979c313eb X-Git-Newrev: a3e5bfd20712f71790ea9bae9e9be250f07e8c21 Auto-Submitted: auto-generated Message-Id: <20161013191840.725F1101A7@helium.openadk.org> Date: Thu, 13 Oct 2016 21:18:40 +0200 (CEST) From: wbx@helium.openadk.org (wbx) Subject: [uclibc-ng-devel] uClibc-ng - small C library for embedded systems branch master updated. v1.0.18-11-ga3e5bfd X-BeenThere: devel@uclibc-ng.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: uClibc-ng Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: devel-bounces@uclibc-ng.org Sender: "devel" 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 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 commit 48442540e4c481474c4493192cbd9cb58c5016ad Author: Vineet Gupta 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 : 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 Cc: Alexey Brodkin Signed-off-by: Vineet Gupta commit d388c3e67f78b414a24550a61b1bab49d7c01883 Author: Vineet Gupta 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 : ; 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 Cc: Alexey Brodkin Signed-off-by: Vineet Gupta ----------------------------------------------------------------------- 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 --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 , 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 - . */ - -#include -#include -#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 , 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 - . */ - -/* 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 void -#ifndef IS_IN_libpthread -weak_function -#endif __lll_lock_wait_private (int *futex) { if (*futex == 2)