From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-il1-x133.google.com (mail-il1-x133.google.com [IPv6:2607:f8b0:4864:20::133]) by sourceware.org (Postfix) with ESMTPS id 60F9F3858D20 for ; Sat, 6 Jan 2024 22:10:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 60F9F3858D20 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 60F9F3858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704579007; cv=none; b=vAdPOVw4hEoRIN7VyDO80yHbZKqJeg99O0c0iu9f5Q7SJsSLNj1p0feXh4ef0X1uvMCEAzjV7OCyrRpdS8PdZHPsH5Bh8bvK0aLuIt4bLBGEwXHZ8RRTML4KEPDT1TfVtVds/k+MhKHewt+oQOiPny1fNYU6rhDPepHxxeHOvVo= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704579007; c=relaxed/simple; bh=LDSHdsBOPOn+VSHrAk24vN1Z7YgIRji18tbQbkrQj+0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=UL7Io8LMUL/nDvGjPdBBi/WDqU01qtOHHFwZo6MipOpbPR86F16qAyrDpo4rzGurVq8CYNFgl2N/t9iydEYS/7WtTMEwc0N1+7mCLsHMEvWI6eTINWBwZRSKNGoArG2A5B2p4UDuEM3Y7UJKW3FqMj+qu+ghTAVyzJme5YjmM24= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-il1-x133.google.com with SMTP id e9e14a558f8ab-3606f133bb5so7358745ab.1 for ; Sat, 06 Jan 2024 14:10:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704579004; x=1705183804; 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=6gTCBDH+1xH9nbW7+cTjZ5bSLqpenuDHcDWSVD4+WlU=; b=DqLNDc2xsNpXDTC6Y7/edX91xT9uEmSJx0wzVo5wBF07eunvt4tojFr0xrtnxMbt2k y4QrUZgloLZb1Tg65E33nuBX4yJ/sFkn/a+zgmSY0NmQpJTxuA278nVRje82Ah15Baiz NycODXtJzU3ZkSrBfpG88oLoMCPX8E1AS4NiZEL5MuT2H9VR3E78wWoNGznwpVsCgACu 6VAUIrSubmtlXJN0YDlpVdrf6Qo/p+OokXK5R1QfCOWO4BfU6P7C6SxyfinC38gTysim XWiPxLibqwPyKGh4I5kxWyiutKoFuSUF5OephA/191cIAaZvhUJytxC6fIdlGsn6Nvt/ yOLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704579004; x=1705183804; 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=6gTCBDH+1xH9nbW7+cTjZ5bSLqpenuDHcDWSVD4+WlU=; b=VFjvqBD6uy1TVyc/ScmXXRST40F7VlgytXjcwXBodHe0kzHBnEPZuenMl8lrE1q5Rs fvEPglYH4yBEqYT3gdiHlkZqVm2/WRHmLk+/vETdtiv62I8f0my65Ym2FW2R2TRf4oF0 CDmrMKevlSpjikUCsUhuiBWbkUmMU61DAe165pWQ01qU+zVJwtUpEHICkxWdOqt/j+f7 jnkIotaAnsZeJjHUMikQuzJ1vxCRLRDd8sfrBqQpMxK6CjfSkx04EdvqfBH4/5byn6u5 tqvYOGylDW6+9viwD5drdNaMDaRK4sEyqEZQT+JfMaabjA4RTXFM+BZ/DXlgfdcAH7XD XzNg== X-Gm-Message-State: AOJu0YzE3R1mGNA8ZEnzEo11Xb+p1oG59zTTfwZEnXl/MOVd083rBLkU zPmMT4wNUpeb1UIbFe8DvNZvaGwnxUs= X-Google-Smtp-Source: AGHT+IFzmrNyFDEklM+b27HH4MeDWWMqWhH2K5PSmsSnQsxzze3ERidoCP4d8o9wOv+Q9SnsWMpHxA== X-Received: by 2002:a05:6e02:1bec:b0:35f:ec05:fd26 with SMTP id y12-20020a056e021bec00b0035fec05fd26mr2962991ilv.33.1704579003992; Sat, 06 Jan 2024 14:10:03 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.56.169.119]) by smtp.gmail.com with ESMTPSA id cz8-20020a17090ad44800b0028afd8b1e0bsm3514909pjb.57.2024.01.06.14.10.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 06 Jan 2024 14:10:03 -0800 (PST) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 06B90740670 for ; Sat, 6 Jan 2024 14:10:02 -0800 (PST) From: "H.J. Lu" To: binutils@sourceware.org Subject: [PATCH v2 2/2] ld: Add --enable-mark-plt configure option Date: Sat, 6 Jan 2024 14:10:01 -0800 Message-ID: <20240106221001.1754844-3-hjl.tools@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240106221001.1754844-1-hjl.tools@gmail.com> References: <20240106221001.1754844-1-hjl.tools@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3021.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_ABUSEAT,RCVD_IN_DNSWL_NONE,RCVD_IN_SBL_CSS,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 List-Id: Add --enable-mark-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-mark-plt. * config.in: Regenerated. * configure: Likewise. * configure.ac: Add --enable-mark-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. --- 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 +++++++++++++++++ 6 files changed, 73 insertions(+), 3 deletions(-) diff --git a/ld/NEWS b/ld/NEWS index a2c0b7fbcfe..cedd0d72d1b 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-mark-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..b7f29ca68b7 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-mark-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..4a11787ae71 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-mark-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 <