From patchwork Fri Jan 26 18:09:48 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: 84803 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 2FB893857737 for ; Fri, 26 Jan 2024 18:10:26 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pf1-x429.google.com (mail-pf1-x429.google.com [IPv6:2607:f8b0:4864:20::429]) by sourceware.org (Postfix) with ESMTPS id 54A30385802F for ; Fri, 26 Jan 2024 18:09:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 54A30385802F 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 54A30385802F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::429 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706292593; cv=none; b=KtfjDEvBTTx8dMw+aIpCyDyY/PKIPsMmAPYH8bL6nyXR/+HEamu1Sok9BArQGaqOkWeFMdlZxWrBZ/KR+evSmm9fjxyUdLylBMd0ExwXJ8kIq6QLeJo0FapCl8UlU4bZ9/6Ij7LEt830v722W/Md0n2dTRki7n6IPwAuZVNq06U= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1706292593; c=relaxed/simple; bh=doiyhXrD+Ze0zTjd8IUUKDC3GKjd5e4RwMtGnCQ4QNI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=wMYRSf4Eb1wbcOtwR5b1zjEwNBFeNG4wLBuPPt+TL5eA1LaWheBKx7NbQ1HY8LE5FNex7Jz8PacLor1WAYA7LcOZoAX2rISJGIegMrqBE7QYYxfeaytTLGBzrtFq7mTt1SuQJuy0UvSDGAKPeLg+q53M473G0GvseCN4TQX3CHg= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pf1-x429.google.com with SMTP id d2e1a72fcca58-6dddf4fc85dso583881b3a.0 for ; Fri, 26 Jan 2024 10:09:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706292590; x=1706897390; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=y9az09zaadatgfyYhrsXjIYbre+tvm5y4M0A/wxX0/I=; b=NjLuOGnvtFippNn+TwPoOR2rVnBnaNoVtr4V4FggLDReWHvudl/2S6tyqfnnhhusyv oV2rjpn+QH35KZ175uGPetC3pYh4Lj4dL63SU9TcGBOLxEEETsY09WQpCganvbFpHwmq 3rmLoZKPBTSSUhUg9oUHtzZTyvo+R5TpWTHMy+600cDT2AkraYXbdd+eETk260QBVB41 sLrUPWk3bn9ddiA4MzdkkiFytlpkPltLNUYgYBgzMPVdZS9RNdtVOEgcULMxBQ2r8QXx c1uWk8lvqHIxjPsY5ks1wocsHH6BfQVxHaoxhiQt4Yw9Wge/Onay8L/dLFojB3UiVGfZ whPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706292590; x=1706897390; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=y9az09zaadatgfyYhrsXjIYbre+tvm5y4M0A/wxX0/I=; b=O+8tWOzDudhS3mRUZkwBe1rxigGrUGr3wdEfOJVUnkgHuaP4jdfKBgNEgzjuY3KysL VUWcBoU+C56L7r62pcbEwjMsz5u5Re9BKyTpcgJ93KkcpB5ldpGyRkoEoFuCL+XR+Z3j XOZ9/2BNhLSfr4jJk0D/ThDMqBGd2WzSBpRqwOcZuZIQSracBaQj3dKuANXx3gI4/356 qJL7uKVie5RE+pa6tX24mumIuXjYK/SWHFX4Fk2XiALEPlojeD+XJLcZZs6xswW8q/Nz VVNNHCUerxmYXlRheYQ5TLFqKOmgvmjR9CuxsjfVY138dsdJM0aQJZ2ZBXqDIVnh4ttU IYNQ== X-Gm-Message-State: AOJu0YwuwANzd3DEdyRHKZqadpMRBKEniV+pz0cNxMJjF5oRe+FNmWtO W9emkVtnhLo7HHfKVBS1Yl3TpRTZf3po4BCae0ZXI60GoQmx9HjyI1qP097+ X-Google-Smtp-Source: AGHT+IHzeW6nTBz7w7NHVUVMMj+cMtBoUEOaNzScnhF8ImyOSD4ZoQrOP8Wx6u/ySskuwZr8+JCSuQ== X-Received: by 2002:a05:6a00:cb:b0:6d9:d71c:d1a3 with SMTP id e11-20020a056a0000cb00b006d9d71cd1a3mr155553pfj.66.1706292589772; Fri, 26 Jan 2024 10:09:49 -0800 (PST) Received: from gnu-cfl-3.localdomain ([172.56.169.51]) by smtp.gmail.com with ESMTPSA id p17-20020a056a0026d100b006d9accac5c4sm1392951pfw.35.2024.01.26.10.09.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 26 Jan 2024 10:09:49 -0800 (PST) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id 454E07401C1 for ; Fri, 26 Jan 2024 10:09:48 -0800 (PST) From: "H.J. Lu" To: binutils@sourceware.org Subject: [PATCH] ld: Turn on --error-execstack/--error-rwx-segments Date: Fri, 26 Jan 2024 10:09:48 -0800 Message-ID: <20240126180948.3121701-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3024.1 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 Since --fatal-warnings always turns a warning to an error, turn on --error-execstack for --warn-execstack and --error-rwx-segments for --warn-rwx-segments if --fatal-warnings is used, overriding --no-error-execstack and --no-error-rwx-segments. PR ld/31299 * lexsup.c (parse_args): Turn on --error-execstack for --warn-execstack and --error-rwx-segments for --warn-rwx-segments if --fatal-warnings is used. * testsuite/ld-elf/elf.exp: Run PR ld/31299 tests. * testsuite/ld-elf/pr31299-1.error: New file. * testsuite/ld-elf/pr31299-2.error: Likewise. * testsuite/ld-elf/pr31299-3.error: Likewise. --- ld/lexsup.c | 11 +++++++++++ ld/testsuite/ld-elf/elf.exp | 26 +++++++++++++++++++++++++- ld/testsuite/ld-elf/pr31299-1.error | 2 ++ ld/testsuite/ld-elf/pr31299-2.error | 1 + ld/testsuite/ld-elf/pr31299-3.error | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-elf/pr31299-1.error create mode 100644 ld/testsuite/ld-elf/pr31299-2.error create mode 100644 ld/testsuite/ld-elf/pr31299-3.error diff --git a/ld/lexsup.c b/ld/lexsup.c index 099dff8ecde..787d3d02e51 100644 --- a/ld/lexsup.c +++ b/ld/lexsup.c @@ -1947,6 +1947,17 @@ parse_args (unsigned argc, char **argv) && command_line.check_section_addresses < 0) command_line.check_section_addresses = 0; + /* Override --no-error-execstack and --no-warn-execstack and turn on + --error-execstack for --warn-execstack and --error-rwx-segments for + --warn-rwx-segments if --fatal-warnings is used. */ + if (config.fatal_warnings) + { + if (link_info.warn_execstack) + link_info.error_execstack = 1; + if (!link_info.no_warn_rwx_segments) + link_info.warn_is_error_for_rwx_segments = 1; + } + if (export_list) { struct bfd_elf_version_expr *head = export_list->head.list; diff --git a/ld/testsuite/ld-elf/elf.exp b/ld/testsuite/ld-elf/elf.exp index 685b87588e7..6ece36b7931 100644 --- a/ld/testsuite/ld-elf/elf.exp +++ b/ld/testsuite/ld-elf/elf.exp @@ -305,7 +305,23 @@ if { [istarget *-*-*linux*] {nobits-1.s} \ {} \ "rwx-segments-3.exe"] \ - ] + [list "Ensure that an error issued when creating a segment with RWX permissions" \ + "-e 0 -Tnobits-1.t --warn-rwx-segments \ + --fatal-warnings --no-error-rwx-segments" \ + "" \ + "" \ + {nobits-1.s} \ + {{ld pr31299-2.error}} \ + "pr31299-2.exe"] \ + [list "Ensure that an error issued when creating a TLS segment with execute permission" \ + "-e 0 -T rwx-segments-2.t --warn-rwx-segments \ + --fatal-warnings --no-error-rwx-segments" \ + "" \ + "" \ + {size-2.s} \ + {{ld pr31299-3.error}} \ + "pr31299-3.exe"] \ + ] set LDFLAGS $curr_ldflags @@ -318,6 +334,14 @@ if { [istarget *-*-*linux*] {pr29072-b.s} \ {{ld pr29072.b.warn}} \ "pr29072-b.exe"] \ + [list "PR ld/31299 (error about absent .note.GNU-stack)" \ + "-e 0 -z stack-size=0x123400 --warn-execstack \ + --fatal-warnings --no-error-execstack" \ + "" \ + "" \ + {pr29072-b.s} \ + {{ld pr31299-1.error}} \ + "pr31299-1.exe"] \ ] } else { run_ld_link_tests [list \ diff --git a/ld/testsuite/ld-elf/pr31299-1.error b/ld/testsuite/ld-elf/pr31299-1.error new file mode 100644 index 00000000000..d1a9569a374 --- /dev/null +++ b/ld/testsuite/ld-elf/pr31299-1.error @@ -0,0 +1,2 @@ +.*: error: .*\.o: is triggering the generation of an executable stack because it does not have a \.note\.GNU-stack section +.*: failed to set dynamic section sizes: file format not recognized diff --git a/ld/testsuite/ld-elf/pr31299-2.error b/ld/testsuite/ld-elf/pr31299-2.error new file mode 100644 index 00000000000..e5b73657069 --- /dev/null +++ b/ld/testsuite/ld-elf/pr31299-2.error @@ -0,0 +1 @@ +.*: error: .* has a LOAD segment with RWX permissions diff --git a/ld/testsuite/ld-elf/pr31299-3.error b/ld/testsuite/ld-elf/pr31299-3.error new file mode 100644 index 00000000000..b9ba368ba2c --- /dev/null +++ b/ld/testsuite/ld-elf/pr31299-3.error @@ -0,0 +1 @@ +.*: error: .* has a TLS segment with execute permission