diff --git a/D69869-1d40c4150630729a9c1ce5119a8027dac93a5b2d.patch b/D69869-1d40c4150630729a9c1ce5119a8027dac93a5b2d.patch new file mode 100644 index 0000000..3a384ba --- /dev/null +++ b/D69869-1d40c4150630729a9c1ce5119a8027dac93a5b2d.patch @@ -0,0 +1,39 @@ +From 1d40c4150630729a9c1ce5119a8027dac93a5b2d Mon Sep 17 00:00:00 2001 +From: Gokturk Yuksek +Date: Fri, 14 Feb 2020 14:12:45 +0000 +Subject: [PATCH] [clang-tools-extra] fix the check for if '-latomic' is + necessary + +Summary: +The CheckAtomic module performs two tests to determine if passing +'-latomic' to the linker is required: one for 64-bit atomics, and +another for non-64-bit atomics. clangd only uses the result from +HAVE_CXX_ATOMICS64_WITHOUT_LIB. This is incomplete because there are +uses of non-64-bit atomics in the code, such as the ReplyOnce::Replied +of type std::atomic defined in clangd/ClangdLSPServer.cpp. + +Fix by also checking for the result of HAVE_CXX_ATOMICS_WITHOUT_LIB. + +See also: https://reviews.llvm.org/D68964 + +Reviewers: ilya-biryukov, nridge, kadircet, beanz, compnerd, luismarques +Reviewed By: luismarques +Tags: #clang +Differential Revision: https://reviews.llvm.org/D69869 +--- + clang-tools-extra/clangd/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/clang-tools-extra/clangd/CMakeLists.txt b/clang-tools-extra/clangd/CMakeLists.txt +index e3eccb50a496..fc5a07e69e9d 100644 +--- a/clang-tools-extra/clangd/CMakeLists.txt ++++ b/clang-tools-extra/clangd/CMakeLists.txt +@@ -30,7 +30,7 @@ if(CLANG_BUILT_STANDALONE) + endif() + + set(CLANGD_ATOMIC_LIB "") +-if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) ++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB) + list(APPEND CLANGD_ATOMIC_LIB "atomic") + endif() + diff --git a/D74399-9816e726e747d72e0c5ac92aa20e652031a10448.patch b/D74399-9816e726e747d72e0c5ac92aa20e652031a10448.patch new file mode 100644 index 0000000..e382923 --- /dev/null +++ b/D74399-9816e726e747d72e0c5ac92aa20e652031a10448.patch @@ -0,0 +1,82 @@ +From 9816e726e747d72e0c5ac92aa20e652031a10448 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Lu=C3=ADs=20Marques?= +Date: Fri, 14 Feb 2020 13:44:42 +0000 +Subject: [PATCH] [Driver][RISCV] Add RedHat Linux RISC-V triple + +Summary: Adds the RedHat Linux triple to the list of 64-bit RISC-V triples. +Without this the gcc libraries wouldn't be found by clang on a redhat/fedora +system, as the search list included `/usr/lib/gcc/riscv64-redhat-linux-gnu` +but the correct path didn't include the `-gnu` suffix. + +Reviewers: lenary, asb, dlj +Reviewed By: lenary +Tags: #clang +Differential Revision: https://reviews.llvm.org/D74399 +--- + clang/lib/Driver/ToolChains/Gnu.cpp | 1 + + .../usr/lib/gcc/riscv64-redhat-linux/9/crtbegin.o | 0 + .../usr/lib/gcc/riscv64-redhat-linux/9/crtend.o | 0 + .../usr/lib/gcc/riscv64-redhat-linux/9/crti.o | 0 + .../usr/lib/gcc/riscv64-redhat-linux/9/crtn.o | 0 + .../fedora_31_riscv64_tree/usr/lib64/crt1.o | 0 + clang/test/Driver/linux-ld.c | 15 +++++++++++++++ + 7 files changed, 16 insertions(+) + create mode 100644 clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtbegin.o + create mode 100644 clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtend.o + create mode 100644 clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crti.o + create mode 100644 clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtn.o + create mode 100644 clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib64/crt1.o + +diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp +index bc67a7e0cdf9..dadbfa288a03 100644 +--- a/clang/lib/Driver/ToolChains/Gnu.cpp ++++ b/clang/lib/Driver/ToolChains/Gnu.cpp +@@ -2090,6 +2090,7 @@ void Generic_GCC::GCCInstallationDetector::AddDefaultGCCPrefixes( + static const char *const RISCV64Triples[] = {"riscv64-unknown-linux-gnu", + "riscv64-linux-gnu", + "riscv64-unknown-elf", ++ "riscv64-redhat-linux", + "riscv64-suse-linux"}; + + static const char *const SPARCv8LibDirs[] = {"/lib32", "/lib"}; +diff --git a/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtbegin.o b/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtbegin.o +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtend.o b/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtend.o +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crti.o b/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crti.o +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtn.o b/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib/gcc/riscv64-redhat-linux/9/crtn.o +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib64/crt1.o b/clang/test/Driver/Inputs/fedora_31_riscv64_tree/usr/lib64/crt1.o +new file mode 100644 +index 000000000000..e69de29bb2d1 +diff --git a/clang/test/Driver/linux-ld.c b/clang/test/Driver/linux-ld.c +index 51227550b528..ec539522c25d 100644 +--- a/clang/test/Driver/linux-ld.c ++++ b/clang/test/Driver/linux-ld.c +@@ -769,6 +769,21 @@ + // CHECK-FEDORA-21-AARCH64: "{{.*}}/usr/lib/gcc/aarch64-redhat-linux/4.9.0{{/|\\\\}}crtend.o" + // CHECK-FEDORA-21-AARCH64: "{{.*}}/usr/lib/gcc/aarch64-redhat-linux/4.9.0/../../../../lib64{{/|\\\\}}crtn.o" + // ++// Check Fedora 31 on riscv64. ++// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ ++// RUN: --target=riscv64-redhat-linux -rtlib=platform \ ++// RUN: --gcc-toolchain="" \ ++// RUN: --sysroot=%S/Inputs/fedora_31_riscv64_tree \ ++// RUN: | FileCheck --check-prefix=CHECK-FEDORA-31-RISCV64 %s ++// CHECK-FEDORA-31-RISCV64: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" ++// CHECK-FEDORA-31-RISCV64: "{{.*}}/usr/lib/gcc/riscv64-redhat-linux/9/../../../../lib64{{/|\\\\}}crt1.o" ++// CHECK-FEDORA-31-RISCV64: "{{.*}}/usr/lib/gcc/riscv64-redhat-linux/9{{/|\\\\}}crti.o" ++// CHECK-FEDORA-31-RISCV64: "{{.*}}/usr/lib/gcc/riscv64-redhat-linux/9{{/|\\\\}}crtbegin.o" ++// CHECK-FEDORA-31-RISCV64: "-L[[SYSROOT]]/usr/lib/gcc/riscv64-redhat-linux/9" ++// CHECK-FEDORA-31-RISCV64: "-L[[SYSROOT]]/usr/lib/gcc/riscv64-redhat-linux/9/../../../../lib64" ++// CHECK-FEDORA-31-RISCV64: "{{.*}}/usr/lib/gcc/riscv64-redhat-linux/9{{/|\\\\}}crtend.o" ++// CHECK-FEDORA-31-RISCV64: "{{.*}}/usr/lib/gcc/riscv64-redhat-linux/9{{/|\\\\}}crtn.o" ++// + // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ + // RUN: --target=arm-unknown-linux-gnueabi -rtlib=platform \ + // RUN: --gcc-toolchain="" \ diff --git a/clang.spec b/clang.spec index 862e177..2fcfbb9 100644 --- a/clang.spec +++ b/clang.spec @@ -99,6 +99,9 @@ Patch4: 0002-gtest-reorg.patch Patch11: 0001-ToolChain-Add-lgcc_s-to-the-linker-flags-when-using-.patch Patch13: 0001-Make-funwind-tables-the-default-for-all-archs.patch +Patch6: D69869-1d40c4150630729a9c1ce5119a8027dac93a5b2d.patch +Patch7: D74399-9816e726e747d72e0c5ac92aa20e652031a10448.patch + # Not Upstream Patch15: 0001-clang-Don-t-install-static-libraries.patch @@ -252,8 +255,14 @@ pathfix.py -i %{__python3} -pn \ %patch13 -p2 -b .unwind-all %patch15 -p2 -b .no-install-static +%patch7 -p1 -b .riscv64-redhat-triplet + mv ../%{clang_tools_srcdir} tools/extra +pushd tools/extra/%{clang_tools_srcdir} +%patch6 -p1 -b .fix-atomic-check +popd + pathfix.py -i %{__python3} -pn \ tools/clang-format/*.py \ tools/clang-format/git-clang-format \