From nobody Sun Feb 27 12:56:09 2022 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 6EAF419E6C01; Sun, 27 Feb 2022 12:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4K63RF2fjpz3m87; Sun, 27 Feb 2022 12:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645966569; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=r1ym17dg9m3c0k8p+Mj/zC2Y9+k8sqNQuqwRuiPlHBE=; b=TqmK5Jd1t3KpKw1bwXy4iHVBYX1AqjhFDe8NLKOUXu0vEuP7eKobt/a3qu/KWhNRJv+vPS OocHMMuBIIMj4w7cY5GMypMWf3GGL86YFaQOqgoX6/ewL5f1bux2aMP0CfwqMECzxjwMgl ayML6vYkxlV7OguuF9DKviZ4uYNqUypC9fPd3/g7PhzeHj1yS7VVr8kAeJgdm05O6Yaf6z 0TnTrOYB5ZGeyfZDJdkPcsMC90cqXEGsL9EdbBhZpgdxFiMUsgod0XHph8pu1ySXWg53bc ErqdSqxGJ9bprZNhhwjcT8IgnHsY5CUf4ibnPwyceotsxoGSiaqzQgz+OTP1oQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3B6222799A; Sun, 27 Feb 2022 12:56:09 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 21RCu9ks027043; Sun, 27 Feb 2022 12:56:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 21RCu9De027042; Sun, 27 Feb 2022 12:56:09 GMT (envelope-from git) Date: Sun, 27 Feb 2022 12:56:09 GMT Message-Id: <202202271256.21RCu9De027042@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dimitry Andric Subject: git: 298c3e8d6b64 - main - Apply lld fixes for internal errors building perl on 32-bit PowerPC List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: dim X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 298c3e8d6b6405cbea13a7a1a1fbc1ad5a45c378 Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1645966569; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=r1ym17dg9m3c0k8p+Mj/zC2Y9+k8sqNQuqwRuiPlHBE=; b=P01tklZ/hcVKQCgqdFx3p/HKBz2JxvMM8jnwY8elK4yrO92AcRHyH7WlTkO7dnq9qC4J42 SnW9wQMGitihInqItVAXgA/kNbkRBE1LoYrqfGXIHNzPdGavO712DPbPQVW47oNTamlBQU HJY9zNAifjvSNdmfaoHlfesZifa4oGPrwJtb0BunPlv/mIQo+R5P8z3iajy7Y923eCN4SB /uKHW84t7rxuB84ZEvtju01yApCuKFNpncmjRUmXV7kkA6OGThX8R8z6YdI8bMq8RR0LkQ BJgEeHAPXBO4p7NCyjhLCYV/dz259GzmCadkL2tByZ5khUCPCNUadFK1S8rZkQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1645966569; a=rsa-sha256; cv=none; b=Hf5HvAOehTpVveeGjz7HWBalnOknR+vGqTx3b8Ml7F7Z9z3INzYBlba5hEF+KxXXYq22d7 so5dxGaAQDmKqNFf+JpDnSWs0M6BeiqBUZRaNp+clZf5VM9C7FhcgRBvWHnLemafyK9WDc sBS4z0y0TEtn4xyX8mbLRZ5ocXDaYj24nQCXbyay7dksOtXnh3sMzCU0s0G25PeghAUtlk y9gUT2sWp+DvsnnVtztOAaxJtPeQDSIR0sm/sHw9/4e5fltjeEmMB/JCDjpn87UMFQ/BgF PfM7RShxsk1vknHkRzlZJF0YFuql8g621Hhqstt1NibneOgn21PWEPeGKANBJw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by dim: URL: https://cgit.FreeBSD.org/src/commit/?id=298c3e8d6b6405cbea13a7a1a1fbc1ad5a45c378 commit 298c3e8d6b6405cbea13a7a1a1fbc1ad5a45c378 Author: Dimitry Andric AuthorDate: 2022-02-27 12:53:19 +0000 Commit: Dimitry Andric CommitDate: 2022-02-27 12:53:19 +0000 Apply lld fixes for internal errors building perl on 32-bit PowerPC Merge commit f457863ae345 from llvm git (by Fangrui Song): [ELF] Support REL-format R_AARCH64_NONE relocation -fprofile-use=/-fprofile-sample-use= compiles may produce REL-format .rel.llvm.call-graph-profile even if the prevailing format is RELA on AArch64. Add R_AARCH64_NONE to getImplicitAddend to fix this linker error: ``` ld.lld: error: internal linker error: cannot read addend for relocation R_AARCH64_NONE PLEASE submit a bug report to https://crbug.com and run tools/clang/scripts/process_crashreports.py (only works inside Google) which will upload a report and include the crash backtrace. ``` Merge commit 53fc5d9b9a01 from llvm git (by Fangrui Song): [ELF] Support R_PPC_NONE/R_PPC64_NONE in getImplicitAddend Similar to f457863ae345d2635026501f5383e0e625869639 Merge commit 767e64fc11d7 from llvm git (by Fangrui Song): [ELF] Support some absolute/PC-relative relocation types for REL format ctfconvert seems to use REL-format `.rel.SUNW_dof` for 32-bit architectures. ``` Binary file usr/ports/lang/perl5.32/work/perl-5.32.1/dtrace_mini.o matches [alfredo.junior@dell-a ~/tmp/llvm-bug]$ readelf -r dtrace_mini.o Relocation section (.rel.SUNW_dof): r_offset r_info r_type st_value st_name 00000184 0000281a R_PPC_REL32 00000000 $dtrace1772974259.Perl_dtrace_probe_load ``` Support R_PPC_REL32 to fix `ld.lld: error: drti.c:(.SUNW_dof+0x4E4): internal linker error: cannot read addend for relocation R_PPC_REL32`. While here, add some common relocation types for AArch64, PPC, and PPC64. We perform minimum tests. Reviewed By: adalava, arichardson Differential Revision: https://reviews.llvm.org/D120535 Requested by: alfredo MFC after: 3 days --- contrib/llvm-project/lld/ELF/Arch/AArch64.cpp | 7 +++++++ contrib/llvm-project/lld/ELF/Arch/PPC.cpp | 15 +++++++++++++++ contrib/llvm-project/lld/ELF/Arch/PPC64.cpp | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/contrib/llvm-project/lld/ELF/Arch/AArch64.cpp b/contrib/llvm-project/lld/ELF/Arch/AArch64.cpp index c1ab0e97efe2..0d03617ecf76 100644 --- a/contrib/llvm-project/lld/ELF/Arch/AArch64.cpp +++ b/contrib/llvm-project/lld/ELF/Arch/AArch64.cpp @@ -199,6 +199,13 @@ int64_t AArch64::getImplicitAddend(const uint8_t *buf, RelType type) const { switch (type) { case R_AARCH64_TLSDESC: return read64(buf + 8); + case R_AARCH64_NONE: + return 0; + case R_AARCH64_PREL32: + return SignExtend64<32>(read32(buf)); + case R_AARCH64_ABS64: + case R_AARCH64_PREL64: + return read64(buf); default: internalLinkerError(getErrorLocation(buf), "cannot read addend for relocation " + toString(type)); diff --git a/contrib/llvm-project/lld/ELF/Arch/PPC.cpp b/contrib/llvm-project/lld/ELF/Arch/PPC.cpp index aaecef6ee94f..583cb3afda4c 100644 --- a/contrib/llvm-project/lld/ELF/Arch/PPC.cpp +++ b/contrib/llvm-project/lld/ELF/Arch/PPC.cpp @@ -27,6 +27,7 @@ public: RelExpr getRelExpr(RelType type, const Symbol &s, const uint8_t *loc) const override; RelType getDynRel(RelType type) const override; + int64_t getImplicitAddend(const uint8_t *buf, RelType type) const override; void writeGotHeader(uint8_t *buf) const override; void writePltHeader(uint8_t *buf) const override { llvm_unreachable("should call writePPC32GlinkSection() instead"); @@ -274,6 +275,20 @@ RelType PPC::getDynRel(RelType type) const { return R_PPC_NONE; } +int64_t PPC::getImplicitAddend(const uint8_t *buf, RelType type) const { + switch (type) { + case R_PPC_NONE: + return 0; + case R_PPC_ADDR32: + case R_PPC_REL32: + return SignExtend64<32>(read32(buf)); + default: + internalLinkerError(getErrorLocation(buf), + "cannot read addend for relocation " + toString(type)); + return 0; + } +} + static std::pair fromDTPREL(RelType type, uint64_t val) { uint64_t dtpBiasedVal = val - 0x8000; switch (type) { diff --git a/contrib/llvm-project/lld/ELF/Arch/PPC64.cpp b/contrib/llvm-project/lld/ELF/Arch/PPC64.cpp index a0c2d1617caa..cd626acb8c60 100644 --- a/contrib/llvm-project/lld/ELF/Arch/PPC64.cpp +++ b/contrib/llvm-project/lld/ELF/Arch/PPC64.cpp @@ -369,6 +369,7 @@ public: RelExpr getRelExpr(RelType type, const Symbol &s, const uint8_t *loc) const override; RelType getDynRel(RelType type) const override; + int64_t getImplicitAddend(const uint8_t *buf, RelType type) const override; void writePltHeader(uint8_t *buf) const override; void writePlt(uint8_t *buf, const Symbol &sym, uint64_t pltEntryAddr) const override; @@ -1067,6 +1068,22 @@ RelType PPC64::getDynRel(RelType type) const { return R_PPC64_NONE; } +int64_t PPC64::getImplicitAddend(const uint8_t *buf, RelType type) const { + switch (type) { + case R_PPC64_NONE: + return 0; + case R_PPC64_REL32: + return SignExtend64<32>(read32(buf)); + case R_PPC64_ADDR64: + case R_PPC64_REL64: + return read64(buf); + default: + internalLinkerError(getErrorLocation(buf), + "cannot read addend for relocation " + toString(type)); + return 0; + } +} + void PPC64::writeGotHeader(uint8_t *buf) const { write64(buf, getPPC64TocBase()); }