From patchwork Thu Jan 26 22:09:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Waldemar Brodkorb X-Patchwork-Id: 720397 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 3v8bgb3Ghzz9sxS for ; Fri, 27 Jan 2017 09:09:46 +1100 (AEDT) Received: from helium.openadk.org (localhost [IPv6:::1]) by helium.openadk.org (Postfix) with ESMTP id AD0121005B; Thu, 26 Jan 2017 23:09:40 +0100 (CET) X-Original-To: devel@uclibc-ng.org Delivered-To: devel@helium.openadk.org Received: by helium.openadk.org (Postfix, from userid 1000) id D048810059; Thu, 26 Jan 2017 23:09:33 +0100 (CET) Date: Thu, 26 Jan 2017 23:09:33 +0100 From: Waldemar Brodkorb To: Max Filippov Message-ID: <20170126220933.GA11210@waldemar-brodkorb.de> References: <20170125060253.GA7298@waldemar-brodkorb.de> <20170125101541.GA10238@octofox.metropolis> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170125101541.GA10238@octofox.metropolis> X-Operating-System: Linux 3.16.0-4-amd64 x86_64 User-Agent: Mutt/1.5.23 (2014-03-12) Cc: devel@uclibc-ng.org, Vineet Gupta , Alexey Brodkin , Matthew Fortune , Che-Wei Chuang , Vincent Ren-Wei Chen Subject: Re: [uclibc-ng-devel] [PATCH] remove PID caching - preview 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" Hi Max, Max Filippov wrote, > Why is it left here? I have taken this from the GNU C library changeset, but it seems unneeded. I asked the author of the patch and it seems there is no reason to keep it. > > + //sigset_t set; > > + //__libc_signal_block_app (&set); > > Why adding commented out code instead of using e.g. sigprocmask? It was a leftover I wanted to fix later. Good catch. I now synced the required code. I am planning to push the updated patch. Thanks for all reviews and comments. best regards Waldemar From 425d447a9c9d0c0d01a6624d77439fcf0545bcc7 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sun, 22 Jan 2017 10:24:51 +0100 Subject: [PATCH 1/2] remove PID caching Follow GNU C Library from c579f48edba88380635ab98cb612030e3ed8691e and remove the PID caching. These simplifies the architecture specific assembly code. The run of the test suite found no regressions, it even solves some of the test failures for x86/x86_64/sparc. Signed-off-by: Waldemar Brodkorb --- libc/sysdeps/linux/arc/clone.S | 13 +--- libc/sysdeps/linux/arc/vfork.S | 13 ---- libc/sysdeps/linux/arm/clone.S | 18 ----- libc/sysdeps/linux/arm/vfork.S | 13 ---- libc/sysdeps/linux/common/bits/kernel-features.h | 7 -- libc/sysdeps/linux/i386/Makefile.arch | 7 +- libc/sysdeps/linux/i386/clone.S | 8 --- libc/sysdeps/linux/i386/vfork.S | 8 --- libc/sysdeps/linux/ia64/clone2.S | 19 ----- libc/sysdeps/linux/metag/clone.S | 21 ------ libc/sysdeps/linux/metag/vfork.S | 12 ---- libc/sysdeps/linux/mips/Makefile.arch | 4 +- libc/sysdeps/linux/mips/clone.S | 28 -------- libc/sysdeps/linux/mips/vfork.S | 12 ---- libc/sysdeps/linux/nds32/clone.S | 24 ------- libc/sysdeps/linux/nds32/vfork.S | 14 ---- libc/sysdeps/linux/nios2/clone.S | 8 --- libc/sysdeps/linux/nios2/vfork.S | 17 ----- libc/sysdeps/linux/powerpc/Makefile.arch | 4 +- libc/sysdeps/linux/powerpc/clone.S | 30 ++------ libc/sysdeps/linux/sh/Makefile.arch | 7 +- libc/sysdeps/linux/sh/clone.S | 36 +--------- libc/sysdeps/linux/sparc/Makefile.arch | 8 +-- libc/sysdeps/linux/sparc/clone.S | 17 ----- libc/sysdeps/linux/sparc/vfork.S | 2 - libc/sysdeps/linux/x86_64/Makefile.arch | 6 +- libc/sysdeps/linux/x86_64/clone.S | 13 ---- libc/sysdeps/linux/x86_64/vfork.S | 8 --- libc/sysdeps/linux/xtensa/Makefile.arch | 4 +- libc/sysdeps/linux/xtensa/clone.S | 19 ----- libc/sysdeps/linux/xtensa/vfork.S | 25 ------- libpthread/nptl/allocatestack.c | 20 +----- libpthread/nptl/descr.h | 3 - libpthread/nptl/init.c | 28 +------- libpthread/nptl/pthreadP.h | 19 +---- libpthread/nptl/pthread_cancel.c | 6 +- libpthread/nptl/sysdeps/alpha/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/arc/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/arm/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/i386/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/metag/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/microblaze/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/mips/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/nds32/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/nios2/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/powerpc/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/pthread/createthread.c | 5 +- libpthread/nptl/sysdeps/sh/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/sparc/tcb-offsets.sym | 1 - .../nptl/sysdeps/unix/sysv/linux/alpha/clone.S | 2 - .../nptl/sysdeps/unix/sysv/linux/alpha/vfork.S | 45 ------------ .../nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch | 3 - .../nptl/sysdeps/unix/sysv/linux/arc/clone.S | 10 --- .../nptl/sysdeps/unix/sysv/linux/arc/vfork.S | 11 --- .../nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch | 8 --- .../nptl/sysdeps/unix/sysv/linux/arm/clone.S | 3 - .../nptl/sysdeps/unix/sysv/linux/arm/vfork.S | 38 ---------- libpthread/nptl/sysdeps/unix/sysv/linux/fork.c | 12 ---- libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c | 30 -------- .../sysdeps/unix/sysv/linux/i386/Makefile.arch | 4 +- .../nptl/sysdeps/unix/sysv/linux/i386/clone.S | 2 - .../nptl/sysdeps/unix/sysv/linux/i386/vfork.S | 37 ---------- .../sysdeps/unix/sysv/linux/metag/Makefile.arch | 3 - .../nptl/sysdeps/unix/sysv/linux/metag/clone.S | 9 --- .../nptl/sysdeps/unix/sysv/linux/metag/vfork.S | 55 -------------- .../unix/sysv/linux/microblaze/Makefile.arch | 1 - .../sysdeps/unix/sysv/linux/microblaze/clone.S | 4 -- .../sysdeps/unix/sysv/linux/microblaze/vfork.S | 5 -- .../sysdeps/unix/sysv/linux/mips/Makefile.arch | 7 +- .../nptl/sysdeps/unix/sysv/linux/mips/clone.S | 2 - .../nptl/sysdeps/unix/sysv/linux/mips/pt-clone.S | 2 - .../nptl/sysdeps/unix/sysv/linux/mips/vfork.S | 42 ----------- .../sysdeps/unix/sysv/linux/nds32/Makefile.arch | 3 - .../nptl/sysdeps/unix/sysv/linux/nds32/clone.S | 4 -- .../nptl/sysdeps/unix/sysv/linux/nds32/vfork.S | 43 ----------- .../sysdeps/unix/sysv/linux/nios2/Makefile.arch | 2 - .../nptl/sysdeps/unix/sysv/linux/nios2/clone.S | 3 - .../nptl/sysdeps/unix/sysv/linux/nios2/vfork.S | 38 ---------- .../nptl/sysdeps/unix/sysv/linux/nptl-signals.h | 84 ++++++++++++++++++++++ .../sysdeps/unix/sysv/linux/powerpc/Makefile.arch | 2 - .../nptl/sysdeps/unix/sysv/linux/powerpc/clone.S | 9 --- .../nptl/sysdeps/unix/sysv/linux/powerpc/vfork.S | 57 --------------- .../nptl/sysdeps/unix/sysv/linux/pthread_kill.c | 5 +- .../sysdeps/unix/sysv/linux/pthread_sigqueue.c | 12 ++-- libpthread/nptl/sysdeps/unix/sysv/linux/raise.c | 51 ++++++------- .../nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch | 2 - libpthread/nptl/sysdeps/unix/sysv/linux/sh/clone.S | 2 - libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S | 70 ------------------ .../sysdeps/unix/sysv/linux/sparc/Makefile.arch | 3 - .../nptl/sysdeps/unix/sysv/linux/sparc/clone.S | 2 - .../nptl/sysdeps/unix/sysv/linux/sparc/vfork.S | 48 ------------- .../sysdeps/unix/sysv/linux/x86_64/Makefile.arch | 6 +- .../nptl/sysdeps/unix/sysv/linux/x86_64/clone.S | 3 - .../nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S | 42 ----------- .../sysdeps/unix/sysv/linux/xtensa/Makefile.arch | 3 - .../nptl/sysdeps/unix/sysv/linux/xtensa/clone.S | 3 - .../nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S | 59 --------------- libpthread/nptl/sysdeps/x86_64/tcb-offsets.sym | 1 - libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym | 1 - 99 files changed, 150 insertions(+), 1261 deletions(-) delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/alpha/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arc/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arc/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arm/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/i386/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/mips/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/nds32/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/nds32/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/nios2/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/nios2/vfork.S create mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/nptl-signals.h delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sh/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S delete mode 100644 libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S diff --git a/libc/sysdeps/linux/arc/clone.S b/libc/sysdeps/linux/arc/clone.S index 3942b88..c2ce906 100644 --- a/libc/sysdeps/linux/arc/clone.S +++ b/libc/sysdeps/linux/arc/clone.S @@ -61,20 +61,9 @@ ENTRY(clone) ; Setup TP register (since kernel doesn't do that) and.f 0, r12, CLONE_SETTLS bz .Lnext_clone_quirk - SET_TP r9 + mov r25, r9 .Lnext_clone_quirk: -#ifdef RESET_PID - bbit1 r12, 16, .Lgo_thread ; CLONE_THREAD = (1 << 16) - - mov r8, __NR_getpid - ARC_TRAP_INSN ; r0 has PID - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - st r0, [r1, PTHREAD_PID] - st r0, [r1, PTHREAD_TID] - -.Lgo_thread: -#endif #endif ; child jumps off to @fn with @arg as argument, and returns here jl.d [r10] diff --git a/libc/sysdeps/linux/arc/vfork.S b/libc/sysdeps/linux/arc/vfork.S index 573a29f..11959b6 100644 --- a/libc/sysdeps/linux/arc/vfork.S +++ b/libc/sysdeps/linux/arc/vfork.S @@ -16,25 +16,12 @@ #define CLONE_FLAGS_FOR_VFORK (CLONE_VM|CLONE_VFORK|SIGCHLD) ENTRY(__vfork) -#ifdef SAVE_PID - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - ld r2, [r1, PTHREAD_PID] - neg.f r3, r2 - bset.z r3, r3, 31 - st r3, [r1, PTHREAD_PID] -#endif mov r0, CLONE_FLAGS_FOR_VFORK mov_s r1, sp mov r8, __NR_clone ARC_TRAP_INSN cmp r0, 0 -#ifdef RESTORE_PID - bz 1f ; child continues - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - st r2, [r1, PTHREAD_PID] -1: -#endif jge [blink] ; pid >=0 return, else detour via tailcall to errno b __syscall_error diff --git a/libc/sysdeps/linux/arm/clone.S b/libc/sysdeps/linux/arm/clone.S index 0b293ec..b156e93 100644 --- a/libc/sysdeps/linux/arm/clone.S +++ b/libc/sysdeps/linux/arm/clone.S @@ -110,9 +110,6 @@ __clone: @ do the system call @ get flags mov r0, r2 -#ifdef RESET_PID - mov ip, r2 -#endif @ new sp is already in r1 push {r4, r7} cfi_adjust_cfa_offset (8) @@ -138,21 +135,6 @@ PSEUDO_END (__clone) 1: .fnstart .cantunwind -#ifdef RESET_PID - tst ip, #CLONE_THREAD - bne 3f - GET_TLS (lr) - mov r1, r0 - tst ip, #CLONE_VM - ldr r7, =SYS_ify(getpid) - ite ne - movne r0, #-1 - swieq 0x0 - NEGOFF_ADJ_BASE (r1, TID_OFFSET) - str r0, NEGOFF_OFF1 (r1, TID_OFFSET) - str r0, NEGOFF_OFF2 (r1, PID_OFFSET, TID_OFFSET) -3: -#endif @ pick the function arg and call address off the stack and execute ldr r0, [sp, #4] mov lr, pc diff --git a/libc/sysdeps/linux/arm/vfork.S b/libc/sysdeps/linux/arm/vfork.S index 221a90c..455b2f8 100644 --- a/libc/sysdeps/linux/arm/vfork.S +++ b/libc/sysdeps/linux/arm/vfork.S @@ -13,15 +13,6 @@ #include #include -#ifndef SAVE_PID -#define SAVE_PID -#endif - -#ifndef RESTORE_PID -#define RESTORE_PID -#endif - - #ifdef __NR_fork .text .global __vfork @@ -33,9 +24,7 @@ .thumb_func __vfork: #ifdef __NR_vfork - SAVE_PID DO_CALL (vfork) - RESTORE_PID ldr r1, =0xfffff000 cmp r0, r1 bcs 1f @@ -69,9 +58,7 @@ __error: __vfork: #ifdef __NR_vfork - SAVE_PID DO_CALL (vfork) - RESTORE_PID cmn r0, #4096 IT(t, cc) BXC(cc, lr) diff --git a/libc/sysdeps/linux/common/bits/kernel-features.h b/libc/sysdeps/linux/common/bits/kernel-features.h index 0b36320..e0195e4 100644 --- a/libc/sysdeps/linux/common/bits/kernel-features.h +++ b/libc/sysdeps/linux/common/bits/kernel-features.h @@ -375,13 +375,6 @@ # define __ASSUME_AT_SECURE 1 #endif -/* Starting with the 2.5.75 kernel the kernel fills in the correct value - in the si_pid field passed as part of the siginfo_t struct to signal - handlers. */ -#if __LINUX_KERNEL_VERSION >= 132427 -# define __ASSUME_CORRECT_SI_PID 1 -#endif - /* The utimes syscall has been available for some architectures forever. For x86 it was introduced after 2.5.75, for x86-64, ppc, and ppc64 it was introduced in 2.6.0-test3. */ diff --git a/libc/sysdeps/linux/i386/Makefile.arch b/libc/sysdeps/linux/i386/Makefile.arch index e1739e1..6c9eed8 100644 --- a/libc/sysdeps/linux/i386/Makefile.arch +++ b/libc/sysdeps/linux/i386/Makefile.arch @@ -6,11 +6,8 @@ # CSRC-y := brk.c __syscall_error.c sigaction.c - -SSRC-y := \ - __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - sync_file_range.S syscall.S mmap.S mmap64.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ + sync_file_range.S syscall.S mmap.S mmap64.S vfork.S clone.S SSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise64.S -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.S setcontext.S getcontext.S swapcontext.S diff --git a/libc/sysdeps/linux/i386/clone.S b/libc/sysdeps/linux/i386/clone.S index 632cf59..68e87b5 100644 --- a/libc/sysdeps/linux/i386/clone.S +++ b/libc/sysdeps/linux/i386/clone.S @@ -78,10 +78,6 @@ clone: movl %eax,8(%ecx) /* Don't leak any information. */ movl $0,4(%ecx) -#ifndef RESET_PID - movl $0,(%ecx) -#endif - /* Do the system call */ pushl %ebx @@ -92,10 +88,6 @@ clone: movl FLAGS+12(%esp),%ebx movl CTID+12(%esp),%edi movl $__NR_clone,%eax -#ifdef RESET_PID - /* Remember the flag value. */ - movl %ebx, (%ecx) -#endif int $0x80 popl %edi popl %esi diff --git a/libc/sysdeps/linux/i386/vfork.S b/libc/sysdeps/linux/i386/vfork.S index d85726f..6c4102e 100644 --- a/libc/sysdeps/linux/i386/vfork.S +++ b/libc/sysdeps/linux/i386/vfork.S @@ -19,18 +19,10 @@ __vfork: popl %ecx -#ifdef SAVE_PID - SAVE_PID -#endif - movl $__NR_vfork,%eax int $0x80 pushl %ecx -#ifdef RESTORE_PID - RESTORE_PID -#endif - cmpl $-4095,%eax jae __syscall_error ret diff --git a/libc/sysdeps/linux/ia64/clone2.S b/libc/sysdeps/linux/ia64/clone2.S index c077f72..692ee36 100644 --- a/libc/sysdeps/linux/ia64/clone2.S +++ b/libc/sysdeps/linux/ia64/clone2.S @@ -16,11 +16,8 @@ . */ #include "sysdep.h" - -#include "sysdep.h" #include - /* int __clone2(int (*fn) (void *arg), void *child_stack_base, */ /* size_t child_stack_size, int flags, void *arg, */ /* pid_t *parent_tid, void *tls, pid_t *child_tid) */ @@ -68,22 +65,6 @@ ENTRY(__clone2) (CHILD) mov loc0=gp (PARENT) ret ;; -#ifdef RESET_PID - tbit.nz p6,p0=in3,16 /* CLONE_THREAD */ - tbit.z p7,p10=in3,8 /* CLONE_VM */ -(p6) br.cond.dptk 1f - ;; - mov r15=SYS_ify (getpid) -(p10) addl r8=-1,r0 -(p7) break __BREAK_SYSCALL - ;; - add r9=PID,r13 - add r10=TID,r13 - ;; - st4 [r9]=r8 - st4 [r10]=r8 - ;; -#endif 1: ld8 out1=[in0],8 /* Retrieve code pointer. */ mov out0=in4 /* Pass proper argument to fn */ ;; diff --git a/libc/sysdeps/linux/metag/clone.S b/libc/sysdeps/linux/metag/clone.S index d9d8363..4687cbc 100644 --- a/libc/sysdeps/linux/metag/clone.S +++ b/libc/sysdeps/linux/metag/clone.S @@ -52,27 +52,6 @@ __clone: ! BRKPNT ! We are the child -#ifdef RESET_PID - SETL [A0StP++], D0FrT, D1RtP - MOVT D0FrT, #HI(CLONE_THREAD) - ADD D0FrT, D0FrT, #LO(CLONE_THREAD) - ANDS D0FrT, D0FrT, D1Ar1 - BNZ 3f - MOVT D0FrT, #HI(CLONE_VM) - ADD D0FrT, D0FrT, #LO(CLONE_VM) - ANDS D0FrT, D0FrT, D1Ar1 - BZ 1f - MOV D1Ar1, #-1 - BA 2f -1: MOV D1Re0, #__NR_getpid - SWITCH #0x440001 - MOV D1Ar1, D0Re0 -2: CALLR D1RtP, __CLONE_METAG_LOAD_TP - SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE - SETD [D0Re0 + #PID], D1Ar1 - SETD [D0Re0 + #TID], D1Ar1 -3: GETL D0FrT, D1RtP, [--A0StP] -#endif ! Rearrange the function arg and call address from registers MOV D0Ar2, D0FrT MOV D1Ar1, D0Ar6 diff --git a/libc/sysdeps/linux/metag/vfork.S b/libc/sysdeps/linux/metag/vfork.S index 8573ded..5e2fc88 100644 --- a/libc/sysdeps/linux/metag/vfork.S +++ b/libc/sysdeps/linux/metag/vfork.S @@ -8,14 +8,6 @@ #include #include -#ifndef SAVE_PID -#define SAVE_PID -#endif - -#ifndef RESTORE_PID -#define RESTORE_PID -#endif - #ifdef __NR_vfork #define __VFORK_NR __NR_vfork #else @@ -33,8 +25,6 @@ .type ___vfork, @function ___vfork: - SAVE_PID - MOV D1Ar1, #0x4111 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ MOV D0Ar2, #0 MOV D1Ar3, #0 @@ -44,8 +34,6 @@ ___vfork: MOV D1Re0, #__NR_clone SWITCH #0x440001 - RESTORE_PID - MOVT D1Re0, #HI(-4096) ADD D1Re0, D1Re0, #LO(-4096) CMP D1Re0, D0Re0 diff --git a/libc/sysdeps/linux/mips/Makefile.arch b/libc/sysdeps/linux/mips/Makefile.arch index 10deedc..5e54b07 100644 --- a/libc/sysdeps/linux/mips/Makefile.arch +++ b/libc/sysdeps/linux/mips/Makefile.arch @@ -9,11 +9,11 @@ CSRC-y := \ __longjmp.c brk.c setjmp_aux.c \ pread_write.c sigaction.c _test_and_set.c -SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S +SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S syscall.S pipe.S syscall_error.S \ + vfork.S clone.S CSRC-$(UCLIBC_LINUX_SPECIFIC) += cacheflush.c sysmips.c CSRC-$(UCLIBC_HAS_ADVANCED_REALTIME) += posix_fadvise.c posix_fadvise64.c -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.S setcontext.S getcontext.S \ swapcontext.S diff --git a/libc/sysdeps/linux/mips/clone.S b/libc/sysdeps/linux/mips/clone.S index 8f7059d..964cf92 100644 --- a/libc/sysdeps/linux/mips/clone.S +++ b/libc/sysdeps/linux/mips/clone.S @@ -24,9 +24,6 @@ #include #define _ERRNO_H 1 #include -#ifdef RESET_PID -#include -#endif #define CLONE_VM 0x00000100 #define CLONE_THREAD 0x00010000 @@ -68,9 +65,6 @@ NESTED(clone,4*SZREG,sp) PTR_SUBU a1,32 /* Reserve argument save space. */ PTR_S a0,0(a1) /* Save function pointer. */ PTR_S a3,PTRSIZE(a1) /* Save argument pointer. */ -#ifdef RESET_PID - LONG_S a2,(PTRSIZE*2)(a1) /* Save clone flags. */ -#endif move a0,a2 @@ -129,14 +123,6 @@ L(thread_start): SAVE_GP (GPOFF) /* The stackframe has been created on entry of clone(). */ -#ifdef RESET_PID - /* Check and see if we need to reset the PID. */ - LONG_L a0,(PTRSIZE*2)(sp) - and a1,a0,CLONE_THREAD - beqz a1,L(restore_pid) -L(donepid): -#endif - /* Restore the arg for user's function. */ PTR_L t9,0(sp) /* Function pointer. */ PTR_L a0,PTRSIZE(sp) /* Argument pointer. */ @@ -153,20 +139,6 @@ L(donepid): jal _exit #endif -#ifdef RESET_PID -L(restore_pid): - and a1,a0,CLONE_VM - li v0,-1 - bnez a1,L(gotpid) - li v0,__NR_getpid - syscall -L(gotpid): - READ_THREAD_POINTER(v1) - INT_S v0,PID_OFFSET(v1) - INT_S v0,TID_OFFSET(v1) - b L(donepid) -#endif - END(__thread_start) weak_alias(clone, __clone) diff --git a/libc/sysdeps/linux/mips/vfork.S b/libc/sysdeps/linux/mips/vfork.S index 9311504..10e3be7 100644 --- a/libc/sysdeps/linux/mips/vfork.S +++ b/libc/sysdeps/linux/mips/vfork.S @@ -21,14 +21,6 @@ #include #include -#ifndef SAVE_PID -#define SAVE_PID -#endif - -#ifndef RESTORE_PID -#define RESTORE_PID -#endif - #ifdef __NR_fork /* int vfork() */ @@ -65,8 +57,6 @@ NESTED(__vfork,FRAMESZ,sp) PTR_ADDU sp, FRAMESZ - SAVE_PID - li a0, 0x4112 /* CLONE_VM | CLONE_VFORK | SIGCHLD */ move a1, sp @@ -74,8 +64,6 @@ NESTED(__vfork,FRAMESZ,sp) li v0,__NR_clone syscall - RESTORE_PID - bnez a3,L(error) /* Successful return from the parent or child. */ diff --git a/libc/sysdeps/linux/nds32/clone.S b/libc/sysdeps/linux/nds32/clone.S index 1ed77fb..0e6e432 100644 --- a/libc/sysdeps/linux/nds32/clone.S +++ b/libc/sysdeps/linux/nds32/clone.S @@ -28,10 +28,6 @@ #define _ERRNO_H 1 #include -#ifdef RESET_PID -#include -#endif - #define CLONE_VM 0x00000100 #define CLONE_THREAD 0x00010000 @@ -131,27 +127,7 @@ ENTRY(__clone) cfi_restore(fp) #endif /* PIC */ ret - -#ifdef RESET_PID 4: - cfi_undefined(lp) - movi $r0, CLONE_THREAD ! Skip when CLONE_THREAD is set. - and $r0, $r5, $r0 - bnez $r0, 8f - movi $r0, CLONE_VM ! Value = -1 when CLONE_VM is set. - and $r0, $r5, $r0 - beqz $r0, 6f - movi $r0, -1 - j 7f -6: - __do_syscall(getpid) ! __do_syscall(gettid) ! __do_syscall(getpid) -7: - swi $r0, [$r25 + PID_OFFSET] - swi $r0, [$r25 + TID_OFFSET] -8: -#else -4: -#endif /* Only in child's stack. */ pop $r1 ! fn pop $r0 ! arg diff --git a/libc/sysdeps/linux/nds32/vfork.S b/libc/sysdeps/linux/nds32/vfork.S index ac3fa30..ab32135 100644 --- a/libc/sysdeps/linux/nds32/vfork.S +++ b/libc/sysdeps/linux/nds32/vfork.S @@ -25,32 +25,18 @@ #define _ERRNO_H 1 #include -#ifndef SAVE_PID -#define SAVE_PID -#endif - -#ifndef RESTORE_PID -#define RESTORE_PID -#endif /* Clone the calling process, but without copying the whole address space. The calling process is suspended until the new process exits or is replaced by a call to `execve'. Return -1 for errors, 0 to the new process, and the process ID of the new process to the old process. */ - ENTRY (__vfork) #ifdef PIC .pic #endif #ifdef __NR_vfork -# ifdef SAVE_PID - SAVE_PID -# endif syscall __NR_vfork -# ifdef RESTORE_PID - RESTORE_PID -# endif bltz $r0, 2f 1: ret diff --git a/libc/sysdeps/linux/nios2/clone.S b/libc/sysdeps/linux/nios2/clone.S index 0626d8a..04f0634 100644 --- a/libc/sysdeps/linux/nios2/clone.S +++ b/libc/sysdeps/linux/nios2/clone.S @@ -24,10 +24,6 @@ #define _ERRNO_H 1 #include -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include -#endif - #define CLONE_VM 0x00000100 /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, @@ -64,10 +60,6 @@ thread_start: andi r2, r4, CLONE_VM bne r2, zero, 2f DO_CALL (getpid, 0) -#ifdef RESET_PID - stw r2, PID_OFFSET(r23) - stw r2, TID_OFFSET(r23) -#endif 2: ldw r5, 4(sp) /* Function pointer. */ ldw r4, 0(sp) /* Argument pointer. */ diff --git a/libc/sysdeps/linux/nios2/vfork.S b/libc/sysdeps/linux/nios2/vfork.S index 99e4a73..2bef2a9 100644 --- a/libc/sysdeps/linux/nios2/vfork.S +++ b/libc/sysdeps/linux/nios2/vfork.S @@ -18,21 +18,7 @@ #include -#ifdef __UCLIBC_HAS_THREADS_NATIVE__ -#include -#endif - ENTRY(__vfork) - -#ifdef RESET_PID - ldw r6, PID_OFFSET(r23) - sub r7, zero, r6 - bne r7, zero, 2f - movhi r7, %hi(0x80000000) -2: - stw r7, PID_OFFSET(r23) -#endif - movi r4, 0x4111 /* (CLONE_VM | CLONE_VFORK | SIGCHLD) */ mov r5, zero @@ -42,9 +28,6 @@ ENTRY(__vfork) trap beq r2, zero, 1f -#ifdef RESET_PID - stw r6, PID_OFFSET(r23) -#endif 1: ret diff --git a/libc/sysdeps/linux/powerpc/Makefile.arch b/libc/sysdeps/linux/powerpc/Makefile.arch index f0144e7..9dc27c4 100644 --- a/libc/sysdeps/linux/powerpc/Makefile.arch +++ b/libc/sysdeps/linux/powerpc/Makefile.arch @@ -10,9 +10,7 @@ CSRC-$(if $(UCLIBC_HAS_LONG_DOUBLE_MATH),,y) += copysignl.c SSRC-y := \ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \ - __uClibc_syscall.S syscall.S - -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S vfork.S + __uClibc_syscall.S syscall.S clone.S vfork.S ifeq ($(CONFIG_E500),y) ARCH_HEADERS := fenv.h diff --git a/libc/sysdeps/linux/powerpc/clone.S b/libc/sysdeps/linux/powerpc/clone.S index 8efbbda..45319d0 100644 --- a/libc/sysdeps/linux/powerpc/clone.S +++ b/libc/sysdeps/linux/powerpc/clone.S @@ -47,14 +47,10 @@ __clone: /* Set up stack frame for parent. */ stwu r1,-32(r1) cfi_adjust_cfa_offset (32) -#ifdef RESET_PID - stmw r28,16(r1) -#else -# ifndef __ASSUME_FIXED_CLONE_SYSCALL +#ifndef __ASSUME_FIXED_CLONE_SYSCALL stmw r29,16(r1) -# else +#else stmw r30,16(r1) -# endif #endif /* Set up stack frame for child. */ @@ -67,9 +63,6 @@ __clone: #ifndef __ASSUME_FIXED_CLONE_SYSCALL mr r29,r4 /* Stack pointer in r29. */ #endif -#ifdef RESET_PID - mr r28,r5 -#endif mr r31,r6 /* Argument in r31. */ /* 'flags' argument is first parameter to clone syscall. (The other @@ -101,17 +94,6 @@ __clone: mr r1,r29 #endif -#ifdef RESET_PID - andis. r0,r28,CLONE_THREAD>>16 - bne+ r0,.Loldpid - andi. r0,r28,CLONE_VM - li r3,-1 - bne- r0,.Lnomoregetpid -.Lnomoregetpid: - stw r3,TID(r2) - stw r3,PID(r2) -.Loldpid: -#endif /* Call procedure. */ mtctr r30 mr r3,r31 @@ -121,14 +103,10 @@ __clone: .Lparent: /* Parent. Restore registers & return. */ -#ifdef RESET_PID - lmw r28,16(r1) -#else -# ifndef __ASSUME_FIXED_CLONE_SYSCALL +#ifndef __ASSUME_FIXED_CLONE_SYSCALL lmw r29,16(r1) -# else +#else lmw r30,16(r1) -# endif #endif addi r1,r1,32 bnslr+ diff --git a/libc/sysdeps/linux/sh/Makefile.arch b/libc/sysdeps/linux/sh/Makefile.arch index 99a7721..6103381 100644 --- a/libc/sysdeps/linux/sh/Makefile.arch +++ b/libc/sysdeps/linux/sh/Makefile.arch @@ -6,10 +6,7 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -CSRC-y := \ - pipe.c __init_brk.c brk.c sbrk.c pread_write.c - -SSRC-y := setjmp.S __longjmp.S ___fpscr_values.S +CSRC-y := pipe.c __init_brk.c brk.c sbrk.c pread_write.c +SSRC-y := setjmp.S __longjmp.S ___fpscr_values.S clone.S vfork.S CSRC-$(UCLIBC_LINUX_SPECIFIC) += cacheflush.c -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S vfork.S diff --git a/libc/sysdeps/linux/sh/clone.S b/libc/sysdeps/linux/sh/clone.S index 3ed6b25..334f83f 100644 --- a/libc/sysdeps/linux/sh/clone.S +++ b/libc/sysdeps/linux/sh/clone.S @@ -23,9 +23,7 @@ #include #define _ERRNO_H 1 #include -#ifdef RESET_PID -#include -#endif + /* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg, pid_t *ptid, void *tls, pid_t *ctid); */ @@ -85,29 +83,7 @@ ENTRY(__clone) 2: /* terminate the stack frame */ mov #0, r14 -#ifdef RESET_PID - mov r4, r0 - shlr16 r0 - tst #1, r0 // CLONE_THREAD = (1 << 16) - bf/s 4f - mov r4, r0 - /* new pid */ - shlr8 r0 - tst #1, r0 // CLONE_VM = (1 << 8) - bf/s 3f - mov #-1, r0 - mov #+SYS_ify(getpid), r3 - trapa #0x15 -3: - stc gbr, r1 - mov.w .Lpidoff, r2 - add r1, r2 - mov.l r0, @r2 - mov.w .Ltidoff, r2 - add r1, r2 - mov.l r0, @r2 -4: -#endif + /* thread starts */ mov.l @r15, r1 jsr @r1 @@ -138,12 +114,6 @@ ENTRY(__clone) .long _GLOBAL_OFFSET_TABLE_ .L3: .long PLTJMP(C_SYMBOL_NAME(_exit)) -#ifdef RESET_PID -.Lpidoff: - .word PID - TLS_PRE_TCB_SIZE -.Ltidoff: - .word TID - TLS_PRE_TCB_SIZE -#endif -PSEUDO_END (__clone) +PSEUDO_END (__clone) weak_alias (__clone, clone) diff --git a/libc/sysdeps/linux/sparc/Makefile.arch b/libc/sysdeps/linux/sparc/Makefile.arch index 92ea7d9..be393b8 100644 --- a/libc/sysdeps/linux/sparc/Makefile.arch +++ b/libc/sysdeps/linux/sparc/Makefile.arch @@ -6,12 +6,8 @@ # CSRC-y := brk.c __syscall_error.c sigaction.c - -SSRC-y := \ - __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ - syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S - -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += fork.S vfork.S clone.S +SSRC-y := __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \ + syscall.S urem.S udiv.S umul.S sdiv.S rem.S pipe.S fork.S vfork.S clone.S CSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += makecontext.c SSRC-$(UCLIBC_HAS_CONTEXT_FUNCS) += getcontext.S setcontext.S swapcontext.S diff --git a/libc/sysdeps/linux/sparc/clone.S b/libc/sysdeps/linux/sparc/clone.S index 1d0e3e6..3ee88da 100644 --- a/libc/sysdeps/linux/sparc/clone.S +++ b/libc/sysdeps/linux/sparc/clone.S @@ -22,9 +22,6 @@ #include #include -#ifdef RESET_PID -#include -#endif #include #define CLONE_VM 0x00000100 @@ -83,20 +80,6 @@ END(__clone) .type __thread_start,@function __thread_start: -#ifdef RESET_PID - sethi %hi(CLONE_THREAD), %l0 - andcc %g4, %l0, %g0 - bne 1f - andcc %g4, CLONE_VM, %g0 - bne,a 2f - mov -1,%o0 - set __NR_getpid,%g1 - ta 0x10 -2: - st %o0,[%g7 + PID] - st %o0,[%g7 + TID] -1: -#endif mov %g0, %fp /* terminate backtrace */ call %g2 mov %g3,%o0 diff --git a/libc/sysdeps/linux/sparc/vfork.S b/libc/sysdeps/linux/sparc/vfork.S index e5a3c30..5b05e64 100644 --- a/libc/sysdeps/linux/sparc/vfork.S +++ b/libc/sysdeps/linux/sparc/vfork.S @@ -16,8 +16,6 @@ License along with the GNU C Library; if not, see . */ -/* Code taken from glibc2.2.2/sysdeps/unix/sysv/linux/sparc/vfork.S */ - #include #ifndef __NR_vfork diff --git a/libc/sysdeps/linux/x86_64/Makefile.arch b/libc/sysdeps/linux/x86_64/Makefile.arch index 2bc838f..d84e43d 100644 --- a/libc/sysdeps/linux/x86_64/Makefile.arch +++ b/libc/sysdeps/linux/x86_64/Makefile.arch @@ -6,11 +6,9 @@ # CSRC-y := brk.c __syscall_error.c sigaction.c +SSRC-y := __longjmp.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S \ + vfork.S clone.S -SSRC-y := \ - __longjmp.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S - -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += vfork.S clone.S ARCH_OBJ_FILTEROUT-$(UCLIBC_LINUX_SPECIFIC) := sched_getcpu.c ifeq ($(UCLIBC_LINUX_SPECIFIC),y) SSRC-$(UCLIBC_HAS_TLS) += sched_getcpu.S diff --git a/libc/sysdeps/linux/x86_64/clone.S b/libc/sysdeps/linux/x86_64/clone.S index 3745041..3dda8da 100644 --- a/libc/sysdeps/linux/x86_64/clone.S +++ b/libc/sysdeps/linux/x86_64/clone.S @@ -89,19 +89,6 @@ clone: the outermost frame obviously. */ xorl %ebp, %ebp -#ifdef RESET_PID - testq $CLONE_THREAD, %rdi - jne 1f - testq $CLONE_VM, %rdi - movl $-1, %eax - jne 2f - movl $__NR_getpid, %eax - syscall -2: movl %eax, %fs:PID - movl %eax, %fs:TID -1: -#endif - /* Set up arguments for the function call. */ popq %rax /* Function to call. */ popq %rdi /* Argument. */ diff --git a/libc/sysdeps/linux/x86_64/vfork.S b/libc/sysdeps/linux/x86_64/vfork.S index a8a2f6e..8e096bc 100644 --- a/libc/sysdeps/linux/x86_64/vfork.S +++ b/libc/sysdeps/linux/x86_64/vfork.S @@ -38,10 +38,6 @@ __vfork: is preserved by the syscall and that we're allowed to destroy. */ popq %rdi -#ifdef SAVE_PID - SAVE_PID -#endif - /* Stuff the syscall number in RAX and enter into the kernel. */ movl $__NR_vfork, %eax syscall @@ -49,10 +45,6 @@ __vfork: /* Push back the return PC. */ pushq %rdi -#ifdef RESTORE_PID - RESTORE_PID -#endif - cmpl $-4095, %eax jae __syscall_error /* Branch forward if it failed. */ diff --git a/libc/sysdeps/linux/xtensa/Makefile.arch b/libc/sysdeps/linux/xtensa/Makefile.arch index b9b6b87..23cd08e 100644 --- a/libc/sysdeps/linux/xtensa/Makefile.arch +++ b/libc/sysdeps/linux/xtensa/Makefile.arch @@ -6,9 +6,7 @@ # CSRC-y := brk.c sigaction.c __syscall_error.c - SSRC-y := bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S \ - sigrestorer.S syscall.S mmap.S windowspill.S __longjmp.S vfork.S + sigrestorer.S syscall.S mmap.S windowspill.S __longjmp.S vfork.S CSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += fork.c -SSRC-$(if $(UCLIBC_HAS_THREADS_NATIVE),,y) += clone.S diff --git a/libc/sysdeps/linux/xtensa/clone.S b/libc/sysdeps/linux/xtensa/clone.S index efdfcdd..913ec5a 100644 --- a/libc/sysdeps/linux/xtensa/clone.S +++ b/libc/sysdeps/linux/xtensa/clone.S @@ -21,9 +21,6 @@ #include #define _ERRNO_H 1 #include -#ifdef RESET_PID -#include -#endif #define __ASSEMBLY__ #include @@ -76,21 +73,6 @@ ENTRY (__clone) # error invalid values for CLONE_THREAD or CLONE_VM #endif -#ifdef RESET_PID - bbsi.l a6, 16, .Lskip_restore_pid /* CLONE_THREAD = 0x00010000 */ - movi a2, -1 - bbsi a6, 8, .Lgotpid /* CLONE_VM = 0x00000100 */ - movi a2, SYS_ify(getpid) - syscall -.Lgotpid: - rur a3, threadptr - movi a0, TLS_PRE_TCB_SIZE - sub a3, a3, a0 - s32i a2, a3, PID - s32i a2, a3, TID -.Lskip_restore_pid: -#endif - /* start child thread */ movi a0, 0 /* terminate the stack frame */ @@ -115,5 +97,4 @@ ENTRY (__clone) #endif PSEUDO_END (__clone) - weak_alias (__clone, clone) diff --git a/libc/sysdeps/linux/xtensa/vfork.S b/libc/sysdeps/linux/xtensa/vfork.S index 8058fb0..140ab77 100644 --- a/libc/sysdeps/linux/xtensa/vfork.S +++ b/libc/sysdeps/linux/xtensa/vfork.S @@ -34,16 +34,6 @@ */ -#ifndef SAVE_PID -#define SAVE_PID(a,b,c,d) -#endif -#ifndef RESTORE_PID -#define RESTORE_PID(a,b,c) -#endif -#ifndef RESTORE_PID12 -#define RESTORE_PID12(a,b,c) -#endif - /* pid_t vfork(void); Implemented as __clone_syscall(CLONE_VFORK | CLONE_VM | SIGCHLD, 0) @@ -73,8 +63,6 @@ HIDDEN_ENTRY (__vfork) .L4: mov a12, a2 mov a13, a3 - SAVE_PID(a5,a15,a2,a3) - /* use syscall 'clone' and set new stack pointer to the same address */ movi a2, SYS_ify(clone) @@ -83,8 +71,6 @@ HIDDEN_ENTRY (__vfork) syscall - RESTORE_PID(a5,a15,a2) - movi a5, -4096 mov a6, a2 @@ -102,16 +88,12 @@ HIDDEN_ENTRY (__vfork) mov a13, a3 mov a14, a6 - SAVE_PID(a9,a15,a2,a3) - movi a2, SYS_ify(clone) movi a3, 0 movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD syscall - RESTORE_PID(a9,a15,a2) - movi a9, -4096 mov a10, a2 @@ -131,16 +113,12 @@ HIDDEN_ENTRY (__vfork) mov a13, a3 mov a14, a6 - SAVE_PID (a2,a3,a2,a6) - movi a2, SYS_ify(clone) movi a3, 0 movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD syscall - RESTORE_PID12(a3,a6,a15) - mov a3, a13 movi a13, -4096 @@ -168,7 +146,6 @@ HIDDEN_ENTRY (__vfork) .Lpseudo_end: retw #elif defined(__XTENSA_CALL0_ABI__) - SAVE_PID(a5, a8, a3, a4) /* Use syscall 'clone'. Set new stack pointer to the same address. */ movi a2, SYS_ify (clone) @@ -176,8 +153,6 @@ HIDDEN_ENTRY (__vfork) movi a6, CLONE_VM | CLONE_VFORK | SIGCHLD syscall - RESTORE_PID(a5, a8, a2) - movi a3, -4096 bgeu a2, a3, 1f ret diff --git a/libpthread/nptl/allocatestack.c b/libpthread/nptl/allocatestack.c index 39ec857..ccf34d6 100644 --- a/libpthread/nptl/allocatestack.c +++ b/libpthread/nptl/allocatestack.c @@ -418,9 +418,6 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, THREAD_SYSINFO(pd) = THREAD_SELF_SYSINFO; #endif - /* The process ID is also the same as that of the caller. */ - pd->pid = THREAD_GETMEM (THREAD_SELF, pid); - /* Allocate the DTV for this thread. */ if (_dl_allocate_tls (TLS_TPADJ (pd)) == NULL) { @@ -556,9 +553,6 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, THREAD_SYSINFO(pd) = THREAD_SELF_SYSINFO; #endif - /* The process ID is also the same as that of the caller. */ - pd->pid = THREAD_GETMEM (THREAD_SELF, pid); - /* Allocate the DTV for this thread. */ if (_dl_allocate_tls (TLS_TPADJ (pd)) == NULL) { @@ -833,9 +827,6 @@ __reclaim_stacks (void) /* This marks the stack as free. */ curp->tid = 0; - /* The PID field must be initialized for the new process. */ - curp->pid = self->pid; - /* Account for the size of the stack. */ stack_cache_actsize += curp->stackblock_size; @@ -862,13 +853,6 @@ __reclaim_stacks (void) } } - /* Reset the PIDs in any cached stacks. */ - list_for_each (runp, &stack_cache) - { - struct pthread *curp = list_entry (runp, struct pthread, list); - curp->pid = self->pid; - } - /* Add the stack of all running threads to the cache. */ list_splice (&stack_used, &stack_cache); @@ -995,9 +979,9 @@ setxid_signal_thread (struct xid_command *cmdp, struct pthread *t) return 0; int val; + pid_t pid = getpid (); INTERNAL_SYSCALL_DECL (err); - val = INTERNAL_SYSCALL (tgkill, err, 3, THREAD_GETMEM (THREAD_SELF, pid), - t->tid, SIGSETXID); + val = INTERNAL_SYSCALL (tgkill, err, 3, pid, t->tid, SIGSETXID); /* If this failed, it must have had not started yet or else exited. */ if (!INTERNAL_SYSCALL_ERROR_P (val, err)) diff --git a/libpthread/nptl/descr.h b/libpthread/nptl/descr.h index 3fda681..06fdbee 100644 --- a/libpthread/nptl/descr.h +++ b/libpthread/nptl/descr.h @@ -152,9 +152,6 @@ struct pthread therefore stack) used' flag. */ pid_t tid; - /* Process ID - thread group ID in kernel speak. */ - pid_t pid; - /* List of robust mutexes the thread is holding. */ #ifdef __PTHREAD_MUTEX_HAVE_PREV void *robust_prev; diff --git a/libpthread/nptl/init.c b/libpthread/nptl/init.c index 0e1c60c..09220c2 100644 --- a/libpthread/nptl/init.c +++ b/libpthread/nptl/init.c @@ -64,24 +64,13 @@ static const char nptl_version[] __attribute_used__ = VERSION; static void sigcancel_handler (int sig, siginfo_t *si, void *ctx) { -#ifdef __ASSUME_CORRECT_SI_PID - /* Determine the process ID. It might be negative if the thread is - in the middle of a fork() call. */ - pid_t pid = THREAD_GETMEM (THREAD_SELF, pid); - if (__builtin_expect (pid < 0, 0)) - pid = -pid; -#endif /* Safety check. It would be possible to call this function for other signals and send a signal from another process. This is not correct and might even be a security problem. Try to catch as many incorrect invocations as possible. */ if (sig != SIGCANCEL -#ifdef __ASSUME_CORRECT_SI_PID - /* Kernels before 2.5.75 stored the thread ID and not the process - ID in si_pid so we skip this test. */ - || si->si_pid != pid -#endif + || si->si_pid != getpid() || si->si_code != SI_TKILL) return; @@ -125,24 +114,13 @@ struct xid_command *__xidcmd attribute_hidden; static void sighandler_setxid (int sig, siginfo_t *si, void *ctx) { -#ifdef __ASSUME_CORRECT_SI_PID - /* Determine the process ID. It might be negative if the thread is - in the middle of a fork() call. */ - pid_t pid = THREAD_GETMEM (THREAD_SELF, pid); - if (__builtin_expect (pid < 0, 0)) - pid = -pid; -#endif /* Safety check. It would be possible to call this function for other signals and send a signal from another process. This is not correct and might even be a security problem. Try to catch as many incorrect invocations as possible. */ if (sig != SIGSETXID -#ifdef __ASSUME_CORRECT_SI_PID - /* Kernels before 2.5.75 stored the thread ID and not the process - ID in si_pid so we skip this test. */ - || si->si_pid != pid -#endif + || si->si_pid != getpid() || si->si_code != SI_TKILL) return; @@ -191,7 +169,7 @@ __pthread_initialize_minimal_internal (void) /* Minimal initialization of the thread descriptor. */ struct pthread *pd = THREAD_SELF; INTERNAL_SYSCALL_DECL (err); - pd->pid = pd->tid = INTERNAL_SYSCALL (set_tid_address, err, 1, &pd->tid); + pd->tid = INTERNAL_SYSCALL (set_tid_address, err, 1, &pd->tid); THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]); THREAD_SETMEM (pd, user_stack, true); if (LLL_LOCK_INITIALIZER != 0) diff --git a/libpthread/nptl/pthreadP.h b/libpthread/nptl/pthreadP.h index 013b91d..4707f65 100644 --- a/libpthread/nptl/pthreadP.h +++ b/libpthread/nptl/pthreadP.h @@ -30,6 +30,8 @@ #include #include #include +#include +#include /* Atomic operations on TLS memory. */ @@ -310,23 +312,6 @@ __do_cancel (void) # define LIBC_CANCEL_HANDLED() /* Nothing. */ #endif -/* The signal used for asynchronous cancellation. */ -#define SIGCANCEL __SIGRTMIN - - -/* Signal needed for the kernel-supported POSIX timer implementation. - We can reuse the cancellation signal since we can distinguish - cancellation from timer expirations. */ -#define SIGTIMER SIGCANCEL - - -/* Signal used to implement the setuid et.al. functions. */ -#define SIGSETXID (__SIGRTMIN + 1) - -/* Used to communicate with signal handler. */ -extern struct xid_command *__xidcmd attribute_hidden; - - /* Internal prototypes. */ /* Thread list handling. */ diff --git a/libpthread/nptl/pthread_cancel.c b/libpthread/nptl/pthread_cancel.c index ee9a320..d3fd140 100644 --- a/libpthread/nptl/pthread_cancel.c +++ b/libpthread/nptl/pthread_cancel.c @@ -21,6 +21,7 @@ #include "pthreadP.h" #include "atomic.h" #include +#include #include @@ -74,10 +75,9 @@ pthread_cancel ( the thread is executing fork, it would have to happen in a signal handler. But this is no allowed, pthread_cancel is not guaranteed to be async-safe. */ + pid_t pid = getpid (); int val; - val = INTERNAL_SYSCALL (tgkill, err, 3, - THREAD_GETMEM (THREAD_SELF, pid), pd->tid, - SIGCANCEL); + val = INTERNAL_SYSCALL (tgkill, err, 3, pid, pd->tid, SIGCANCEL); if (INTERNAL_SYSCALL_ERROR_P (val, err)) result = INTERNAL_SYSCALL_ERRNO (val, err); diff --git a/libpthread/nptl/sysdeps/alpha/tcb-offsets.sym b/libpthread/nptl/sysdeps/alpha/tcb-offsets.sym index c21a791..1005621 100644 --- a/libpthread/nptl/sysdeps/alpha/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/alpha/tcb-offsets.sym @@ -10,5 +10,4 @@ #define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - sizeof(struct pthread)) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) diff --git a/libpthread/nptl/sysdeps/arc/tcb-offsets.sym b/libpthread/nptl/sysdeps/arc/tcb-offsets.sym index cbf0ae4..519a629 100644 --- a/libpthread/nptl/sysdeps/arc/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/arc/tcb-offsets.sym @@ -2,7 +2,6 @@ #include PTHREAD_TID offsetof (struct pthread, tid) -PTHREAD_PID offsetof (struct pthread, pid) MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) TLS_PRE_TCB_SIZE sizeof (struct pthread) TLS_TCB_SIZE sizeof(tcbhead_t) diff --git a/libpthread/nptl/sysdeps/arm/tcb-offsets.sym b/libpthread/nptl/sysdeps/arm/tcb-offsets.sym index 92cc441..bf9c0a1 100644 --- a/libpthread/nptl/sysdeps/arm/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/arm/tcb-offsets.sym @@ -7,5 +7,4 @@ #define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - sizeof(struct pthread)) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) diff --git a/libpthread/nptl/sysdeps/i386/tcb-offsets.sym b/libpthread/nptl/sysdeps/i386/tcb-offsets.sym index 69f9deb..990ac7a 100644 --- a/libpthread/nptl/sysdeps/i386/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/i386/tcb-offsets.sym @@ -3,7 +3,6 @@ RESULT offsetof (struct pthread, result) TID offsetof (struct pthread, tid) -PID offsetof (struct pthread, pid) CANCELHANDLING offsetof (struct pthread, cancelhandling) CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) diff --git a/libpthread/nptl/sysdeps/metag/tcb-offsets.sym b/libpthread/nptl/sysdeps/metag/tcb-offsets.sym index 753b72b..852b5cc 100644 --- a/libpthread/nptl/sysdeps/metag/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/metag/tcb-offsets.sym @@ -3,7 +3,6 @@ RESULT offsetof (struct pthread, result) TID offsetof (struct pthread, tid) -PID offsetof (struct pthread, pid) CANCELHANDLING offsetof (struct pthread, cancelhandling) CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) diff --git a/libpthread/nptl/sysdeps/microblaze/tcb-offsets.sym b/libpthread/nptl/sysdeps/microblaze/tcb-offsets.sym index 18afbee..614f0df 100644 --- a/libpthread/nptl/sysdeps/microblaze/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/microblaze/tcb-offsets.sym @@ -7,5 +7,4 @@ #define thread_offsetof(mem) (long)(offsetof (struct pthread, mem) - sizeof (struct pthread)) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) diff --git a/libpthread/nptl/sysdeps/mips/tcb-offsets.sym b/libpthread/nptl/sysdeps/mips/tcb-offsets.sym index e0e71dc..9ea25b9 100644 --- a/libpthread/nptl/sysdeps/mips/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/mips/tcb-offsets.sym @@ -7,5 +7,4 @@ #define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) diff --git a/libpthread/nptl/sysdeps/nds32/tcb-offsets.sym b/libpthread/nptl/sysdeps/nds32/tcb-offsets.sym index 3b9e101..6701626 100644 --- a/libpthread/nptl/sysdeps/nds32/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/nds32/tcb-offsets.sym @@ -7,6 +7,5 @@ #define thread_offsetof(mem) (long)(offsetof(struct pthread, mem) - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) diff --git a/libpthread/nptl/sysdeps/nios2/tcb-offsets.sym b/libpthread/nptl/sysdeps/nios2/tcb-offsets.sym index d9ae952..3cd8d98 100644 --- a/libpthread/nptl/sysdeps/nios2/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/nios2/tcb-offsets.sym @@ -9,6 +9,5 @@ # define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem)) MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) -PID_OFFSET thread_offsetof (pid) TID_OFFSET thread_offsetof (tid) POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) diff --git a/libpthread/nptl/sysdeps/powerpc/tcb-offsets.sym b/libpthread/nptl/sysdeps/powerpc/tcb-offsets.sym index 8ac133d..0bd16fb 100644 --- a/libpthread/nptl/sysdeps/powerpc/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/powerpc/tcb-offsets.sym @@ -12,7 +12,6 @@ #if TLS_MULTIPLE_THREADS_IN_TCB MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) #endif -PID thread_offsetof (pid) TID thread_offsetof (tid) POINTER_GUARD (offsetof (tcbhead_t, pointer_guard) - TLS_TCB_OFFSET - sizeof (tcbhead_t)) #ifndef __ASSUME_PRIVATE_FUTEX diff --git a/libpthread/nptl/sysdeps/pthread/createthread.c b/libpthread/nptl/sysdeps/pthread/createthread.c index ebfee16..550bf2c 100644 --- a/libpthread/nptl/sysdeps/pthread/createthread.c +++ b/libpthread/nptl/sysdeps/pthread/createthread.c @@ -91,6 +91,7 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr, if (__builtin_expect (stopped != 0, 0)) { INTERNAL_SYSCALL_DECL (err); + pid_t pid = getpid (); int res = 0; /* Set the affinity mask if necessary. */ @@ -105,9 +106,7 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr, send it the cancellation signal. */ INTERNAL_SYSCALL_DECL (err2); err_out: - (void) INTERNAL_SYSCALL (tgkill, err2, 3, - THREAD_GETMEM (THREAD_SELF, pid), - pd->tid, SIGCANCEL); + (void) INTERNAL_SYSCALL (tgkill, err2, 3, pid, pd->tid, SIGCANCEL); return (INTERNAL_SYSCALL_ERROR_P (res, err) ? INTERNAL_SYSCALL_ERRNO (res, err) diff --git a/libpthread/nptl/sysdeps/sh/tcb-offsets.sym b/libpthread/nptl/sysdeps/sh/tcb-offsets.sym index 753b72b..852b5cc 100644 --- a/libpthread/nptl/sysdeps/sh/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/sh/tcb-offsets.sym @@ -3,7 +3,6 @@ RESULT offsetof (struct pthread, result) TID offsetof (struct pthread, tid) -PID offsetof (struct pthread, pid) CANCELHANDLING offsetof (struct pthread, cancelhandling) CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) diff --git a/libpthread/nptl/sysdeps/sparc/tcb-offsets.sym b/libpthread/nptl/sysdeps/sparc/tcb-offsets.sym index 923af8a..f75d020 100644 --- a/libpthread/nptl/sysdeps/sparc/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/sparc/tcb-offsets.sym @@ -3,5 +3,4 @@ MULTIPLE_THREADS_OFFSET offsetof (tcbhead_t, multiple_threads) POINTER_GUARD offsetof (tcbhead_t, pointer_guard) -PID offsetof (struct pthread, pid) TID offsetof (struct pthread, tid) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/clone.S deleted file mode 100644 index eea1cbe..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S deleted file mode 100644 index 664cac4..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/alpha/vfork.S +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -#undef PSEUDO_PREPARE_ARGS -#define PSEUDO_PREPARE_ARGS \ - /* Load the current cached pid value across the vfork. */ \ - rduniq; \ - ldl a2, PID_OFFSET(v0); \ - mov v0, a1; \ - /* If the cached value is initialized (nonzero), then write \ - back its negation, or INT_MIN, to indicate that the pid \ - value is uninitialized in the the child, and in the window \ - between here and the point at which we restore the value. */ \ - ldah t0, -0x8000; \ - negl a2, t1; \ - cmovne a2, t1, t0; \ - stl t0, PID_OFFSET(v0); - -PSEUDO (__vfork, vfork, 0) - - /* If we're back in the parent, restore the saved pid. */ - beq v0, 1f - stl a2, PID_OFFSET(a1) -1: ret - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch index fa5d530..64f3a4f 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/Makefile.arch @@ -9,6 +9,3 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libc_linux_arch_SSRC-OMIT = waitpid.S - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/clone.S deleted file mode 100644 index 5fd1de3..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/clone.S +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#define RESET_PID -#include -#include -#include "../../../../../../../libc/sysdeps/linux/arc/clone.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arc/vfork.S deleted file mode 100644 index d29e05a..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arc/vfork.S +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (C) 2013 Synopsys, Inc. (www.synopsys.com) - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#define SAVE_PID -#define RESTORE_PID -#include -#include -#include "../../../../../../../libc/sysdeps/linux/arc/vfork.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch index 49d0684..55afe20 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/Makefile.arch @@ -9,11 +9,3 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libc_linux_arch_SSRC-OMIT = waitpid.S - -# We always compile it in arm mode because of SAVE_PID macro -# This macro should be alternatively implemented in THUMB -# assembly. -ASFLAGS-vfork.S = -marm -CFLAGS-OMIT-vfork.S = -mthumb diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/clone.S deleted file mode 100644 index 23227eb..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include -#include "../../../../../../../libc/sysdeps/linux/arm/clone.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S deleted file mode 100644 index b9e8cf8..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/arm/vfork.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -/* Save the PID value. */ -#define SAVE_PID \ - str lr, [sp, #-4]!; /* Save LR. */ \ - mov r0, #0xffff0fff; /* Point to the high page. */ \ - mov lr, pc; /* Save our return address. */ \ - sub pc, r0, #31; /* Jump to the TLS entry. */ \ - ldr lr, [sp], #4; /* Restore LR. */ \ - mov r2, r0; /* Save the TLS addr in r2. */ \ - ldr r3, [r2, #PID_OFFSET]; /* Load the saved PID. */ \ - rsbs r0, r3, #0; /* Negate it. */ \ - moveq r0, #0x80000000; /* Use 0x80000000 if it was 0. */ \ - str r0, [r2, #PID_OFFSET] /* Store the temporary PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - cmp r0, #0; /* If we are the parent... */ \ - strne r3, [r2, #PID_OFFSET] /* ... restore the saved PID. */ - -#include "../../../../../../../libc/sysdeps/linux/arm/vfork.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c b/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c index af40410..49806da 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/fork.c @@ -135,12 +135,6 @@ fork (void) pid_t ppid = THREAD_GETMEM (THREAD_SELF, tid); #endif - /* We need to prevent the getpid() code to update the PID field so - that, if a signal arrives in the child very early and the signal - handler uses getpid(), the value returned is correct. */ - pid_t parentpid = THREAD_GETMEM (THREAD_SELF, pid); - THREAD_SETMEM (THREAD_SELF, pid, -parentpid); - #ifdef ARCH_FORK pid = ARCH_FORK (); #else @@ -158,9 +152,6 @@ fork (void) if (__fork_generation_pointer != NULL) *__fork_generation_pointer += 4; - /* Adjust the PID field for the new process. */ - THREAD_SETMEM (self, pid, THREAD_GETMEM (self, tid)); - #if HP_TIMING_AVAIL /* The CPU clock of the thread and process have to be set to zero. */ hp_timing_t now; @@ -206,9 +197,6 @@ fork (void) { assert (THREAD_GETMEM (THREAD_SELF, tid) == ppid); - /* Restore the PID value. */ - THREAD_SETMEM (THREAD_SELF, pid, parentpid); - /* We execute this even if the 'fork' call failed. */ __UCLIBC_IO_MUTEX_UNLOCK_CANCEL_UNSAFE(_stdio_openlist_add_lock); diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c b/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c index 24abccc..03b1031 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/getpid.c @@ -25,41 +25,11 @@ # define __NR_getpid __NR_getxpid #endif -#ifndef NOT_IN_libc -static inline __attribute__((always_inline)) pid_t really_getpid (pid_t oldval); - -static inline __attribute__((always_inline)) pid_t -really_getpid (pid_t oldval) -{ - if (__builtin_expect (oldval == 0, 1)) - { - pid_t selftid = THREAD_GETMEM (THREAD_SELF, tid); - if (__builtin_expect (selftid != 0, 1)) - return selftid; - } - - INTERNAL_SYSCALL_DECL (err); - pid_t result = INTERNAL_SYSCALL (getpid, err, 0); - - /* We do not set the PID field in the TID here since we might be - called from a signal handler while the thread executes fork. */ - if (oldval == 0) - THREAD_SETMEM (THREAD_SELF, tid, result); - return result; -} -#endif - static pid_t __getpid (void) { -#ifdef NOT_IN_libc INTERNAL_SYSCALL_DECL (err); pid_t result = INTERNAL_SYSCALL (getpid, err, 0); -#else - pid_t result = THREAD_GETMEM (THREAD_SELF, pid); - if (__builtin_expect (result <= 0, 0)) - result = really_getpid (result); -#endif return result; } weak_alias(__getpid, getpid) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch index be07d9c..ee38a69 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/Makefile.arch @@ -5,11 +5,9 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_linux_arch_SSRC = clone.S pthread_spin_unlock.S pthread_once.S +libpthread_linux_arch_SSRC = pthread_spin_unlock.S pthread_once.S libpthread_linux_arch_CSRC = pthread_spin_init.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S ASFLAGS += -DUSE___THREAD - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/clone.S deleted file mode 100644 index 9c7c464..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S deleted file mode 100644 index 074f0f0..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/vfork.S +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright (C) 1999,2002,2004,2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -/* Save the PID value. */ -#define SAVE_PID \ - movl %gs:PID, %edx; \ - movl %edx, %eax; \ - negl %eax; \ - jne 1f; \ - movl $0x80000000, %eax; \ -1: movl %eax, %gs:PID - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - testl %eax, %eax; \ - je 1f; \ - movl %edx, %gs:PID; \ -1: - - -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch index 0f4d8d3..4c85f0a 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/Makefile.arch @@ -9,8 +9,5 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libc_linux_arch_SSRC-OMIT = waitpid.S CFLAGS += $(SSP_ALL_CFLAGS) - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S deleted file mode 100644 index f5c5c7c..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/clone.S +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (C) 2013 Imagination Technologies Ltd. - * - * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball. - */ - -#define RESET_PID -#include -#include "../../../../../../../libc/sysdeps/linux/metag/clone.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S deleted file mode 100644 index 7b369b1..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/metag/vfork.S +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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; see the file COPYING.LIB. If - not, see .  */ - -#include -#include - -#ifdef __PIC__ -#define __VFORK_METAG_LOAD_TP ___metag_load_tp@PLT -#else -#define __VFORK_METAG_LOAD_TP ___metag_load_tp -#endif - -/* Save the PID value. */ -#define SAVE_PID \ - SETL [A0StP++], D0FrT, D1RtP; \ - CALLR D1RtP, __VFORK_METAG_LOAD_TP; \ - SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \ - GETD D0FrT, [D0Re0 + #PID]; \ - NEGS D0FrT, D0FrT; \ - BNZ 1f; \ - MOVT D0FrT, #0x8000; \ -1: SETD [D0Re0 + #PID], D0FrT; \ - GETL D0FrT, D1RtP, [--A0StP]; - -#define RESTORE_PID \ - CMP D0Re0, #0; \ - BEQ 1f; \ - MSETL [A0StP++], D0Re0, D0FrT; \ - CALLR D1RtP, __VFORK_METAG_LOAD_TP; \ - SUB D0Re0, D0Re0, #TLS_PRE_TCB_SIZE; \ - GETD D0FrT, [D0Re0 + #PID]; \ - NEG D0FrT, D0FrT; \ - MOVT D1Re0, #0x8000; \ - CMP D0FrT, D1Re0; \ - XOREQ D0FrT, D0FrT, D0FrT; \ - SETD [D0Re0 + #PID], D0FrT; \ - GETL D0FrT, D1RtP, [--A0StP]; \ - GETL D0Re0, D1Re0, [--A0StP]; \ -1: - -#include <../../../../../../../libc/sysdeps/linux/metag/vfork.S> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/Makefile.arch index 77707a0..44a0053 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/Makefile.arch @@ -5,4 +5,3 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/clone.S deleted file mode 100644 index faa78d9..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/clone.S +++ /dev/null @@ -1,4 +0,0 @@ -#define RESET_PID -#include -#include -#include "../../../../../../../libc/sysdeps/linux/microblaze/clone.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/vfork.S deleted file mode 100644 index 4336717..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/microblaze/vfork.S +++ /dev/null @@ -1,5 +0,0 @@ -#define SAVE_PID -#define RESTORE_PID -#include -#include -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch index 565efd4..402c5ff 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/Makefile.arch @@ -5,13 +5,8 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_linux_arch_SSRC = clone.S libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -ifneq ($(CONFIG_MIPS_O32_ABI),y) -libc_linux_arch_SSRC-OMIT = waitpid.S -endif -ASFLAGS += -DUSE___THREAD +ASFLAGS += -DUSE___THREAD diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/clone.S deleted file mode 100644 index 858877f..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-clone.S deleted file mode 100644 index add4055..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/pt-clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include <../../../../../../../libc/sysdeps/linux/mips/clone.S> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S deleted file mode 100644 index a23d99c..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/mips/vfork.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2005, 2006 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -/* Save the PID value. */ -#define SAVE_PID \ - READ_THREAD_POINTER(v1); /* Get the thread pointer. */ \ - lw a2, PID_OFFSET(v1); /* Load the saved PID. */ \ - subu a2, $0, a2; /* Negate it. */ \ - bnez a2, 1f; /* If it was zero... */ \ - lui a2, 0x8000; /* use 0x80000000 instead. */ \ -1: sw a2, PID_OFFSET(v1); /* Store the temporary PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - beqz v0, 1f; /* If we are the parent... */ \ - READ_THREAD_POINTER(v1); /* Get the thread pointer. */ \ - lw a2, PID_OFFSET(v1); /* Load the saved PID. */ \ - subu a2, $0, a2; /* Re-negate it. */ \ - lui a0, 0x8000; /* Load 0x80000000... */ \ - bne a2, a0, 2f; /* ... compare against it... */ \ - li a2, 0; /* ... use 0 instead. */ \ -2: sw a2, PID_OFFSET(v1); /* Restore the PID. */ \ -1: - -#include <../../../../../../../libc/sysdeps/linux/mips/vfork.S> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/Makefile.arch index 3b8935c..94aa25f 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/Makefile.arch @@ -5,8 +5,5 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libc_linux_arch_SSRC-OMIT = waitpid.S CFLAGS += $(SSP_ALL_CFLAGS) - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/clone.S deleted file mode 100644 index 94b39fc..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/clone.S +++ /dev/null @@ -1,4 +0,0 @@ -/* We want an #include_next, but we are the main source file. - So, #include ourselves and in that incarnation we can use #include_next. */ -# define RESET_PID -# include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/vfork.S deleted file mode 100644 index f11f76a..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nds32/vfork.S +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (C) 2016-2017 Andes Technology, Inc. - * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. - */ - -/* Copyright (C) 2013 Free Software Foundation, Inc. - - 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 - -/* Save the PID value. */ -#define SAVE_PID \ - lwi $r1, [$r25 + PID_OFFSET];/* Get the thread pointer. */ \ - subri $r1, $r1, 0x0; /* Negate it. */ \ - bnez $r1, 1f; /* If it was zero... */ \ - sethi $r1, 0x80000; /* use 0x80000000 instead. */ \ -1: swi $r1, [$r25 + PID_OFFSET];/* Store the temporary PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - beqz $r0, 1f; /* If we are the parent... */ \ - lwi $r1, [$r25 + PID_OFFSET];/* Get the thread pointer. */ \ - subri $r1, $r1, 0x0; /* Re-negate it. */ \ - sethi $r2, 0x80000; /* Load 0x80000000... */ \ - bne $r1, $r2, 2f; /* ... compare against it... */ \ - movi $r1, 0; /* ... use 0 instead. */ \ -2: swi $r1, [$r25 + PID_OFFSET];/* Restore the PID. */ \ -1: - -#include <../../../../../../../libc/sysdeps/linux/nds32/vfork.S> diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/Makefile.arch index 26f51fb..1295c34 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/Makefile.arch @@ -5,5 +5,3 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S -libc_linux_arch_SSRC-OMIT = waitpid.S diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/clone.S deleted file mode 100644 index 544974f..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include -#include "../../../../../../../libc/sysdeps/linux/nios2/clone.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/vfork.S deleted file mode 100644 index 6ee414c..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/nios2/vfork.S +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -/* Save the PID value. */ -#define SAVE_PID \ - str lr, [sp, #-4]!; /* Save LR. */ \ - mov r0, #0xffff0fff; /* Point to the high page. */ \ - mov lr, pc; /* Save our return address. */ \ - sub pc, r0, #31; /* Jump to the TLS entry. */ \ - ldr lr, [sp], #4; /* Restore LR. */ \ - mov r2, r0; /* Save the TLS addr in r2. */ \ - ldr r3, [r2, #PID_OFFSET]; /* Load the saved PID. */ \ - rsbs r0, r3, #0; /* Negate it. */ \ - moveq r0, #0x80000000; /* Use 0x80000000 if it was 0. */ \ - str r0, [r2, #PID_OFFSET] /* Store the temporary PID. */ - -/* Restore the old PID value in the parent. */ -#define RESTORE_PID \ - cmp r0, #0; /* If we are the parent... */ \ - strne r3, [r2, #PID_OFFSET] /* ... restore the saved PID. */ - -#include "../../../../../../../libc/sysdeps/linux/nios2/vfork.S" diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/nptl-signals.h b/libpthread/nptl/sysdeps/unix/sysv/linux/nptl-signals.h new file mode 100644 index 0000000..43aa1a9 --- /dev/null +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/nptl-signals.h @@ -0,0 +1,84 @@ +/* Special use of signals in NPTL internals. Linux version. + Copyright (C) 2014-2017 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + 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 + +/* The signal used for asynchronous cancelation. */ +#define SIGCANCEL __SIGRTMIN + + +/* Signal needed for the kernel-supported POSIX timer implementation. + We can reuse the cancellation signal since we can distinguish + cancellation from timer expirations. */ +#define SIGTIMER SIGCANCEL + + +/* Signal used to implement the setuid et.al. functions. */ +#define SIGSETXID (__SIGRTMIN + 1) + + +/* Return is sig is used internally. */ +static inline int +__nptl_is_internal_signal (int sig) +{ + return (sig == SIGCANCEL) || (sig == SIGTIMER) || (sig == SIGSETXID); +} + +/* Remove internal glibc signal from the mask. */ +static inline void +__nptl_clear_internal_signals (sigset_t *set) +{ + __sigdelset (set, SIGCANCEL); + __sigdelset (set, SIGTIMER); + __sigdelset (set, SIGSETXID); +} + +#define SIGALL_SET \ + ((__sigset_t) { .__val = {[0 ... _SIGSET_NWORDS-1 ] = -1 } }) + +/* Block all signals, including internal glibc ones. */ +static inline int +__libc_signal_block_all (sigset_t *set) +{ + INTERNAL_SYSCALL_DECL (err); + return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &SIGALL_SET, + set, _NSIG / 8); +} + +/* Block all application signals (excluding internal glibc ones). */ +static inline int +__libc_signal_block_app (sigset_t *set) +{ + sigset_t allset = SIGALL_SET; + __nptl_clear_internal_signals (&allset); + INTERNAL_SYSCALL_DECL (err); + return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_BLOCK, &allset, set, + _NSIG / 8); +} + +/* Restore current process signal mask. */ +static inline int +__libc_signal_restore_set (const sigset_t *set) +{ + INTERNAL_SYSCALL_DECL (err); + return INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, set, NULL, + _NSIG / 8); +} + +/* Used to communicate with signal handler. */ +extern struct xid_command *__xidcmd attribute_hidden; diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch index 2abb1d2..689e029 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/Makefile.arch @@ -9,7 +9,5 @@ libpthread_linux_arch_SSRC = libpthread_linux_arch_CSRC = pthread_once.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S ASFLAGS += -DUSE___THREAD - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/clone.S deleted file mode 100644 index 675a997..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/clone.S +++ /dev/null @@ -1,9 +0,0 @@ -/* We want an #include_next, but we are the main source file. - So, #include ourselves and in that incarnation we can use #include_next. */ -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else -# define RESET_PID -# include_next -#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/vfork.S deleted file mode 100644 index 28c59fd..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/powerpc/vfork.S +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - 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 -#define _ERRNO_H 1 -#include -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - lwz 0,PID(2) - cmpwi 0,0,0 - neg 0,0 - bne- 0,1f - lis 0,0x8000 -1: stw 0,PID(2) - - DO_CALL (SYS_ify (vfork)) - - cmpwi 1,3,0 - beqlr- 1 - - lwz 0,PID(2) - /* Cannot use clrlwi. here, because cr0 needs to be preserved - until PSEUDO_RET. */ - clrlwi 4,0,1 - cmpwi 1,4,0 - beq- 1,1f - neg 4,0 -1: stw 4,PID(2) - - PSEUDO_RET - -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) -libc_hidden_weak(vfork) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c index e27ab51..1cce9bf 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_kill.c @@ -57,9 +57,10 @@ __pthread_kill ( function would have to be called while the thread is executing fork, it would have to happen in a signal handler. But this is no allowed, pthread_kill is not guaranteed to be async-safe. */ + + pid_t pid = getpid (); int val; - val = INTERNAL_SYSCALL (tgkill, err, 3, THREAD_GETMEM (THREAD_SELF, pid), - tid, signo); + val = INTERNAL_SYSCALL (tgkill, err, 3, pid, tid, signo); return (INTERNAL_SYSCALL_ERROR_P (val, err) ? INTERNAL_SYSCALL_ERRNO (val, err) : 0); diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c index 2b7fa14..0bd3b79 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c @@ -53,26 +53,22 @@ pthread_sigqueue ( if (signo == SIGCANCEL || signo == SIGTIMER || signo == SIGSETXID) return EINVAL; + pid_t pid = getpid (); + /* Set up the siginfo_t structure. */ siginfo_t info; memset (&info, '\0', sizeof (siginfo_t)); info.si_signo = signo; info.si_code = SI_QUEUE; - info.si_pid = THREAD_GETMEM (THREAD_SELF, pid); + info.si_pid = pid; info.si_uid = getuid (); info.si_value = value; /* We have a special syscall to do the work. */ INTERNAL_SYSCALL_DECL (err); - /* One comment: The PID field in the TCB can temporarily be changed - (in fork). But this must not affect this code here. Since this - function would have to be called while the thread is executing - fork, it would have to happen in a signal handler. But this is - no allowed, pthread_sigqueue is not guaranteed to be async-safe. */ int val = INTERNAL_SYSCALL (rt_tgsigqueueinfo, err, 4, - THREAD_GETMEM (THREAD_SELF, pid), - tid, signo, &info); + pid, tid, signo, &info); return (INTERNAL_SYSCALL_ERROR_P (val, err) ? INTERNAL_SYSCALL_ERRNO (val, err) : 0); diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c b/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c index 6b15938..f74cd0b 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/raise.c @@ -20,37 +20,32 @@ #include #include #include -#include - +#include int raise (int sig) { - struct pthread *pd = THREAD_SELF; - pid_t pid = THREAD_GETMEM (pd, pid); - pid_t selftid = THREAD_GETMEM (pd, tid); - if (selftid == 0) - { - /* This system call is not supposed to fail. */ -#ifdef INTERNAL_SYSCALL - INTERNAL_SYSCALL_DECL (err); - selftid = INTERNAL_SYSCALL (gettid, err, 0); -#else - selftid = INLINE_SYSCALL (gettid, 0); -#endif - THREAD_SETMEM (pd, tid, selftid); - - /* We do not set the PID field in the TID here since we might be - called from a signal handler while the thread executes fork. */ - pid = selftid; - } - else - /* raise is an async-safe function. It could be called while the - fork/vfork function temporarily invalidated the PID field. Adjust for - that. */ - if (__builtin_expect (pid <= 0, 0)) - pid = (pid & INT_MAX) == 0 ? selftid : -pid; - - return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig); + /* rt_sigprocmask may fail if: + + 1. sigsetsize != sizeof (sigset_t) (EINVAL) + 2. a failure in copy from/to user space (EFAULT) + 3. an invalid 'how' operation (EINVAL) + + The first case is already handle in glibc syscall call by using the arch + defined _NSIG. Second case is handled by using a stack allocated mask. + The last one should be handled by the block/unblock functions. */ + + sigset_t set; + __libc_signal_block_app (&set); + + INTERNAL_SYSCALL_DECL (err); + pid_t pid = INTERNAL_SYSCALL (getpid, err, 0); + pid_t tid = INTERNAL_SYSCALL (gettid, err, 0); + + int ret = INLINE_SYSCALL (tgkill, 3, pid, tid, sig); + + __libc_signal_restore_set (&set); + + return ret; } libc_hidden_def (raise) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch index c07498f..e3b2f7c 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/Makefile.arch @@ -13,7 +13,5 @@ libpthread_linux_arch_SSRC = pthread_once.S pthread_rwlock_wrlock.S \ sem_post.S sem_timedwait.S sem_trywait.S sem_wait.S libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S ASFLAGS += -DUSE___THREAD - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/clone.S deleted file mode 100644 index 918d579..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S deleted file mode 100644 index 5ea1bc1..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sh/vfork.S +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 -#define _ERRNO_H 1 -#include -#include - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -ENTRY (__vfork) - /* Save the PID value. */ - stc gbr, r2 - mov.w .L2, r0 - mov.l @(r0,r2), r4 - neg r4, r1 - tst r1, r1 - bf 1f - mov #1, r1 - rotr r1 -1: - mov.l r1, @(r0,r2) - - mov.w .L1, r3 - trapa #0x10 - mov r0, r1 - - /* Restore the old PID value in the parent. */ - tst r0, r0 - bt.s 2f - stc gbr, r2 - mov.w .L2, r0 - mov.l r4, @(r0,r2) - mov r1, r0 -2: - mov #-12, r2 - shad r2, r1 - not r1, r1 // r1=0 means r0 = -1 to -4095 - tst r1, r1 // i.e. error in linux - bf .Lpseudo_end - SYSCALL_ERROR_HANDLER -.Lpseudo_end: - rts - nop -.L1: - .word __NR_vfork -.L2: - .word PID - TLS_PRE_TCB_SIZE - .align 2 -PSEUDO_END (__vfork) -hidden_def (vfork) - -weak_alias (__vfork, vfork) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch index f93ad4d..5253f1c 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/Makefile.arch @@ -5,12 +5,9 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_linux_arch_SSRC = clone.S libpthread_linux_arch_CSRC = pthread_once.c lowlevellock.c \ pthread_barrier_init.c pthread_barrier_wait.c pthread_barrier_destroy.c libc_linux_arch_CSRC = fork.c libc-lowlevellock.c -libc_linux_arch_SSRC = clone.S vfork.S ASFLAGS += -DUSE___THREAD - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S deleted file mode 100644 index a6142aa..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/clone.S +++ /dev/null @@ -1,2 +0,0 @@ -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S deleted file mode 100644 index 71f0662..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/sparc/vfork.S +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Jakub Jelinek , 2004. - - 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 - - .text - .globl __syscall_error -ENTRY(__vfork) - ld [%g7 + PID], %o5 - cmp %o5, 0 - bne 1f - sub %g0, %o5, %o4 - sethi %hi(0x80000000), %o4 -1: st %o4, [%g7 + PID] - - LOADSYSCALL(vfork) - ta 0x10 - bcc 2f - mov %o7, %g1 - st %o5, [%g7 + PID] - call __syscall_error - mov %g1, %o7 -2: sub %o1, 1, %o1 - andcc %o0, %o1, %o0 - bne,a 1f - st %o5, [%g7 + PID] -1: retl - nop -END(__vfork) - -libc_hidden_def (vfork) -weak_alias (__vfork, vfork) diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch index b48f4cb..f3883db 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/Makefile.arch @@ -5,7 +5,7 @@ # Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. # -libpthread_linux_arch_SSRC = clone.S pthread_once.S \ +libpthread_linux_arch_SSRC = pthread_once.S \ lowlevellock.S pthread_barrier_wait.S pthread_cond_signal.S pthread_cond_broadcast.S \ sem_post.S sem_timedwait.S lowlevelrobustlock.S \ sem_trywait.S sem_wait.S pthread_rwlock_rdlock.S pthread_rwlock_wrlock.S \ @@ -14,9 +14,7 @@ libpthread_linux_arch_SSRC = clone.S pthread_once.S \ libpthread_linux_arch_CSRC = pthread_spin_init.c libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S libc-cancellation.S libc-lowlevellock.S -libc_linux_arch_SSRC-OMIT = waitpid.S +libc_linux_arch_SSRC = libc-cancellation.S libc-lowlevellock.S librt_linux_arch_SSRC = librt-cancellation.S ASFLAGS += -DUSE___THREAD - diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/clone.S deleted file mode 100644 index efbaee3..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#include -#define RESET_PID -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S deleted file mode 100644 index f3280b8..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/x86_64/vfork.S +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - . */ - -/* We want an #include_next, but we are the main source file. - So, #include ourselves and in that incarnation we can use #include_next. */ -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include -#else - -# include - -# define SAVE_PID \ - movl %fs:PID, %esi; \ - movl $0x80000000, %ecx; \ - movl %esi, %edx; \ - negl %edx; \ - cmove %ecx, %edx; \ - movl %edx, %fs:PID - -# define RESTORE_PID \ - testq %rax, %rax; \ - je 1f; \ - movl %esi, %fs:PID; \ -1: - -# include_next -#endif diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch index 7014c3f..6f17348 100644 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch +++ b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/Makefile.arch @@ -2,13 +2,10 @@ # Licensed under the LGPL v2.1, see the file COPYING and LICENSE. libc_linux_arch_CSRC = fork.c -libc_linux_arch_SSRC = clone.S vfork.S libpthread_linux_arch_CSRC = pthread_once.c libpthread_linux_arch_SSRC = CFLAGS-OMIT-fork.c = -DNOT_IN_libc -DIS_IN_libpthread -ASFLAGS-clone.S = -D_LIBC_REENTRANT -ASFLAGS-vfork.S = -D_LIBC_REENTRANT ASFLAGS-syscall.S = -D_LIBC_REENTRANT ASFLAGS-mmap.S = -D_LIBC_REENTRANT diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S deleted file mode 100644 index 539b9ef..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include -#include diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S b/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S deleted file mode 100644 index 46eb76d..0000000 --- a/libpthread/nptl/sysdeps/unix/sysv/linux/xtensa/vfork.S +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2013 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - 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 - -/* - Save the PID value, save 0x80000000 if PID was 0. - Registers a2 and a3 are available; ar should return the PID and as threadptr - */ - -#define SAVE_PID(pid,tp,ar,as) \ - rur tp, threadptr; \ - movi ar, TLS_PRE_TCB_SIZE; \ - sub tp, tp, ar; \ - l32i pid, tp, PID; \ - neg ar, pid; \ - movi as, 0x80000000; \ - moveqz ar, as, ar; \ - s32i ar, tp, PID; \ - -/* - Restore the PID value, restore to 0 if saved value was 0x80000000 - Return value from the syscall is in a2. - */ -#define RESTORE_PID(pid,tp,res) \ - beqz res, 1f; \ - s32i pid, tp, PID; \ -1: - -/* - Special version for call12, where we don't have enough registers - available to preserve the original PID. - */ -#define RESTORE_PID12(ar, as, at) \ - rur as, threadptr; \ - movi ar, TLS_PRE_TCB_SIZE; \ - sub as, as, ar; \ - l32i ar, as, PID; \ - movi at, 0x80000000; \ - sub at, at, ar; \ - neg ar, ar; \ - moveqz ar, at, at; \ - s32i ar, as, PID; - -#include diff --git a/libpthread/nptl/sysdeps/x86_64/tcb-offsets.sym b/libpthread/nptl/sysdeps/x86_64/tcb-offsets.sym index cf86375..d908521 100644 --- a/libpthread/nptl/sysdeps/x86_64/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/x86_64/tcb-offsets.sym @@ -3,7 +3,6 @@ RESULT offsetof (struct pthread, result) TID offsetof (struct pthread, tid) -PID offsetof (struct pthread, pid) CANCELHANDLING offsetof (struct pthread, cancelhandling) CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) CLEANUP offsetof (struct pthread, cleanup) diff --git a/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym b/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym index 4c86876..54eae20 100644 --- a/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym +++ b/libpthread/nptl/sysdeps/xtensa/tcb-offsets.sym @@ -3,5 +3,4 @@ TLS_PRE_TCB_SIZE sizeof (struct pthread) MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -PID offsetof (struct pthread, pid) TID offsetof (struct pthread, tid) -- 2.1.4