From patchwork Sat Apr 4 19:10:21 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John David Anglin X-Patchwork-Id: 132691 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 204EB4BA2E29 for ; Sat, 4 Apr 2026 19:11:01 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 204EB4BA2E29 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=bell.net header.i=@bell.net header.a=rsa-sha256 header.s=selector1 header.b=O4AaQZe3 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from cmx-torrgo001.bell.net (mta-tor-008.bell.net [209.71.212.46]) by sourceware.org (Postfix) with ESMTP id 2EE324BA2E28 for ; Sat, 4 Apr 2026 19:10:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2EE324BA2E28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=bell.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bell.net ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 2EE324BA2E28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.71.212.46 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775329824; cv=none; b=qHKo+zhJlSU7eUbbMRoV+LVw97urJBefdlm1lMarQWAqbyyzhLIlcQxAFfEEYSE1Tl8Y3iJ6UByJ1uBxpZ2b3NDv60f7UwK2RUYX/wr0e7PLvC5b2aahV6JEnljonzYpCcQPJF1NBuupjDoUd7/LsQ4/I6MnzclG4C9ELmSb7Zc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775329824; c=relaxed/simple; bh=sJB9Xo/LNw7A8Pzh1ap6IjzU1QzjxD0AgqpHXNnESOk=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=cJZt1zBlw8KilJM9xeusbPFV7fEuL3/NFd7ROzu9xUrxTXPsa51iqc+1ez/mXGViV0Erb3lNVRDumNxKM8HBdkKhNVlwDo7aOQpsPOPM7DpLbGEO85I7/rg6i05JDIOBx/V7E3T4FpNjqFrWAC4ojmDjOo56o0Sxy2G4D3I0C4o= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2EE324BA2E28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bell.net; s=selector1; t=1775329824; bh=STXXmyM8AFLSTOSKiW4LdKPtgMGRiPBZwUnsLsplf2Y=; h=Date:From:To:Subject:Message-ID:MIME-Version:Content-Type; b=O4AaQZe3fBRXK/f2odQZFP6jnCbbBEtf6jpHGCe7hcGmn5qoWKiYrjFbShMKFMMflHhHFEWeRDggiN4gLe69ca5n7+DswcQyYe6qpYmryPECNI391p1F4uN147jJ1BACNiOMrqQMMP1ljRa4uzGoOtul0FB4Hud7Mvi+qcSbY/fvLM7wZzkkqLsbi9SzvlMLg6kjL50iyBvassT8LepXch1iQ0RqtqMqdIKQZFxy6sX5KQ/77K0TI/4tsbsGkM2DWtd6m5rp4DvLxDLbOphv9EAXZK4/J6vpsGUDCeKVW0Ne99hJ9n7hVWTqIqm5jhShqTVjqau/pKpiFKrRES4Krw== X-RG-SOPHOS: Clean X-RG-VADE-SC: 0 X-RG-VADE: Clean X-Originating-IP: [142.112.252.193] X-RG-Env-Sender: dave.anglin@bell.net X-RG-Rigid: 69B90D15021C63F3 X-RazorGate-Vade: dmFkZTGYzuz7sfMXCrkqGQCD1xP2vc+LMKKUk1m9N1hKrpt9n860wTy7G/TdVpnnO3eLezn03J5LBpg/YMwAIgxf9wUc2I5rQbt+WSakZq+aYJWsQIwW/JGvjpRi3yjmXtmpTbZabvFnzHBM7Xk8R0CEY6r16NYrnzlz3ShL95UoQJk4A1rt4s3/zmGnH1JWSEUufUSTVBLytGdPf2HKAlNjAL5Ln+jLpk5adoIDGEK89mNLYV5sEgqfGuu4877ullSvN9Pgx5MLReZS+KnXw7UMRVrlIN7wzmycsrEJXttYJshoZg92gHL3n+WKFj4frXKrVmNfsHkR+Xgn+9tNHCbVL8/1bmvvlPv98NBVx2BZmGue18SD8qo4Q0Fq3TiSp0OJneChQbZhjpBe5Mjk1NW9l7TC5FabYjpus7S6WQsmlaAnZIjzEzdJJGq25MYFTiCZNipcTXC+59ThFDbBpUta7OOiE055tTPaUzFayFsfcBLjWkWON6UvuC4hJbb1zWMPb2t4IPEKHx6xPj5wglJmQ0M9FBBp/Z0/m3EoSkhSS2dg51bpvNjDV2xi17glxfhpJnwkkY+j5i84XFSPJI7Mc4BJNO7YaQRLHbcaHab3lZeYf4bV3Taaoxxlu0Xu+LDTy9zTR3o7f/MyIfN7rN/7C4/hmPMvwaw3ZSGqq24niilxBg X-RazorGate-Vade-Verdict: clean 0 X-RazorGate-Vade-Classification: clean Received: from mx3210.local (142.112.252.193) by cmx-torrgo001.bell.net (authenticated as dave.anglin@bell.net) id 69B90D15021C63F3; Sat, 4 Apr 2026 15:10:23 -0400 Date: Sat, 4 Apr 2026 15:10:21 -0400 From: John David Anglin To: Binutils Cc: Helge Deller Subject: [committed] hppa64: Initial relro support for Linux Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP 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 Tested on hppa-unknown-linux-gnu. Committed to master. Dave --- hppa64: Initial relro support for Linux This also fixes the alignment of the data segment on Linux target. It must be page aligned to avoid inequivalent aliases. 2026-04-04 John David Anglin PR ld/12376 bfd/ChangeLog: * elf64-hppa.c (elf_backend_modify_segment_map): Don't use HP-UX specific routine on Linux. (elf_backend_want_dynrelro): Define to 1 on Linux. ld/ChangeLog: * emulparams/hppa64linux.sh (COMMONPAGESIZE): Define. (DATA_SEGMENT_ALIGN, DATA_SEGMENT_END, DATA_SEGMENT_RELRO_END): Define if $LD_FLAG != "N". (DATA_SECTION_ALIGNMENT): Define. * scripttempl/elf64hppa.sc: Revise handling of data segment. * testsuite/ld-elf/orphan-region.d: Remove xfail on Linux. diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 470c28f75d3..38558abe9c2 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -4596,6 +4596,9 @@ static const struct elf_size_info hppa64_elf_size_info = #define elf64_bed elf64_hppa_linux_bed #undef elf_backend_special_sections #define elf_backend_special_sections (elf64_hppa_special_sections + 1) +#undef elf_backend_modify_segment_map #undef elf_backend_want_p_paddr_set_to_zero +#undef elf_backend_want_dynrelro +#define elf_backend_want_dynrelro 1 #include "elf64-target.h" diff --git a/ld/emulparams/hppa64linux.sh b/ld/emulparams/hppa64linux.sh index d72c6bb9a84..d0352b66f4f 100644 --- a/ld/emulparams/hppa64linux.sh +++ b/ld/emulparams/hppa64linux.sh @@ -5,6 +5,18 @@ NO_REL_RELOCS=yes TEXT_START_ADDR=0x10000 TARGET_PAGE_SIZE=0x10000 MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" +if test "$LD_FLAG" = "N"; then + unset DATA_SEGMENT_ALIGN + unset DATA_SEGMENT_END + unset DATA_SEGMENT_RELRO_END +else + DATA_SEGMENT_ALIGN="ALIGN(${MAXPAGESIZE});\ + . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})" + DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);" + DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" +fi +DATA_SECTION_ALIGNMENT="${CREATE_SHLIB-${CREATE_PIE-ALIGN(8)}}" ARCH=hppa MACHINE=hppa2.0w NOP=0x08000240 diff --git a/ld/scripttempl/elf64hppa.sc b/ld/scripttempl/elf64hppa.sc index d093f88b8fb..7be32d90c98 100644 --- a/ld/scripttempl/elf64hppa.sc +++ b/ld/scripttempl/elf64hppa.sc @@ -106,14 +106,25 @@ test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESI test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE="" test -n "$RELRO_NOW" && unset SEPARATE_GOTPLT test -z "$ATTRS_SECTIONS" && ATTRS_SECTIONS=".gnu.attributes 0 : { KEEP (*(.gnu.attributes)) }" -DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))" -DATA_SEGMENT_RELRO_END="" -DATA_SEGMENT_END="" -if test -n "${COMMONPAGESIZE}"; then - DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})" - DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);" - DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" + +if test -z "$DATA_SEGMENT_ALIGN"; then + test -n "$CREATE_SHLIB$CREATE_PIE" && test -n "$SHLIB_DATA_ADDR" && COMMONPAGESIZE="" + test -z "$CREATE_SHLIB$CREATE_PIE" && test -n "$DATA_ADDR" && COMMONPAGESIZE="" + DATA_SEGMENT_ALIGN="ALIGN(${SEGMENT_SIZE}) + (. & (${MAXPAGESIZE} - 1))" + DATA_SEGMENT_RELRO_END="" + DATA_SEGMENT_END="" + if test -n "${COMMONPAGESIZE}"; then + if test "${SEGMENT_SIZE}" != "${MAXPAGESIZE}"; then + DATA_SEGMENT_ALIGN="ALIGN (${SEGMENT_SIZE}) - ((${MAXPAGESIZE} - .) & (${MAXPAGESIZE} - 1)); \ + . = DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})" + else + DATA_SEGMENT_ALIGN="DATA_SEGMENT_ALIGN (${MAXPAGESIZE}, ${COMMONPAGESIZE})" + fi + DATA_SEGMENT_END=". = DATA_SEGMENT_END (.);" + DATA_SEGMENT_RELRO_END=". = DATA_SEGMENT_RELRO_END (${SEPARATE_GOTPLT-0}, .);" + fi fi + if test -z "${INITIAL_READONLY_SECTIONS}${CREATE_SHLIB}"; then INITIAL_READONLY_SECTIONS=".interp ${RELOCATING-0} : { *(.interp) }" fi diff --git a/ld/testsuite/ld-elf/orphan-region.d b/ld/testsuite/ld-elf/orphan-region.d index ef21ec377cc..13fb31fff9f 100644 --- a/ld/testsuite/ld-elf/orphan-region.d +++ b/ld/testsuite/ld-elf/orphan-region.d @@ -1,7 +1,7 @@ #source: orphan-region.s #ld: -T orphan-region.ld -N -z stack-size=0 --no-warn-rwx-segments #readelf: -S -l --wide -#xfail: [uses_genelf] hppa*64*-*-* spu-*-* +#xfail: [uses_genelf] hppa*64*-*-hpux* spu-*-* # if not using elf.em, you don't get fancy orphan handling # spu twiddles LOAD range, hppa64 adds PHDR