commit 62059a7c7f0ccfd8ed2db8edf8f83cd3394bb19e Author: CentOS Sources Date: Tue May 7 06:59:38 2019 -0400 import lld-7.0.1-3.module+el8+2753+d9ab2218 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a535748 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/lld-7.0.1.src.tar.xz diff --git a/.lld.metadata b/.lld.metadata new file mode 100644 index 0000000..cad80df --- /dev/null +++ b/.lld.metadata @@ -0,0 +1 @@ +3b69e107f27d466488838d5fa65bdfd77b885007 SOURCES/lld-7.0.1.src.tar.xz diff --git a/SOURCES/0001-CMake-Check-for-gtest-headers-even-if-lit.py-is-not-.patch b/SOURCES/0001-CMake-Check-for-gtest-headers-even-if-lit.py-is-not-.patch new file mode 100644 index 0000000..c4af14d --- /dev/null +++ b/SOURCES/0001-CMake-Check-for-gtest-headers-even-if-lit.py-is-not-.patch @@ -0,0 +1,47 @@ +From e5bdf4580677da063abe8d3880fbab9eaa7a7efe Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 30 Aug 2018 08:53:56 -0700 +Subject: [PATCH] CMake: Check for gtest headers even if lit.py is not present + +This makes it possible to build the unittests even withotu a full +checkout of the llvm source tree. +--- + CMakeLists.txt | 15 +++++++++------ + 1 file changed, 9 insertions(+), 6 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index e2fbdbf..c9b2927 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -75,6 +75,15 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.") + set(LLVM_UTILS_PROVIDED ON) + endif() + ++ # Check for gtest ++ set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) ++ if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h ++ AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} ++ AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) ++ add_subdirectory(${UNITTEST_DIR} utils/unittest) ++ endif() ++ ++ # Check for lit + if(EXISTS ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py) + # Note: path not really used, except for checking if lit was found + set(LLVM_LIT ${LLVM_MAIN_SRC_DIR}/utils/lit/lit.py) +@@ -84,12 +93,6 @@ Please install Python or specify the PYTHON_EXECUTABLE CMake variable.") + set(LLVM_UTILS_PROVIDED ON) + set(LLD_TEST_DEPS FileCheck not) + endif() +- set(UNITTEST_DIR ${LLVM_MAIN_SRC_DIR}/utils/unittest) +- if(EXISTS ${UNITTEST_DIR}/googletest/include/gtest/gtest.h +- AND NOT EXISTS ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX} +- AND EXISTS ${UNITTEST_DIR}/CMakeLists.txt) +- add_subdirectory(${UNITTEST_DIR} utils/unittest) +- endif() + else() + # Seek installed Lit. + find_program(LLVM_LIT +-- +1.8.3.1 + diff --git a/SOURCES/0001-Partial-support-of-SHT_GROUP-without-flag.patch b/SOURCES/0001-Partial-support-of-SHT_GROUP-without-flag.patch new file mode 100644 index 0000000..c060ba3 --- /dev/null +++ b/SOURCES/0001-Partial-support-of-SHT_GROUP-without-flag.patch @@ -0,0 +1,121 @@ +diff -r -u --new-file lld-7.0.1.src.orig/ELF/InputFiles.cpp lld-7.0.1.src/ELF/InputFiles.cpp +--- lld-7.0.1.src.orig/ELF/InputFiles.cpp 2019-01-25 10:12:56.412850573 +0000 ++++ lld-7.0.1.src/ELF/InputFiles.cpp 2019-01-25 10:14:50.557726268 +0000 +@@ -324,17 +324,6 @@ + return Signature; + } + +-template +-ArrayRef::Elf_Word> +-ObjFile::getShtGroupEntries(const Elf_Shdr &Sec) { +- const ELFFile &Obj = this->getObj(); +- ArrayRef Entries = +- CHECK(Obj.template getSectionContentsAsArray(&Sec), this); +- if (Entries.empty() || Entries[0] != GRP_COMDAT) +- fatal(toString(this) + ": unsupported SHT_GROUP format"); +- return Entries.slice(1); +-} +- + template bool ObjFile::shouldMerge(const Elf_Shdr &Sec) { + // On a regular link we don't merge sections if -O0 (default is -O1). This + // sometimes makes the linker significantly faster, although the output will +@@ -439,22 +428,33 @@ + case SHT_GROUP: { + // De-duplicate section groups by their signatures. + StringRef Signature = getShtGroupSignature(ObjSections, Sec); +- bool IsNew = ComdatGroups.insert(CachedHashStringRef(Signature)).second; + this->Sections[I] = &InputSection::Discarded; + +- // If it is a new section group, we want to keep group members. +- // Group leader sections, which contain indices of group members, are +- // discarded because they are useless beyond this point. The only +- // exception is the -r option because in order to produce re-linkable +- // object files, we want to pass through basically everything. ++ ArrayRef Entries = ++ CHECK(Obj.template getSectionContentsAsArray(&Sec), this); ++ if (Entries.empty()) ++ fatal(toString(this) + ": empty SHT_GROUP"); ++ ++ // The first word of a SHT_GROUP section contains flags. Currently, ++ // the standard defines only "GRP_COMDAT" flag for the COMDAT group. ++ // An group with the empty flag doesn't define anything; such sections ++ // are just skipped. ++ if (Entries[0] == 0) ++ continue; ++ ++ if (Entries[0] != GRP_COMDAT) ++ fatal(toString(this) + ": unsupported SHT_GROUP format"); ++ ++ bool IsNew = ComdatGroups.insert(CachedHashStringRef(Signature)).second; + if (IsNew) { + if (Config->Relocatable) + this->Sections[I] = createInputSection(Sec); + continue; + } + ++ + // Otherwise, discard group members. +- for (uint32_t SecIndex : getShtGroupEntries(Sec)) { ++ for (uint32_t SecIndex : Entries.slice(1)) { + if (SecIndex >= Size) + fatal(toString(this) + + ": invalid section index in group: " + Twine(SecIndex)); +diff -r -u --new-file lld-7.0.1.src.orig/test/ELF/sht-group-empty.test lld-7.0.1.src/test/ELF/sht-group-empty.test +--- lld-7.0.1.src.orig/test/ELF/sht-group-empty.test 1970-01-01 00:00:00.000000000 +0000 ++++ lld-7.0.1.src/test/ELF/sht-group-empty.test 2019-01-25 10:13:19.312026250 +0000 +@@ -0,0 +1,55 @@ ++# RUN: yaml2obj %s -o %t.o ++# RUN: ld.lld %t.o %t.o -o %t -r ++# RUN: llvm-readobj -s %t | FileCheck %s ++ ++# CHECK: Name: .text.foo ++# CHECK: Name: .rela.text.foo ++ ++--- !ELF ++FileHeader: ++ Class: ELFCLASS64 ++ Data: ELFDATA2LSB ++ Type: ET_REL ++ Machine: EM_X86_64 ++Sections: ++ - Name: .group ++ Type: SHT_GROUP ++ Link: .symtab ++ Info: foo ++ Members: ++ - SectionOrType: GRP_COMDAT ++ - SectionOrType: .text.foo ++ - SectionOrType: .text.bar ++ - SectionOrType: .note ++ - Name: .note ++ Type: SHT_NOTE ++ Flags: [ SHF_GROUP ] ++ - Name: .text.foo ++ Type: SHT_PROGBITS ++ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] ++ - Name: .text.bar ++ Type: SHT_PROGBITS ++ Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ] ++ - Name: .rela.text.foo ++ Type: SHT_RELA ++ Flags: [ SHF_INFO_LINK, SHF_GROUP ] ++ Link: .symtab ++ Info: .text.foo ++ Relocations: ++ - Offset: 0x0000000000000000 ++ Symbol: foo ++ Type: R_X86_64_64 ++ - Name: .rela.text.bar ++ Type: SHT_RELA ++ Flags: [ SHF_INFO_LINK, SHF_GROUP ] ++ Link: .symtab ++ Info: .text.bar ++ Relocations: ++ - Offset: 0x0000000000000000 ++ Symbol: bar ++ Type: R_X86_64_64 ++Symbols: ++ Global: ++ - Name: foo ++ - Name: bar ++ diff --git a/SOURCES/0001-lld-Prefer-using-the-newest-installed-python-version.patch b/SOURCES/0001-lld-Prefer-using-the-newest-installed-python-version.patch new file mode 100644 index 0000000..c8499d2 --- /dev/null +++ b/SOURCES/0001-lld-Prefer-using-the-newest-installed-python-version.patch @@ -0,0 +1,26 @@ +From 39ce39a20a0854380997df7912e739b6c348f8a1 Mon Sep 17 00:00:00 2001 +From: Tom Stellard +Date: Thu, 30 Aug 2018 14:59:06 -0700 +Subject: [PATCH] [lld] Prefer using the newest installed python version rather + than 2.7 + +This only affects the lit tests, which seem to pass fine with python3. +--- + CMakeLists.txt | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 087377d..6e5f2a7 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -56,7 +56,6 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + include(HandleLLVMOptions) + + if(LLVM_INCLUDE_TESTS) +- set(Python_ADDITIONAL_VERSIONS 2.7) + include(FindPythonInterp) + if(NOT PYTHONINTERP_FOUND) + message(FATAL_ERROR +-- +1.8.3.1 + diff --git a/SPECS/lld.spec b/SPECS/lld.spec new file mode 100644 index 0000000..3b701db --- /dev/null +++ b/SPECS/lld.spec @@ -0,0 +1,166 @@ +%global lld_srcdir lld-%{version}%{?rc_ver:rc%{rc_ver}}.src + +Name: lld +Version: 7.0.1 +Release: 3%{?dist} +Summary: The LLVM Linker + +License: NCSA +URL: http://llvm.org +Source0: http://%{?rc_ver:pre}releases.llvm.org/%{version}/%{?rc_ver:rc%{rc_ver}}/%{lld_srcdir}.tar.xz + +Patch0: 0001-CMake-Check-for-gtest-headers-even-if-lit.py-is-not-.patch +Patch1: 0001-lld-Prefer-using-the-newest-installed-python-version.patch +Patch2: 0001-Partial-support-of-SHT_GROUP-without-flag.patch + +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: cmake +BuildRequires: llvm-devel = %{version} +BuildRequires: llvm-static = %{version} +BuildRequires: ncurses-devel +BuildRequires: zlib-devel +BuildRequires: chrpath + +# For make check: +# This pulls in /usr/bin/python3 +BuildRequires: python3-devel +BuildRequires: python3-lit = 0.7.1 +BuildRequires: llvm-googletest + +%description +The LLVM project linker. + +%package devel +Summary: Libraries and header files for LLD + +%description devel +This package contains library and header files needed to develop new native +programs that use the LLD infrastructure. + +%package libs +Summary: LLD shared libraries + +%description libs +Shared libraries for LLD. + +%prep +%autosetup -n %{name}-%{version}%{?rc_ver:rc%{rc_ver}}.src -p1 + +%build + +mkdir %{_target_platform} +cd %{_target_platform} + +%cmake .. \ + -DLLVM_LINK_LLVM_DYLIB:BOOL=ON \ + -DLLVM_DYLIB_COMPONENTS="all" \ + -DLLVM_INCLUDE_TESTS=ON \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_LIT_ARGS="-sv \ + -DFileCheck=%{_libdir}/llvm/FileCheck \ + -Dcount=%{_libdir}/llvm/count \ + -Dnot=%{_libdir}/llvm/not \ + --path %{_libdir}/llvm" \ +%if 0%{?__isa_bits} == 64 + -DLLVM_LIBDIR_SUFFIX=64 +%else + -DLLVM_LIBDIR_SUFFIX= +%endif + +%make_build + +%install +cd %{_target_platform} +%make_install + +# Remove rpath +chrpath --delete %{buildroot}%{_bindir}/* +chrpath --delete %{buildroot}%{_libdir}/*.so* + +%check +make -C %{_target_platform} %{?_smp_mflags} check-lld + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%files +%{_bindir}/lld* +%{_bindir}/ld.lld +%{_bindir}/ld64.lld +%{_bindir}/wasm-ld + +%files devel +%{_includedir}/lld +%{_libdir}/liblld*.so + +%files libs +%{_libdir}/liblld*.so.* + +%changelog +* Mon Jan 14 2019 sguelton@redhat.com - 7.0.1-3 +- Fix lld + annobin integration & Setup basic CI tests + +* Sat Dec 15 2018 Tom Stellard - 7.0.1-2 +- Bump required python3-lit version + +* Fri Dec 14 2018 Tom Stellard - 7.0.1-1 +- 7.0.1-1 Release + +* Mon Dec 10 2018 Tom Stellard - 7.0.1-0.2.rc3 +- 7.0.1-rc3 Release + +* Tue Nov 27 2018 Tom Stellard - 7.0.0-1 +- 7.0.0 Release + +* Mon Oct 01 2018 Tom Stellard - 6.0.1-2 +- Drop scl macros + +* Wed Jun 27 2018 Tom Stellard - 6.0.1-1 +- 6.0.1 Release + +* Fri May 11 2018 Tom Stellard - 6.0.1-0.1.rc1 +- 6.0.1-rc1 Release + +* Thu Mar 08 2018 Tom Stellard - 6.0.0-1 +- 6.0.0 Release + +* Tue Feb 13 2018 Tom Stellard - 6.0.0-0.3.rc2 +- 6.0.0-rc2 Release + +* Thu Feb 08 2018 Fedora Release Engineering - 6.0.0-0.2.rc1 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Jan 25 2018 Tom Stellard - 6.0.0-0.1.rc1 +- 6.0.0-rc1 Release + +* Thu Dec 21 2017 Tom Stellard - 5.0.1-1 +- 5.0.1 Release + +* Mon Sep 11 2017 Tom Stellard - 5.0.0-1 +- 5.0.0 Release + +* Thu Aug 03 2017 Fedora Release Engineering - 4.0.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 4.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Thu Jul 06 2017 Tom Stellard - 4.0.1-2 +- Backport r307092 + +* Tue Jul 04 2017 Tom Stellard - 4.0.1-1 +- 4.0.1 Release + +* Tue Jul 04 2017 Tom Stellard - 4.0.0-4 +- Fix build without llvm-static + +* Wed May 31 2017 Tom Stellard - 4.0.0-3 +- Remove llvm-static dependency + +* Mon May 15 2017 Fedora Release Engineering - 4.0.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Tue Mar 14 2017 Tom Stellard - 4.0.0-1 +- lld 4.0.0 Final Release