From patchwork Fri Jan 5 21:50:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 83421 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 E6C07385DC03 for ; Fri, 5 Jan 2024 21:51:07 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pf1-x433.google.com (mail-pf1-x433.google.com [IPv6:2607:f8b0:4864:20::433]) by sourceware.org (Postfix) with ESMTPS id 38FF43858C60 for ; Fri, 5 Jan 2024 21:50:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 38FF43858C60 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 38FF43858C60 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::433 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704491422; cv=none; b=KFGSJA/SaoCsIA9bmawNvQ/bOPXgE1dC5dGvUQCVor1RZz32kqqSQ2MoAL7iV0+dYFP0hRyDHmgrvYQUTb7ECnk+d16/r52+YqWqj6JT+6rEPmfrsj59SLfO4Ikw4xSzsPZxg7H9RrEyXA1TsZgWlSbTQdyoVCsKLuaVMK0mBBw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704491422; c=relaxed/simple; bh=VS5dbbjuTQ6NJocby12nhCnE9K0So75evtKxQiskpjc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ULYh7W+Ba1lGJLdlq3vD7Q8QTIBjoUswntAkpgmEAB93/jjbhmOYt3bu//1c9ugrTmQU6Xr3tVynnA1qk3Ao+yXC16wOCeeySlthYvYm7rve+dFb30bBX+SQFQ/heM9vRXRx3jAmrIu+JLVv5YslCfgfjpbpEo2AgglL4uZUa6U= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x433.google.com with SMTP id d2e1a72fcca58-6d9af1f12e8so52294b3a.1 for ; Fri, 05 Jan 2024 13:50:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704491418; x=1705096218; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JkAfNLbOkgogzVlubidtZb7LRuZR6xpDMbVMDfn4Fho=; b=bL3Zi/ymixx74nvFjOl6tcX24HSz4YjGNoKWHnpI8C350rKp38CTAarfTThvDXbhNg Lv6w0ggdEVwuAmZatf8huT3PomeNZFvilCrrf3K24ez1vDdsF5Xz9cGsnPCqDIX5gtZJ nZ0x14VFlCLXvckh9qJPkxzbFctQSGhIaOp9TLEatYxo+EihXh7mi7NIt4eL0WCbSb/w 37xCngz0OFQti2JP4VEaWNy8tZEAIt/Ww5B/1QsZYaoJZ3XB2QmS4XL7cHKXNgdED80X NLLSUfs7iQODFllc7SGei8ukg5ri8Ew46bPKgTHuDZh9itgq0xjggSmvHerbugIto635 40nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704491418; x=1705096218; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JkAfNLbOkgogzVlubidtZb7LRuZR6xpDMbVMDfn4Fho=; b=C6gH00ZeXMdI1rufTyiCyr8pjeAHEqiSmRVpkHcIzkJbksZMK2J63jfRgDcj8zxz7j EP2/ZAwHv9Sx7F0Yuzyyvxqcxyp9Le4WjIR5uy4jfyPiodexuExAg3QIxhj5zEsdoZxZ OnX7vyBBJJdUhrgzMtzFR4835RqBAlXwHc/pluIg1+t4y0YaDfXM5nZbAlA3LIsbrWYN LC9WwjmZadFHAbhz2iLoyaU30sVXtiecz2yAbDBmG3LWexwREGgtbGbxSmn7GtCETMZu FOX7kalnJ2VXMK7cNtnF0PNsybKxg5IhPWpxHRU3AKDHiVpbarliMFApGT1O89wbQWPO prxw== X-Gm-Message-State: AOJu0YxU72blWGPk+86JCbZTaiFjJKVCUS2hbDDsetePkWNIkHbBMGG0 p9qSWeIbvH1acRUCx18SbJGoQlR5UUw= X-Google-Smtp-Source: AGHT+IE9S6BbyAIJOoH4gOGtUPvV+jUsSQ207ll/AQXvDhATPPoeWQKdKQGTpExMbJVDWpVabsmLRg== X-Received: by 2002:a05:6a20:12ca:b0:197:6c6b:625a with SMTP id v10-20020a056a2012ca00b001976c6b625amr15148pzg.6.1704491417530; Fri, 05 Jan 2024 13:50:17 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.56.169.119]) by smtp.gmail.com with ESMTPSA id p7-20020a170902bd0700b001cfde4c84bcsm1851080pls.141.2024.01.05.13.50.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Jan 2024 13:50:16 -0800 (PST) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 9755C7404EA for ; Fri, 5 Jan 2024 13:50:15 -0800 (PST) From: "H.J. Lu" To: binutils@sourceware.org Subject: [PATCH 2/2] ld: Add --enable-make-plt configure option Date: Fri, 5 Jan 2024 13:50:15 -0800 Message-ID: <20240105215015.1123568-3-hjl.tools@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240105215015.1123568-1-hjl.tools@gmail.com> References: <20240105215015.1123568-1-hjl.tools@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-3024.5 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, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+patchwork=sourceware.org@sourceware.org Add --enable-make-plt linker configure option to mark PLT entries with DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic tags by default. * NEWS: Mention -z mark-plt/-z nomark-plt and --enable-make-plt. * config.in: Regenerated. * configure: Likewise. * configure.ac: Add --enable-make-plt. (DEFAULT_LD_Z_MARK_PLT): New AC_DEFINE_UNQUOTED. * emulparams/x86-64-plt.sh (PARSE_AND_LIST_OPTIONS_X86_64_PLT): Support DEFAULT_LD_Z_MARK_PLT. * emultempl/elf-x86.em (elf_x86_64_before_parse): New function. (LDEMUL_BEFORE_PARSE): New. Set to elf_x86_64_before_parse for x86-64 targets. * testsuite/ld-elf/indirect-extern-access-2.rd: Allow non-zero r_addend for JUMP_SLOT relocation. * testsuite/ld-elf/pr23161d.rd: Likewise. * testsuite/ld-ifunc/ifunc-25c-x86.d: Likewise. * testsuite/ld-ifunc/ifunc-16-x86-64-now.d: Pass -z nomark-plt to linker. * testsuite/ld-ifunc/ifunc-16-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d: Likewise. * testsuite/ld-ifunc/ifunc-2-local-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-2-x86-64-now.d: Likewise. * testsuite/ld-ifunc/ifunc-2-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-20-x86-64.d: Likewise. * testsuite/ld-ifunc/ifunc-5b-x86-64.d: Likewise. * testsuite/ld-ifunc/pr17154-x86-64-now.d: Likewise. * testsuite/ld-ifunc/pr17154-x86-64.d: Likewise. * testsuite/ld-x86-64/x86-64.exp (LDFLAGS): Save and restore the original linker flags. Append -z nomark-plt. Run i386 tests before appending -z nomark-plt to LDFLAGS. --- ld/NEWS | 5 +++ ld/config.in | 4 +++ ld/configure | 26 +++++++++++++-- ld/configure.ac | 17 ++++++++++ ld/emulparams/x86-64-plt.sh | 7 +++- ld/emultempl/elf-x86.em | 17 ++++++++++ .../ld-elf/indirect-extern-access-2.rd | 2 +- ld/testsuite/ld-elf/pr23161d.rd | 2 +- ld/testsuite/ld-ifunc/ifunc-16-x86-64-now.d | 2 +- ld/testsuite/ld-ifunc/ifunc-16-x86-64.d | 2 +- .../ld-ifunc/ifunc-2-local-x86-64-now.d | 2 +- ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d | 2 +- ld/testsuite/ld-ifunc/ifunc-2-x86-64-now.d | 2 +- ld/testsuite/ld-ifunc/ifunc-2-x86-64.d | 2 +- ld/testsuite/ld-ifunc/ifunc-20-x86-64.d | 2 +- ld/testsuite/ld-ifunc/ifunc-25c-x86.d | 2 +- ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d | 2 +- ld/testsuite/ld-ifunc/pr17154-x86-64-now.d | 2 +- ld/testsuite/ld-ifunc/pr17154-x86-64.d | 2 +- ld/testsuite/ld-x86-64/x86-64.exp | 33 ++++++++++++++++--- 20 files changed, 114 insertions(+), 21 deletions(-) diff --git a/ld/NEWS b/ld/NEWS index a2c0b7fbcfe..3d3bb59b71b 100644 --- a/ld/NEWS +++ b/ld/NEWS @@ -1,5 +1,10 @@ -*- text -*- +* Add -z mark-plt/-z nomark-plt options to x86-64 ELF linker to mark PLT + entries with DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic + tags. Also added --enable-make-plt configure option to mark PLT entries + by default. + * Support Intel APX relocations. * On RISC-V, add ld target option --[no-]check-uleb128. Should rebuild the diff --git a/ld/config.in b/ld/config.in index 86d90d53752..52d62f06ff0 100644 --- a/ld/config.in +++ b/ld/config.in @@ -45,6 +45,10 @@ default. */ #undef DEFAULT_LD_WARN_RWX_SEGMENTS +/* Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by + default. */ +#undef DEFAULT_LD_Z_MARK_PLT + /* Define to 1 if you want to enable -z relro in ELF linker by default. */ #undef DEFAULT_LD_Z_RELRO diff --git a/ld/configure b/ld/configure index 07eb669d906..d01dbfae296 100755 --- a/ld/configure +++ b/ld/configure @@ -852,6 +852,7 @@ enable_new_dtags enable_relro enable_textrel_check enable_separate_code +enable_mark_plt enable_warn_execstack enable_error_execstack enable_warn_rwx_segments @@ -1546,6 +1547,7 @@ Optional Features: --enable-textrel-check=[yes|no|warning|error] enable DT_TEXTREL check in ELF linker --enable-separate-code enable -z separate-code in ELF linker by default + --enable-make-plt enable -z mark-plt in ELF x86-64 linker by default --enable-warn-execstack enable warnings when creating an executable stack --enable-error-execstack turn executable stack warnings into errors @@ -11681,7 +11683,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11684 "configure" +#line 11686 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11787,7 +11789,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11790 "configure" +#line 11792 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15682,6 +15684,17 @@ esac fi +# Decide if -z mark-plt should be enabled in ELF x86-64 linker by default. +ac_default_ld_z_mark_plt=unset +# Check whether --enable-mark-plt was given. +if test "${enable_mark_plt+set}" = set; then : + enableval=$enable_mark_plt; case "${enableval}" in + yes) ac_default_ld_z_mark_plt=1 ;; + no) ac_default_ld_z_mark_plt=0 ;; +esac +fi + + # By default warn when an executable stack is created due to object files # requesting such, not when the user specifies -z execstack. @@ -19365,6 +19378,15 @@ cat >>confdefs.h <<_ACEOF _ACEOF +if test "${ac_default_ld_z_mark_plt}" = unset; then + ac_default_ld_z_mark_plt=0 +fi + +cat >>confdefs.h <<_ACEOF +#define DEFAULT_LD_Z_MARK_PLT $ac_default_ld_z_mark_plt +_ACEOF + + cat >>confdefs.h <<_ACEOF diff --git a/ld/configure.ac b/ld/configure.ac index b46f415fe9b..9036090889e 100644 --- a/ld/configure.ac +++ b/ld/configure.ac @@ -213,6 +213,16 @@ AC_ARG_ENABLE(separate-code, no) ac_default_ld_z_separate_code=0 ;; esac]) +# Decide if -z mark-plt should be enabled in ELF x86-64 linker by default. +ac_default_ld_z_mark_plt=unset +AC_ARG_ENABLE(mark-plt, + AS_HELP_STRING([--enable-make-plt], + [enable -z mark-plt in ELF x86-64 linker by default]), +[case "${enableval}" in + yes) ac_default_ld_z_mark_plt=1 ;; + no) ac_default_ld_z_mark_plt=0 ;; +esac]) + # By default warn when an executable stack is created due to object files # requesting such, not when the user specifies -z execstack. @@ -562,6 +572,13 @@ AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_SEPARATE_CODE, $ac_default_ld_z_separate_code, [Define to 1 if you want to enable -z separate-code in ELF linker by default.]) +if test "${ac_default_ld_z_mark_plt}" = unset; then + ac_default_ld_z_mark_plt=0 +fi +AC_DEFINE_UNQUOTED(DEFAULT_LD_Z_MARK_PLT, + $ac_default_ld_z_mark_plt, + [Define to 1 if you want to enable -z mark-plt in ELF x86-64 linker by default.]) + AC_DEFINE_UNQUOTED(DEFAULT_LD_WARN_EXECSTACK, $ac_default_ld_warn_execstack, diff --git a/ld/emulparams/x86-64-plt.sh b/ld/emulparams/x86-64-plt.sh index 92732401dc7..d1a5c65937f 100644 --- a/ld/emulparams/x86-64-plt.sh +++ b/ld/emulparams/x86-64-plt.sh @@ -1,5 +1,10 @@ PARSE_AND_LIST_OPTIONS_X86_64_PLT=' - fprintf (file, _("\ + if (DEFAULT_LD_Z_MARK_PLT != 0) + fprintf (file, _("\ + -z mark-plt Mark PLT with dynamic tags (default)\n\ + -z nomark-plt Do not mark PLT with dynamic tags\n")); + else + fprintf (file, _("\ -z mark-plt Mark PLT with dynamic tags\n\ -z nomark-plt Do not mark PLT with dynamic tags (default)\n")); ' diff --git a/ld/emultempl/elf-x86.em b/ld/emultempl/elf-x86.em index 0ccad72ab9a..a6eda14253f 100644 --- a/ld/emultempl/elf-x86.em +++ b/ld/emultempl/elf-x86.em @@ -56,3 +56,20 @@ EOF LDEMUL_BEFORE_PARSE=elf_x86_before_parse fi + +case x${OUTPUT_FORMAT} in + x*x86-64*) +fragment <