From patchwork Mon Mar 30 19:12:49 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 132470 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 913014BAD17F for ; Mon, 30 Mar 2026 19:13:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 913014BAD17F Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=jPt3vIN1 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-dl1-x1230.google.com (mail-dl1-x1230.google.com [IPv6:2607:f8b0:4864:20::1230]) by sourceware.org (Postfix) with ESMTPS id 420BF4BAD17F for ; Mon, 30 Mar 2026 19:12:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 420BF4BAD17F 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 420BF4BAD17F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1230 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774897977; cv=none; b=ZOr1TxUiRGh6SGBFqpp+LwkAorGkcKQdKHEpsr6ZX6A1PKJfd6MvBjaBapDdPsFncjUayZ4Dy89jw3pqKyUo1TIhHcHPnwCA3HU49tbVl7NRSM3FucHQ7ruoUwMnPVFFROQICR2B6CXabZ88B2pJUoHFeDPy7c73xEqtdvJcqA0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1774897977; c=relaxed/simple; bh=ZcpVv0XAQpWVnzzu460SBFPZ28gMXE13K8SHhhxg71A=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=TRuA3hyCLH/qrr6pYOc8s6OMZtlctfLuBJuQkeFebHFD7aKGF+S7SyktzoNGUxuRD0lG8wRrk2Vaz29S2ntKBBbeg6JGuuVHclp73EisDSIqskpq8C+8UWdJ0veTIccVV6DVGB5qJ4UM5rBFIx7uaMa4yQ+g4o6gKRVq5BWP8YE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 420BF4BAD17F Received: by mail-dl1-x1230.google.com with SMTP id a92af1059eb24-127380532eeso385053c88.1 for ; Mon, 30 Mar 2026 12:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774897976; x=1775502776; darn=sourceware.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=lDBij31QZYCrrZSQUWrTWroDwgOXZggqsFnstrr8yJA=; b=jPt3vIN1JidykPvJR+EPzhDMpxmFUfZqGzdeH9fn/gfmNOkCdyK7hKd8IWnbqlyX+l SgMGwl4+Xw8m/AdWFBTAo4/O6j1b4bsum4G+m3WD0XNSuXSdkUis634YXhGb6T/47KtV ToFoT/a5d/ZLZB8M9jK4xFPNfND6qhxSxIIDXwAOOrVxC6521ja+LrG/dBpVnnmtcHlW R42Lj1ygXIqubljqFqMkt9ROXI6qt1f9XicOEIRUwjR01R925TNTRYDTuOO46SqfQB9M 4z+FtYvNrBHph0KQoX1f5iS8GFwU4xlmZKqmbBjJj4eIu//nvbskK7l6SlgwiSXMFNo6 ECng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774897976; x=1775502776; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=lDBij31QZYCrrZSQUWrTWroDwgOXZggqsFnstrr8yJA=; b=qxPUKCTUNGw5j54PHhv39n8j70gbuU1CoozcFpJRwIPWiHLRYvEznV5qE2R6x3iTIp 2jYeba+tnodHWxtbqFFmZNC2zkFCUIRxca4y8+eLXy46L/oMvht77CfmFNvH/40kXQ8c F4AEUyxZHXD4on+cPyaTzDUKNlAkb+0h84nudoXAtecZcJD0HBXlOUqcwH0LV5XpQPrd 1pHBZ/Gsj0pMbAytcJVx0o550Ncr95IutOYDzOEnpVu0sXztsa3ekPPXng9QX4a/KTrO 00S8xymJ8XGM4blPb8vzMJpCh5HstgfDC2YGu33f84EC3zDBB92krIgcZIzYMVJsgoxD VYEQ== X-Gm-Message-State: AOJu0Yy/k2H5lwn4WYNpHqHWJCs8vB3Utdv8UWiVAUjuOGJZ567HDjZI N9jHSyh3nf79HMVAS6tSQZNZSSWBwXEQrNP06ieIPxdwg66jSMxVTrJq X-Gm-Gg: ATEYQzy5/+77r1B2QlkHBq5jb9YdwCwInG4Qrl/QsCTtOCOqJZdqG7gmlQs9wRoOxZn MmNRkE3o+6NunWuJYltplqBI9l3O3kcf0JQTo8z9ikL+VGDQ6Wefm0UfYXFF6o9nBoH600py6JI vwzvkH6FHFNDaBJRRA6S3nIdOhJuWIlv8Vra72xrIaAROtvyLQYkkpsEHI3FNYAinWu1PNc4/BB Mg3z3/2MMWtGL0uXwKHngkaiLa0snmMENtA/1YVWXnuFg8KjTAZWbRarTmc3WfSj90SOKCDDj+V G28mcqRxxocDxky6NR7v0RSWAPQCTANg5mIyU/xYxIPCobnEV1gUyN0N2+9zeMaQrouRfhRdy7k 2++aUQeGMPmOpwAwvdjgtOHGy8M8Oyd56ZCwmxDHP8WZCFARQYdRyPfj6xQuDpYKx9ypCnTnzZX XWABVRu7/EyelofyVRDtt0MC9ZiQILYoavP9B7O2U= X-Received: by 2002:a05:693c:3008:b0:2be:142f:d499 with SMTP id 5a478bee46e88-2c185efb50fmr8219595eec.16.1774897976012; Mon, 30 Mar 2026 12:12:56 -0700 (PDT) Received: from gnu-tgl-3.localdomain ([172.59.163.89]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c3c4cbbc1fsm7589623eec.13.2026.03.30.12.12.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 Mar 2026 12:12:55 -0700 (PDT) Received: from gnu-tgl-3.localdomain (localhost [127.0.0.1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 20616C02DD; Mon, 30 Mar 2026 12:12:54 -0700 (PDT) From: "H.J. Lu" To: binutils@sourceware.org Cc: nickc@redhat.com, amodra@gmail.com, jbeulich@suse.com Subject: [PATCH] ld: Pass --no-rosegment to ld in some linker tests Date: Mon, 30 Mar 2026 12:12:49 -0700 Message-ID: <20260330191249.678469-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3013.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE, SPF_PASS, TXREP, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 For elf/x86, --rosegment places code after read-only data, instead of before read-only data. Pass --no-rosegment to ld in some linker tests to avoid extra linker test failures when binutils is configured with --enable-rosegment for elf/x86. binutils/ PR ld/34003 * testsuite/lib/binutils-common.exp (check_rosegment_support): New. (run_dump_test): Make NO_ROSEGMENT_LDFLAGS global. ld/ PR ld/34003 * testsuite/config/default.exp (NO_ROSEGMENT_LDFLAGS): New. * testsuite/ld-elf/mbind1a.d: Pass $NO_ROSEGMENT_LDFLAGS to ld. * testsuite/ld-elf/pr26256-2b.d: Likewise. * testsuite/ld-srec/srec.exp (extra_flags): Add $NO_ROSEGMENT_LDFLAGS. * testsuite/ld-x86-64/no-plt.exp: Pass -Wl,--no-rosegment to compiler. * testsuite/ld-x86-64/pr27491-1c.d: Pass --no-rosegment to ld. * testsuite/ld-x86-64/pr27491-2.d: Likewise. * testsuite/ld-x86-64/pr27491-3.d: Likewise. * testsuite/ld-x86-64/pr27491-4.d: Likewise. Signed-off-by: H.J. Lu --- binutils/testsuite/lib/binutils-common.exp | 18 ++++++++++++++++++ ld/testsuite/config/default.exp | 8 ++++++++ ld/testsuite/ld-elf/mbind1a.d | 2 +- ld/testsuite/ld-elf/pr26256-2b.d | 2 +- ld/testsuite/ld-srec/srec.exp | 2 +- ld/testsuite/ld-x86-64/no-plt.exp | 14 +++++++------- ld/testsuite/ld-x86-64/pr27491-1c.d | 2 +- ld/testsuite/ld-x86-64/pr27491-2.d | 2 +- ld/testsuite/ld-x86-64/pr27491-3.d | 2 +- ld/testsuite/ld-x86-64/pr27491-4.d | 2 +- 10 files changed, 40 insertions(+), 14 deletions(-) diff --git a/binutils/testsuite/lib/binutils-common.exp b/binutils/testsuite/lib/binutils-common.exp index 5026c0c0a9a..edaad35a97e 100644 --- a/binutils/testsuite/lib/binutils-common.exp +++ b/binutils/testsuite/lib/binutils-common.exp @@ -424,6 +424,23 @@ proc check_memory_seal_support { } { return $memory_seal_available_saved } +proc check_rosegment_support { } { + global rosegment_available_saved + global ld + + if {![info exists rosegment_available_saved]} { + set ld_output [remote_exec host $ld "--no-rosegment"] + if { [string first "not supported" $ld_output] >= 0 + || [string first "unrecognized option" $ld_output] >= 0 + || [string first "--no-rosegment ignored" $ld_output] >= 0 } { + set rosegment_available_saved 0 + } else { + set rosegment_available_saved 1 + } + } + return $rosegment_available_saved +} + # Check for support of the .noinit section, used for data that is not # initialized at load, or during the application's initialization sequence. proc supports_noinit_section {} { @@ -1036,6 +1053,7 @@ proc run_dump_test { name {extra_options {}} } { global SIZE SIZEFLAGS global copyfile env runtests srcdir subdir verbose base_dir global DT_RELR_LDFLAGS NO_DT_RELR_LDFLAGS + global NO_ROSEGMENT_LDFLAGS if [string match "*/*" $name] { set file $name diff --git a/ld/testsuite/config/default.exp b/ld/testsuite/config/default.exp index 8a67721fa4e..2796f719f22 100644 --- a/ld/testsuite/config/default.exp +++ b/ld/testsuite/config/default.exp @@ -399,6 +399,14 @@ if { ![info exists NO_MEMORY_SEAL_LDFLAGS] } then { } } +if { ![info exists NO_ROSEGMENT_LDFLAGS] } then { + if { [check_rosegment_support] } then { + set NO_ROSEGMENT_LDFLAGS "--no-rosegment" + } else { + set NO_ROSEGMENT_LDFLAGS {} + } +} + # Set LD_CLASS to "64bit" for a 64-bit *host* linker. if { ![info exists LD_CLASS] } then { set REAL_LD [findfile $base_dir/.libs/ld-new .libs/ld-new $LD [transform ld]] diff --git a/ld/testsuite/ld-elf/mbind1a.d b/ld/testsuite/ld-elf/mbind1a.d index 0e9f900c868..310160063f0 100644 --- a/ld/testsuite/ld-elf/mbind1a.d +++ b/ld/testsuite/ld-elf/mbind1a.d @@ -1,5 +1,5 @@ #source: mbind1.s -#ld: -z common-page-size=0x1000 -z max-page-size=0x200000 +#ld: -z common-page-size=0x1000 -z max-page-size=0x200000 $NO_ROSEGMENT_LDFLAGS #readelf: -S -l --wide #target: *-*-linux* *-*-gnu* arm*-*-uclinuxfdpiceabi diff --git a/ld/testsuite/ld-elf/pr26256-2b.d b/ld/testsuite/ld-elf/pr26256-2b.d index 3f8c37e267b..aa797dcc1a4 100644 --- a/ld/testsuite/ld-elf/pr26256-2b.d +++ b/ld/testsuite/ld-elf/pr26256-2b.d @@ -1,5 +1,5 @@ #source: pr26256-2.s -#ld: -e _start +#ld: -e _start $NO_ROSEGMENT_LDFLAGS #nm: -n #notarget: fr30-*-* iq2000-*-* ip2k-*-* xgate-*-* xstormy16-*-* # These targets place .linkorder sections before .text sections. diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp index 39efcc49852..55959528f5f 100644 --- a/ld/testsuite/ld-srec/srec.exp +++ b/ld/testsuite/ld-srec/srec.exp @@ -348,7 +348,7 @@ set test2 "S-records with constructors" # See whether the default linker script uses SIZEOF_HEADERS. set exec_output [run_host_cmd "$ld" "--verbose"] set sizeof_headers [string match "*SIZEOF_HEADERS*" $exec_output] -set extra_flags " $NO_MEMORY_SEAL_LDFLAGS" +set extra_flags " $NO_MEMORY_SEAL_LDFLAGS $NO_ROSEGMENT_LDFLAGS" # First test linking a C program. We don't require any libraries. We # link it normally, and objcopy to the S-record format, and then link diff --git a/ld/testsuite/ld-x86-64/no-plt.exp b/ld/testsuite/ld-x86-64/no-plt.exp index 235bcb8b48d..69e34924064 100644 --- a/ld/testsuite/ld-x86-64/no-plt.exp +++ b/ld/testsuite/ld-x86-64/no-plt.exp @@ -72,7 +72,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (dynamic 1a)" \ "$NOPIE_LDFLAGS tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ + -Wl,--no-rosegment tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ "-Wa,-mx86-used-note=yes" \ {dummy.s} \ {{readelf -Wr no-plt-1a.rd} {objdump -dwrj.text no-plt-1a.dd}} \ @@ -80,7 +80,7 @@ run_cc_link_tests [list \ ] \ [list \ "Build no PLT (dynamic 1b)" \ - "tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ + "-Wl,--no-rosegment tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \ "-Wa,-mx86-used-note=yes" \ {dummy.s} \ @@ -90,7 +90,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (dynamic 1c)" \ "$NOPIE_LDFLAGS tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ + -Wl,--no-rosegment tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ "-Wa,-mx86-used-note=yes" \ {dummy.s} \ {{readelf -Wr no-plt-1c.rd} {objdump -dwrj.text no-plt-1c.dd}} \ @@ -99,7 +99,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (static 1d)" \ "-static tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ + -Wl,--no-rosegment tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ "-Wa,-mx86-used-note=yes" \ {dummy.s} \ {{readelf -Wr no-plt-1d.rd} {objdump -dwrj.text no-plt-1d.dd}} \ @@ -108,7 +108,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (PIE 1e)" \ "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ + -Wl,--no-rosegment tmpdir/no-plt-func1.o tmpdir/no-plt-extern1.o" \ "-Wa,-mx86-used-note=yes" \ {dummy.s} \ {{readelf -Wr no-plt-1e.rd} {nm -gD no-plt-1e.nd} {objdump -dwrj.text no-plt-1e.dd}} \ @@ -117,7 +117,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (PIE 1f)" \ "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \ + -Wl,--no-rosegment tmpdir/libno-plt-1a.so tmpdir/libno-plt-1b.so" \ "-Wa,-mx86-used-note=yes" \ { dummy.s } \ {{readelf -Wr no-plt-1f.rd} {objdump -dwrj.text no-plt-1f.dd}} \ @@ -126,7 +126,7 @@ run_cc_link_tests [list \ [list \ "Build no PLT (PIE 1g)" \ "-pie tmpdir/no-plt-check1.o tmpdir/no-plt-main1.o \ - tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ + -Wl,--no-rosegment tmpdir/no-plt-func1.o tmpdir/libno-plt-1b.so" \ "-Wa,-mx86-used-note=yes" \ { dummy.s } \ {{readelf -Wr no-plt-1g.rd} {objdump -dwrj.text no-plt-1g.dd}} \ diff --git a/ld/testsuite/ld-x86-64/pr27491-1c.d b/ld/testsuite/ld-x86-64/pr27491-1c.d index 1288361463d..be74f50c258 100644 --- a/ld/testsuite/ld-x86-64/pr27491-1c.d +++ b/ld/testsuite/ld-x86-64/pr27491-1c.d @@ -1,6 +1,6 @@ #source: pr27491-1.s #as: --64 -#ld: --gc-sections -melf_x86_64 -shared +#ld: --gc-sections -melf_x86_64 -shared --no-rosegment #objdump: --syms -dw .*: +file format elf64-x86-64 diff --git a/ld/testsuite/ld-x86-64/pr27491-2.d b/ld/testsuite/ld-x86-64/pr27491-2.d index 753ebb64082..949c3cece09 100644 --- a/ld/testsuite/ld-x86-64/pr27491-2.d +++ b/ld/testsuite/ld-x86-64/pr27491-2.d @@ -1,5 +1,5 @@ #as: --64 -#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared +#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared --no-rosegment #objdump: --syms -dw .*: +file format elf64-x86-64 diff --git a/ld/testsuite/ld-x86-64/pr27491-3.d b/ld/testsuite/ld-x86-64/pr27491-3.d index 6dda5424fff..c7cba38d0a6 100644 --- a/ld/testsuite/ld-x86-64/pr27491-3.d +++ b/ld/testsuite/ld-x86-64/pr27491-3.d @@ -1,5 +1,5 @@ #as: --64 -#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared +#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared --no-rosegment #objdump: --syms -dw .*: +file format elf64-x86-64 diff --git a/ld/testsuite/ld-x86-64/pr27491-4.d b/ld/testsuite/ld-x86-64/pr27491-4.d index 54542fd2d1a..44d6c2f9af3 100644 --- a/ld/testsuite/ld-x86-64/pr27491-4.d +++ b/ld/testsuite/ld-x86-64/pr27491-4.d @@ -1,7 +1,7 @@ #source: pr27491-4a.s #source: pr27491-4b.s #as: --64 -#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared +#ld: --gc-sections -melf_x86_64 -z start-stop-gc -shared --no-rosegment #objdump: --syms -dw .*: +file format elf64-x86-64