From patchwork Wed Jun 23 18:43:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 43975 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 50087393F816 for ; Wed, 23 Jun 2021 18:44:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 50087393F816 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1624473861; bh=Yiv2bSJX2/Y8hXeKnQuOjkrh+krvUDfuGfei2J/tZ1M=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=O1mUei0RWOlpigq9Y3+9DeFoCsaX3In53evTdgG2KNZlMWBubkZzJ6HBANsh5NpCH oX4/pClIMOR47Mse1MlS1u3EEYiY031eIr8xCWssokvvx+ZJxqBKn1s42jIa7wsawn IrhzDNb5wJB/aWzEqtlFGBNBlf3Ms+VkMG6L8ot8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-qk1-x735.google.com (mail-qk1-x735.google.com [IPv6:2607:f8b0:4864:20::735]) by sourceware.org (Postfix) with ESMTPS id DA1173851C3D for ; Wed, 23 Jun 2021 18:43:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DA1173851C3D Received: by mail-qk1-x735.google.com with SMTP id c138so7775555qkg.5 for ; Wed, 23 Jun 2021 11:43:58 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=Yiv2bSJX2/Y8hXeKnQuOjkrh+krvUDfuGfei2J/tZ1M=; b=rMGZ/9sXA5OxJQjBY8EJCUZ4CeZ4dss3j4Q4CqHvQag70PEvnlapgUskUVeXGVMNVN YcFdTQj6N7DCpvfCztD6Ocpgy+QMIT/kT4DZ2Z0Anxp/8HkuDEnX65eSs7pttNsfKkd5 QHc7KY3sk/1xD1SDG4CxvelHUvzNmhi1BL8aDJftrQjmWr2BPolX7AJMKDBw0azH0iLq lRYUS2L36aO2sq1gIov+xK4Ypzdhi/lDPRdOK3NEmeY2jG2jwx7IvjhubWbtKAs0M6n7 7TCRjMUJzX50LXpvxSNE7G/UhwR70f10/Hn1On9tWsY0n11BrDYGVyrf4fu/vMUR4LlD eJFg== X-Gm-Message-State: AOAM5310z4Ui6+w//LSNmm6DeG0luxmDvW3I1S1LO5yLxt39300rthKz GqhS/NrIaHol8jhtwm1VTkDkhkRTTquAFA== X-Google-Smtp-Source: ABdhPJwEkYqn7gOHkf0OQgwedbmzLcSagFf/mV5DovE1w2jJ3OR4R6EDhYE9UswmQyihqrCqsYzbEw== X-Received: by 2002:a37:2e86:: with SMTP id u128mr1535804qkh.26.1624473838177; Wed, 23 Jun 2021 11:43:58 -0700 (PDT) Received: from birita.. ([177.194.59.218]) by smtp.gmail.com with ESMTPSA id j4sm500664qtr.72.2021.06.23.11.43.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Jun 2021 11:43:57 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v4 0/4] Add _Fork implementation Date: Wed, 23 Jun 2021 15:43:50 -0300 Message-Id: <20210623184354.395316-1-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spam-Status: No, score=-6.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Austin Group issue 62 [1] dropped the async-signal-safe requirement for fork and provided a async-signal-safe _Fork replacement that does not run the atfork handlers. It will be included in the next POSIX standard. It allow close a long standing issue that ask fork to be AS-safe (BZ#4737) now that we provide a similar call. The first patch consolidates the fork implementation between Linux and Hurd, moving the arch-specifics bits to the system specific fork.h header. The process spawn core is moved to the internal symbol _Fork, which will be exported in the final patch. Second patch a minor issue with atfork handler. Third patch consolidates the pthread_atfork implementation over Linux and Hurd. The final patch exports the new _Fork symbol and add some regression tests. *** BLURB HERE *** Adhemerval Zanella (4): posix: Consolidate fork implementation posix: Do not clobber errno by atfork handlers Consolidate pthread_atfork posix: Add _Fork [BZ #4737] NEWS | 8 + htl/Makefile | 4 +- include/unistd.h | 4 + malloc/Makefile | 3 + malloc/tst-mallocfork3.c | 213 ++++++++++++++ manual/process.texi | 39 ++- nptl/Makefile | 1 - posix/Makefile | 6 +- posix/Versions | 1 + posix/_Fork.c | 34 +++ posix/fork.c | 124 +++++++- posix/tst-_Fork.c | 218 +++++++++++++++ posix/unistd.h | 7 + .../{htl/old_pt-atfork.c => generic/fork.h} | 26 +- sysdeps/htl/pt-atfork.c | 41 --- sysdeps/htl/pthread_atfork_compat.h | 4 + sysdeps/mach/hurd/{fork.c => _Fork.c} | 21 +- sysdeps/nptl/_Fork.c | 52 ++++ sysdeps/nptl/fork.c | 264 ------------------ sysdeps/nptl/fork.h | 148 ++++++++++ sysdeps/nptl/pthread_atfork_compat.h | 4 + sysdeps/pthread/Makefile | 4 +- {nptl => sysdeps/pthread}/pthread_atfork.c | 1 + .../pthread/pthread_atfork_compat.c | 8 +- sysdeps/unix/sysv/linux/aarch64/libc.abilist | 1 + sysdeps/unix/sysv/linux/alpha/libc.abilist | 1 + sysdeps/unix/sysv/linux/arc/libc.abilist | 1 + sysdeps/unix/sysv/linux/arch-fork.h | 3 + sysdeps/unix/sysv/linux/arm/be/libc.abilist | 1 + sysdeps/unix/sysv/linux/arm/le/libc.abilist | 1 + sysdeps/unix/sysv/linux/csky/libc.abilist | 1 + sysdeps/unix/sysv/linux/hppa/libc.abilist | 1 + sysdeps/unix/sysv/linux/i386/libc.abilist | 1 + sysdeps/unix/sysv/linux/ia64/libc.abilist | 1 + .../sysv/linux/m68k/coldfire/libc.abilist | 1 + .../unix/sysv/linux/m68k/m680x0/libc.abilist | 1 + .../sysv/linux/microblaze/be/libc.abilist | 1 + .../sysv/linux/microblaze/le/libc.abilist | 1 + .../sysv/linux/mips/mips32/fpu/libc.abilist | 1 + .../sysv/linux/mips/mips32/nofpu/libc.abilist | 1 + .../sysv/linux/mips/mips64/n32/libc.abilist | 1 + .../sysv/linux/mips/mips64/n64/libc.abilist | 1 + sysdeps/unix/sysv/linux/nios2/libc.abilist | 1 + .../linux/powerpc/powerpc32/fpu/libc.abilist | 1 + .../powerpc/powerpc32/nofpu/libc.abilist | 1 + .../linux/powerpc/powerpc64/be/libc.abilist | 1 + .../linux/powerpc/powerpc64/le/libc.abilist | 1 + .../unix/sysv/linux/riscv/rv32/libc.abilist | 1 + .../unix/sysv/linux/riscv/rv64/libc.abilist | 1 + .../unix/sysv/linux/s390/s390-32/libc.abilist | 1 + .../unix/sysv/linux/s390/s390-64/libc.abilist | 1 + sysdeps/unix/sysv/linux/sh/be/libc.abilist | 1 + sysdeps/unix/sysv/linux/sh/le/libc.abilist | 1 + .../sysv/linux/sparc/sparc32/libc.abilist | 1 + .../sysv/linux/sparc/sparc64/libc.abilist | 1 + .../unix/sysv/linux/x86_64/64/libc.abilist | 1 + .../unix/sysv/linux/x86_64/x32/libc.abilist | 1 + 57 files changed, 898 insertions(+), 372 deletions(-) create mode 100644 malloc/tst-mallocfork3.c create mode 100644 posix/_Fork.c create mode 100644 posix/tst-_Fork.c rename sysdeps/{htl/old_pt-atfork.c => generic/fork.h} (61%) delete mode 100644 sysdeps/htl/pt-atfork.c create mode 100644 sysdeps/htl/pthread_atfork_compat.h rename sysdeps/mach/hurd/{fork.c => _Fork.c} (98%) create mode 100644 sysdeps/nptl/_Fork.c delete mode 100644 sysdeps/nptl/fork.c create mode 100644 sysdeps/nptl/fork.h create mode 100644 sysdeps/nptl/pthread_atfork_compat.h rename {nptl => sysdeps/pthread}/pthread_atfork.c (98%) rename nptl/old_pthread_atfork.c => sysdeps/pthread/pthread_atfork_compat.c (84%)