From owner-dev-commits-ports-main@freebsd.org Tue Aug 10 20:43:29 2021 Return-Path: Delivered-To: dev-commits-ports-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 75C5566E78B; Tue, 10 Aug 2021 20:43:29 +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 4GklKF2dSqz53WM; Tue, 10 Aug 2021 20:43:29 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 42FE82276D; Tue, 10 Aug 2021 20:43:29 +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 17AKhTjW064995; Tue, 10 Aug 2021 20:43:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 17AKhTav064994; Tue, 10 Aug 2021 20:43:29 GMT (envelope-from git) Date: Tue, 10 Aug 2021 20:43:29 GMT Message-Id: <202108102043.17AKhTav064994@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Brooks Davis Subject: git: f4fb63c060f4 - main - devel/llvm12: lld fix compressed input sections MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: brooks X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f4fb63c060f4afb6d61e558b38a4092fadddacb1 Auto-Submitted: auto-generated X-BeenThere: dev-commits-ports-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commits to the main branch of the FreeBSD ports repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Aug 2021 20:43:29 -0000 The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/ports/commit/?id=f4fb63c060f4afb6d61e558b38a4092fadddacb1 commit f4fb63c060f4afb6d61e558b38a4092fadddacb1 Author: Brooks Davis AuthorDate: 2021-08-10 20:37:54 +0000 Commit: Brooks Davis CommitDate: 2021-08-10 20:42:12 +0000 devel/llvm12: lld fix compressed input sections Apply upstream lld fix for compressed input sections on BE targets [LLD] Support compressed input sections on big-endian targets This patch enables compressed input sections on big-endian targets by checking the target endianness and selecting an appropriate `Chdr` structure. Fixes PR51369 Differential Revision: https://reviews.llvm.org/D107635 MFH: 2021Q3 Sponsored by: DARPA --- devel/llvm12/Makefile | 2 +- devel/llvm12/files/patch-lld-be-compressed-debug | 154 +++++++++++++++++++++++ 2 files changed, 155 insertions(+), 1 deletion(-) diff --git a/devel/llvm12/Makefile b/devel/llvm12/Makefile index 5d4e7b48d8d8..edcbbda589d2 100644 --- a/devel/llvm12/Makefile +++ b/devel/llvm12/Makefile @@ -1,6 +1,6 @@ PORTNAME= llvm DISTVERSION= 12.0.1 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel lang MASTER_SITES= https://github.com/llvm/llvm-project/releases/download/llvmorg-${DISTVERSION:S/rc/-rc/}/ \ https://${PRE_}releases.llvm.org/${LLVM_RELEASE}/${RCDIR} diff --git a/devel/llvm12/files/patch-lld-be-compressed-debug b/devel/llvm12/files/patch-lld-be-compressed-debug new file mode 100644 index 000000000000..5b419a064e9d --- /dev/null +++ b/devel/llvm12/files/patch-lld-be-compressed-debug @@ -0,0 +1,154 @@ +commit c6ebc651b6fac9cf1d9f8c00ea49d29093003f85 +Author: Simon Atanasyan +Date: Fri Aug 6 13:29:47 2021 +0300 + + [LLD] Support compressed input sections on big-endian targets + + This patch enables compressed input sections on big-endian targets by + checking the target endianness and selecting an appropriate `Chdr` + structure. + + Fixes PR51369 + + Differential Revision: https://reviews.llvm.org/D107635 + +diff --git lld/ELF/InputSection.cpp lld/ELF/InputSection.cpp +index 1f9fa961fc2..7d952e9037f 100644 +--- lld/ELF/InputSection.cpp ++++ lld/ELF/InputSection.cpp +@@ -88,7 +88,22 @@ InputSectionBase::InputSectionBase(InputFile *file, uint64_t flags, + if (!zlib::isAvailable()) + error(toString(file) + ": contains a compressed section, " + + "but zlib is not available"); +- parseCompressedHeader(); ++ switch (config->ekind) { ++ case ELF32LEKind: ++ parseCompressedHeader(); ++ break; ++ case ELF32BEKind: ++ parseCompressedHeader(); ++ break; ++ case ELF64LEKind: ++ parseCompressedHeader(); ++ break; ++ case ELF64BEKind: ++ parseCompressedHeader(); ++ break; ++ default: ++ llvm_unreachable("unknown ELFT"); ++ } + } + } + +@@ -210,10 +225,7 @@ OutputSection *SectionBase::getOutputSection() { + // When a section is compressed, `rawData` consists with a header followed + // by zlib-compressed data. This function parses a header to initialize + // `uncompressedSize` member and remove the header from `rawData`. +-void InputSectionBase::parseCompressedHeader() { +- using Chdr64 = typename ELF64LE::Chdr; +- using Chdr32 = typename ELF32LE::Chdr; +- ++template void InputSectionBase::parseCompressedHeader() { + // Old-style header + if (name.startswith(".zdebug")) { + if (!toStringRef(rawData).startswith("ZLIB")) { +@@ -239,32 +251,13 @@ void InputSectionBase::parseCompressedHeader() { + assert(flags & SHF_COMPRESSED); + flags &= ~(uint64_t)SHF_COMPRESSED; + +- // New-style 64-bit header +- if (config->is64) { +- if (rawData.size() < sizeof(Chdr64)) { +- error(toString(this) + ": corrupted compressed section"); +- return; +- } +- +- auto *hdr = reinterpret_cast(rawData.data()); +- if (hdr->ch_type != ELFCOMPRESS_ZLIB) { +- error(toString(this) + ": unsupported compression type"); +- return; +- } +- +- uncompressedSize = hdr->ch_size; +- alignment = std::max(hdr->ch_addralign, 1); +- rawData = rawData.slice(sizeof(*hdr)); +- return; +- } +- +- // New-style 32-bit header +- if (rawData.size() < sizeof(Chdr32)) { ++ // New-style header ++ if (rawData.size() < sizeof(typename ELFT::Chdr)) { + error(toString(this) + ": corrupted compressed section"); + return; + } + +- auto *hdr = reinterpret_cast(rawData.data()); ++ auto *hdr = reinterpret_cast(rawData.data()); + if (hdr->ch_type != ELFCOMPRESS_ZLIB) { + error(toString(this) + ": unsupported compression type"); + return; +diff --git lld/ELF/InputSection.h lld/ELF/InputSection.h +index 5b91c1c90bd..c914d0b4215 100644 +--- lld/ELF/InputSection.h ++++ lld/ELF/InputSection.h +@@ -238,6 +238,7 @@ public: + } + + protected: ++ template + void parseCompressedHeader(); + void uncompress() const; + +diff --git lld/test/ELF/compressed-debug-input-err.s lld/test/ELF/compressed-debug-input-err.s +index 89773eca59d..0495a9eaa08 100644 +--- lld/test/ELF/compressed-debug-input-err.s ++++ lld/test/ELF/compressed-debug-input-err.s +@@ -3,6 +3,9 @@ + # RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o + # RUN: not ld.lld %t.o -o /dev/null -shared 2>&1 | FileCheck %s + ++# RUN: llvm-mc -filetype=obj -triple=powerpc64-unknown-unknown %s -o %t-be.o ++# RUN: not ld.lld %t-be.o -o /dev/null -shared 2>&1 | FileCheck %s ++ + ## Check we are able to report zlib uncompress errors. + # CHECK: error: {{.*}}.o:(.debug_str): uncompress failed: zlib error: Z_DATA_ERROR + +diff --git lld/test/ELF/compressed-debug-input.s lld/test/ELF/compressed-debug-input.s +index c9bfd3e5162..5b61ea8b384 100644 +--- lld/test/ELF/compressed-debug-input.s ++++ lld/test/ELF/compressed-debug-input.s +@@ -1,7 +1,9 @@ + # REQUIRES: zlib, x86 + + # RUN: llvm-mc -compress-debug-sections=zlib -filetype=obj -triple=x86_64-unknown-linux %s -o %t ++# RUN: llvm-mc -compress-debug-sections=zlib -filetype=obj -triple=powerpc64-unknown-unknown %s -o %t-be + # RUN: llvm-readobj --sections %t | FileCheck -check-prefix=ZLIB %s ++# RUN: llvm-readobj --sections %t-be | FileCheck -check-prefix=ZLIB %s + # ZLIB: Section { + # ZLIB: Index: 2 + # ZLIB: Name: .debug_str +@@ -21,7 +23,9 @@ + # ZLIB-NEXT: } + + # RUN: llvm-mc -compress-debug-sections=zlib-gnu -filetype=obj -triple=x86_64-unknown-linux %s -o %t2 ++# RUN: llvm-mc -compress-debug-sections=zlib-gnu -filetype=obj -triple=powerpc64-unknown-unknown %s -o %t2-be + # RUN: llvm-readobj --sections %t2 | FileCheck -check-prefix=GNU %s ++# RUN: llvm-readobj --sections %t2-be | FileCheck -check-prefix=GNU %s + # GNU: Section { + # GNU: Index: 2 + # GNU: Name: .zdebug_str +@@ -41,9 +45,13 @@ + + # RUN: ld.lld --hash-style=sysv %t -o %t.so -shared + # RUN: llvm-readobj --sections --section-data %t.so | FileCheck -check-prefix=DATA %s ++# RUN: ld.lld --hash-style=sysv %t-be -o %t-be.so -shared ++# RUN: llvm-readobj --sections --section-data %t-be.so | FileCheck -check-prefix=DATA %s + + # RUN: ld.lld --hash-style=sysv %t2 -o %t2.so -shared + # RUN: llvm-readobj --sections --section-data %t2.so | FileCheck -check-prefix=DATA %s ++# RUN: ld.lld --hash-style=sysv %t2-be -o %t2-be.so -shared ++# RUN: llvm-readobj --sections --section-data %t2-be.so | FileCheck -check-prefix=DATA %s + + # DATA: Section { + # DATA: Index: 6