From patchwork Thu Oct 7 20:08:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 45969 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 912DD3857C5F for ; Thu, 7 Oct 2021 20:10:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 912DD3857C5F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1633637446; bh=ADYWUcuEmFh/jkfKaS0hGnFCxa9sByTobzUGAonHdS0=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=XcnEqUEcuh2udTAGK8GknOptQ0KVJh7mNHFWASmLPrU3R6v6s36bN9d3YgxNCweJG UciC+AOIAfAP9Y3ugL9Gt3tVJ6fLGhWiZ4fsRB0WXZBNFNdjuniDYKpTcNupNxm16H exN3os1WxF3vyb3ysdKi+XUo6tUvlWpaZUZ5CpAc= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by sourceware.org (Postfix) with ESMTPS id CCAF63858431 for ; Thu, 7 Oct 2021 20:08:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CCAF63858431 Received: by mail-pl1-x631.google.com with SMTP id c4so4657413pls.6 for ; Thu, 07 Oct 2021 13:08:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ADYWUcuEmFh/jkfKaS0hGnFCxa9sByTobzUGAonHdS0=; b=JFCuwDTccSFrDP+MWUzUytWYg6NyqqzVj0Ra+vPbbnW0U4aflD0dyQOEtIX01y/CpS 9XHqGIktTnfPkP8eYPNKxSl6Mo5m592iF/PfUDPjQ3BJi5f0tu5J2ohyS31FKz1UxFzn eHc2db6N8gI4RLV232qBBiDXH0BcYZaSEWuQHcXhT8xLPEEr171uaZ0eRL58B30l9/q6 Wzew/IU7XNVD+RE5ACUWP0DZ0sPFshr044gmdHKzs6UnnaKp0OXz12Qa8Vh5okW295Za M7VYF3xsnVmD+eJQ/KNJ96p4WxyB6jS0bKX7vOeYxWwM+nAJrBitQfEDP32ac2zAKhP5 s3VQ== X-Gm-Message-State: AOAM532/z/vzxQPA3ZyaHcwfray0zI5RIUgnEHnu0PazPC7gtyihPVV4 y8X8ahHo4LS1FmJFez47MdlVpL1eiEQ= X-Google-Smtp-Source: ABdhPJxorBYjMgcOP4X3HSZCuGh6HSCZNeLAmrEzmi7Jjx+SbfYLFIo16PLazp8g0oBw36oi3fXpgg== X-Received: by 2002:a17:902:8b83:b029:12c:cbce:a52f with SMTP id ay3-20020a1709028b83b029012ccbcea52fmr5805873plb.9.1633637294960; Thu, 07 Oct 2021 13:08:14 -0700 (PDT) Received: from gnu-cfl-2.localdomain ([172.58.39.6]) by smtp.gmail.com with ESMTPSA id u24sm263734pfm.27.2021.10.07.13.08.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Oct 2021 13:08:14 -0700 (PDT) Received: from gnu-cfl-2.. (localhost [IPv6:::1]) by gnu-cfl-2.localdomain (Postfix) with ESMTP id 5E479C02FF; Thu, 7 Oct 2021 13:08:13 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH 1/3] Check linker suppor for -z indirect-extern-access Date: Thu, 7 Oct 2021 13:08:11 -0700 Message-Id: <20211007200813.1626777-2-hjl.tools@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211007200813.1626777-1-hjl.tools@gmail.com> References: <20211007200813.1626777-1-hjl.tools@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-3032.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: "H.J. Lu via Libc-alpha" From: "H.J. Lu" Reply-To: "H.J. Lu" Cc: Florian Weimer Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Binutils 2.37 supports -z indirect-extern-access. If GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS is set on any input relocatable files: 1. Don't generate copy relocations. 2. Turn off extern_protected_data since it implies GNU_PROPERTY_NO_COPY_ON_PROTECTED. 3. Treate reference to protected symbols with indirect external access as local. 4. Set GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS on output. 5. When generating executable, clear this bit when there are non-GOT or non-PLT relocations in input relocatable files without the bit set. 6. Add -z [no]indirect-extern-access to control indirect external access. --- configure | 32 ++++++++++++++++++++++++++++++++ configure.ac | 21 +++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/configure b/configure index 39d75eb4ed..ac24218009 100755 --- a/configure +++ b/configure @@ -5819,6 +5819,38 @@ fi $as_echo "$libc_cv_insert" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking -z indirect-extern-access" >&5 +$as_echo_n "checking -z indirect-extern-access... " >&6; } +if ${libc_cv_z_indirect_extern_access+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + libc_cv_z_indirect_extern_access=yes + else + libc_cv_z_indirect_extern_access=no + fi + rm -f conftest.* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_z_indirect_extern_access" >&5 +$as_echo "$libc_cv_z_indirect_extern_access" >&6; } +config_vars="$config_vars +have-z-indirect-extern-access = $libc_cv_z_indirect_extern_access" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken __attribute__((alias()))" >&5 $as_echo_n "checking for broken __attribute__((alias()))... " >&6; } if ${libc_cv_broken_alias_attribute+:} false; then : diff --git a/configure.ac b/configure.ac index 00f49f09f7..8bb0d1a838 100644 --- a/configure.ac +++ b/configure.ac @@ -1235,6 +1235,27 @@ EOF ]) AC_SUBST(libc_cv_insert) +AC_CACHE_CHECK(-z indirect-extern-access, + libc_cv_z_indirect_extern_access, + [cat > conftest.c <&AS_MESSAGE_LOG_FD]); then + libc_cv_z_indirect_extern_access=yes + else + libc_cv_z_indirect_extern_access=no + fi + rm -f conftest.* + ]) +LIBC_CONFIG_VAR([have-z-indirect-extern-access], + [$libc_cv_z_indirect_extern_access]) + AC_CACHE_CHECK(for broken __attribute__((alias())), libc_cv_broken_alias_attribute, [cat > conftest.c <