[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , StringRef Component, // Check for runtime files in the new layout without the architecture first. std::string CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false); + SmallString<128> Path; for (const auto : getLibraryPaths()) { SmallString<128> P(LibPath); llvm::sys::path::append(P, CRTBasename); if (getVFS().exists(P)) return std::string(P); +if (Path.empty()) + Path = P; } + if (getTriple().isOSAIX()) +Path.clear(); - // Fall back to the old expected compiler-rt name if the new one does not - // exist. + // Check the filename for the old layout if the new one does not exist. CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true); - SmallString<128> Path(getCompilerRTPath()); - llvm::sys::path::append(Path, CRTBasename); + SmallString<128> OldPath(getCompilerRTPath()); + llvm::sys::path::append(OldPath, CRTBasename); + if (Path.empty() || getVFS().exists(OldPath)) +return std::string(OldPath); + + // If none is found, use a file name from the new layout, which may get + // printed in an error message, aiding users in knowing what Clang is + // looking for. nico wrote: Oh sorry, that comment was for #87866, which I think does change behavior outside of warning messages, combined with this change. https://crbug.com/335997052 has details. I'll move the comment to that other PR. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , StringRef Component, // Check for runtime files in the new layout without the architecture first. std::string CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false); + SmallString<128> Path; for (const auto : getLibraryPaths()) { SmallString<128> P(LibPath); llvm::sys::path::append(P, CRTBasename); if (getVFS().exists(P)) return std::string(P); +if (Path.empty()) + Path = P; } + if (getTriple().isOSAIX()) +Path.clear(); - // Fall back to the old expected compiler-rt name if the new one does not - // exist. + // Check the filename for the old layout if the new one does not exist. CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true); - SmallString<128> Path(getCompilerRTPath()); - llvm::sys::path::append(Path, CRTBasename); + SmallString<128> OldPath(getCompilerRTPath()); + llvm::sys::path::append(OldPath, CRTBasename); + if (Path.empty() || getVFS().exists(OldPath)) +return std::string(OldPath); + + // If none is found, use a file name from the new layout, which may get + // printed in an error message, aiding users in knowing what Clang is + // looking for. wzssyqa wrote: It is only about warning msg. Clang will try to find libraries for both new and old style paths. If you'd like to put the libraries in old style path/filename, you can use `-DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF`. Of course, even with the above configure option, if clang cannot find a library, it will warn with new style path. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , StringRef Component, // Check for runtime files in the new layout without the architecture first. std::string CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false); + SmallString<128> Path; for (const auto : getLibraryPaths()) { SmallString<128> P(LibPath); llvm::sys::path::append(P, CRTBasename); if (getVFS().exists(P)) return std::string(P); +if (Path.empty()) + Path = P; } + if (getTriple().isOSAIX()) +Path.clear(); - // Fall back to the old expected compiler-rt name if the new one does not - // exist. + // Check the filename for the old layout if the new one does not exist. CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true); - SmallString<128> Path(getCompilerRTPath()); - llvm::sys::path::append(Path, CRTBasename); + SmallString<128> OldPath(getCompilerRTPath()); + llvm::sys::path::append(OldPath, CRTBasename); + if (Path.empty() || getVFS().exists(OldPath)) +return std::string(OldPath); + + // If none is found, use a file name from the new layout, which may get + // printed in an error message, aiding users in knowing what Clang is + // looking for. nico wrote: This is a behavior change: In distributed build environments, neither lib file exists at compile time. Previously, this would result in the "old" style, now it results in the "new" style (which we disable everywhere since it causes all kinds of issues – from what I can tell, we're not alone in this). Is there some way we can tell clang that we always want the old style here, independent of what's on disk? https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay closed https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/mstorsjo approved this pull request. LGTM, thanks. In principle, we're just trading surprises in one case into surprises in another case, but I guess this case is the one with more non-obvious details (and this can be argued is the future direction we should be heading towards, even if I'm not personally a huge fan of it), so it seems reasonable and valuable. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/tru approved this pull request. This seems good to me, it worked in my internal test as I expected it! https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
MaskRay wrote: @tru After related improvements this uncovered, this patch should be good to review. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From c9dc3ca27e6978a3b6595d094e32cbd9cd102f64 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../x86_64-unknown-linux/libclang_rt.msan.a | 0 .../libclang_rt.msan.a.syms | 0 .../libclang_rt.msan_cxx.a| 0 .../libclang_rt.msan_cxx.a.syms | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 38 +++--- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 4 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 10 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 110 +- 32 files changed, 114 insertions(+), 104 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From cebb8f03af527395ff82880173f4a45353efae75 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Tue, 20 Feb 2024 13:29:25 -0800 Subject: [PATCH 1/2] [Driver,BareMetal] Replace -lclang_rt.builtins{,-$arch}.a with an absolute path The generic `tools::AddRunTimeLibs` uses an absolute path. Change BareMetal to match. I believe users are not supposed to place other files under the directory containing `libclang_rt.builtins-$arch.a`. If they rely on the implicit -L, they now need to explicitly specify -L. Pull Request: https://github.com/llvm/llvm-project/pull/82424 --- clang/lib/Driver/ToolChains/BareMetal.cpp | 11 +--- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-multilib.yaml | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 70 --- 5 files changed, 27 insertions(+), 60 deletions(-) diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index cd955b6c849456..d5fc1d5dd25a8b 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -368,11 +368,7 @@ void BareMetal::AddLinkRuntimeLib(const ArgList , ToolChain::RuntimeLibType RLT = GetRuntimeLibType(Args); switch (RLT) { case ToolChain::RLT_CompilerRT: { -const std::string FileName = getCompilerRT(Args, "builtins"); -llvm::StringRef BaseName = llvm::sys::path::filename(FileName); -BaseName.consume_front("lib"); -BaseName.consume_back(".a"); -CmdArgs.push_back(Args.MakeArgString("-l" + BaseName)); +CmdArgs.push_back(getCompilerRTArgString(Args, "builtins")); return; } case ToolChain::RLT_Libgcc: @@ -462,11 +458,6 @@ void baremetal::Linker::ConstructJob(Compilation , const JobAction , for (const auto : TC.getLibraryPaths()) CmdArgs.push_back(Args.MakeArgString(llvm::Twine("-L", LibPath))); - const std::string FileName = TC.getCompilerRT(Args, "builtins"); - llvm::SmallString<128> PathBuf{FileName}; - llvm::sys::path::remove_filename(PathBuf); - CmdArgs.push_back(Args.MakeArgString("-L" + PathBuf)); - if (TC.ShouldLinkCXXStdlib(Args)) TC.AddCXXStdlibLibArgs(Args, CmdArgs); diff --git a/clang/test/Driver/arm-compiler-rt.c b/clang/test/Driver/arm-compiler-rt.c index 954947bb890f87..adecacbcaabf9c 100644 --- a/clang/test/Driver/arm-compiler-rt.c +++ b/clang/test/Driver/arm-compiler-rt.c @@ -3,7 +3,7 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ // RUN: -rtlib=compiler-rt -### %s 2>&1 \ // RUN: | FileCheck %s -check-prefix ARM-EABI -// ARM-EABI: "-lclang_rt.builtins-arm" +// ARM-EABI: "{{[^"]*}}libclang_rt.builtins-arm.a" // RUN: %clang -target arm-linux-gnueabi \ // RUN: --sysroot=%S/Inputs/resource_dir_with_arch_subdir \ diff --git a/clang/test/Driver/baremetal-multilib.yaml b/clang/test/Driver/baremetal-multilib.yaml index af26e82621c91e..3f026cbeb437b2 100644 --- a/clang/test/Driver/baremetal-multilib.yaml +++ b/clang/test/Driver/baremetal-multilib.yaml @@ -17,7 +17,7 @@ # CHECK-SAME: "-x" "c++" "{{.*}}baremetal-multilib.yaml" # CHECK-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" # CHECK-SAME: "-L[[SYSROOT]]/bin/../lib/clang-runtimes/arm-none-eabi/thumb/v8-m.main/fp/lib" -# CHECK-SAME: "-lc" "-lm" "-lclang_rt.builtins" +# CHECK-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins.a" # CHECK-SAME: "-o" "{{.*}}.tmp.out" # RUN: %T/baremetal_multilib/bin/clang -no-canonical-prefixes -x c++ %s -### -o %t.out 2>&1 \ diff --git a/clang/test/Driver/baremetal-sysroot.cpp b/clang/test/Driver/baremetal-sysroot.cpp index fc66020772a771..46338185ffd9d5 100644 --- a/clang/test/Driver/baremetal-sysroot.cpp +++ b/clang/test/Driver/baremetal-sysroot.cpp @@ -18,5 +18,5 @@ // CHECK-V6M-C-SAME: "-x" "c++" "{{.*}}baremetal-sysroot.cpp" // CHECK-V6M-C-NEXT: "{{[^"]*}}ld{{(\.(lld|bfd|gold))?}}{{(\.exe)?}}" "{{.*}}.o" "-Bstatic" // CHECK-V6M-C-SAME: "-L{{.*}}/baremetal_default_sysroot{{[/\\]+}}bin{{[/\\]+}}..{{[/\\]+}}lib{{[/\\]+}}clang-runtimes{{[/\\]+}}armv6m-none-eabi{{[/\\]+}}lib" -// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" +// CHECK-V6M-C-SAME: "-lc" "-lm" "{{[^"]*}}libclang_rt.builtins-armv6m.a" // CHECK-V6M-C-SAME: "-o" "{{.*}}.o" diff --git a/clang/test/Driver/baremetal.cpp b/clang/test/Driver/baremetal.cpp index 7511d7d1adb4dd..8baf388894eb27 100644 --- a/clang/test/Driver/baremetal.cpp +++ b/clang/test/Driver/baremetal.cpp @@ -18,8 +18,7 @@ // CHECK-V6M-C-NEXT: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-C-SAME: "-T" "semihosted.lds" "-Lsome{{[/\\]+}}directory{{[/\\]+}}user{{[/\\]+}}asked{{[/\\]+}}for" // CHECK-V6M-C-SAME: "-L[[SYSROOT:[^"]+]]{{[/\\]+}}lib" -// CHECK-V6M-C-SAME: "-L[[RESOURCE_DIR:[^"]+]]{{[/\\]+}}lib{{[/\\]+}}baremetal" -// CHECK-V6M-C-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" "-o"
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -44,9 +43,8 @@ // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib" -// CHECK-V6M-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal" // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind" -// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" "-o" "a.out" MaskRay wrote: Thanks for catching this. I suspect that we should improve BareMetal to not rely on the -L and -l for libclang_rt.builtins first. Sent #82424 https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -44,9 +43,8 @@ // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib" -// CHECK-V6M-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal" // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind" -// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" "-o" "a.out" jroelofs wrote: I'm not as worried about the `-L` as I am the rename `"-lclang_rt.builtins-armv6m"` -> `"-lclang_rt.builtins"` and that being consistent with the layout that the build system sets up. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -44,9 +43,8 @@ // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib" -// CHECK-V6M-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal" // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind" -// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" "-o" "a.out" MaskRay wrote: There are a few places where I delete `-L` of the directory containing `libclang_rt.*` files. I think it is correct. This `-L` is not useful. https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
@@ -44,9 +43,8 @@ // CHECK-V6M-DEFAULTCXX: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]" // CHECK-V6M-DEFAULTCXX: ld{{(.exe)?}}" "{{.*}}.o" "-Bstatic" "-EL" // CHECK-V6M-DEFAULTCXX-SAME: "-L{{[^"]*}}{{[/\\]+}}Inputs{{[/\\]+}}baremetal_arm{{[/\\]+}}lib" -// CHECK-V6M-DEFAULTCXX-SAME: "-L[[RESOURCE_DIR]]{{[/\\]+}}lib{{[/\\]+}}baremetal" // CHECK-V6M-DEFAULTCXX-SAME: "-lc++" "-lc++abi" "-lunwind" -// CHECK-V6M-DEFAULTCXX-SAME: "-lc" "-lm" "-lclang_rt.builtins-armv6m" "--target2=rel" "-o" "a.out" jroelofs wrote: ISTM the more "correct" way to fix this test is to create an empty file `libclang_rt.builtins-armv6m.a` in the fake resource dir. The folder structure should match what you get from `clang/cmake/caches/BaremetalARM.cmake` (assuming that cache isn't completely bit-rotten) https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
MaskRay wrote: I added an AIX workaround because AIX hasn't migrated to the new layout and two AIX tests would fail without the workaround. @daltenty https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From 1efa872cbf29fa3ad69a9c56aa7e270d44adbc32 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../x86_64-unknown-linux/libclang_rt.msan.a | 0 .../libclang_rt.msan.a.syms | 0 .../libclang_rt.msan_cxx.a| 0 .../libclang_rt.msan_cxx.a.syms | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 62 +++--- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 4 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 10 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 110 +- 32 files changed, 114 insertions(+), 128 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From 101f71337a84d705b15738ddf12ff8df6f06c3bd Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../x86_64-unknown-linux/libclang_rt.msan.a | 0 .../libclang_rt.msan.a.syms | 0 .../libclang_rt.msan_cxx.a| 0 .../libclang_rt.msan_cxx.a.syms | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 62 --- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 4 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 10 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 104 +- 32 files changed, 111 insertions(+), 125 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms create mode 100644
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
llvmbot wrote: @llvm/pr-subscribers-clang-driver Author: Fangrui Song (MaskRay) Changes BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- Patch is 53.97 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/81037.diff 32 Files Affected: - (modified) clang/lib/Driver/ToolChain.cpp (+14-4) - (renamed) clang/test/Driver/Inputs/resource_dir/lib/aarch64-unknown-linux/libclang_rt.hwasan.a () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/aarch64-unknown-linux/libclang_rt.hwasan.a.syms () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/i386-unknown-linux/libclang_rt.asan.a () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/i386-unknown-linux/libclang_rt.asan.a.syms () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/i686-unknown-linux/clang_rt.crtbegin.o () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/i686-unknown-linux/clang_rt.crtend.o () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/clang_rt.crtbegin.o () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/clang_rt.crtend.o () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.asan.a () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.asan.a.syms () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.hwasan.a () - (renamed) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.hwasan.a.syms () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan_cxx.a.syms () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a.syms () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a () - (added) clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a.syms () - (modified) clang/test/Driver/arch-specific-libdir.c (+1-1) - (modified) clang/test/Driver/arm-compiler-rt.c (+1-1) - (modified) clang/test/Driver/baremetal-sysroot.cpp (+1-1) - (modified) clang/test/Driver/baremetal.cpp (+19-43) - (modified) clang/test/Driver/compiler-rt-unwind.c (+4-4) - (modified) clang/test/Driver/coverage-ld.c (+1-1) - (modified) clang/test/Driver/fuchsia.c (+3-3) - (modified) clang/test/Driver/instrprof-ld.c (+3-3) - (modified) clang/test/Driver/linux-ld.c (+8-8) - (modified) clang/test/Driver/print-libgcc-file-name-clangrt.c (+1-1) - (modified) clang/test/Driver/sanitizer-ld.c (+52-52) ``diff diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 657577cea6c7d8..1d2c9447770c48 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -656,19 +656,29 @@ std::string ToolChain::getCompilerRT(const ArgList , StringRef Component, // Check for runtime files in the new layout without the architecture first. std::string CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/false); + SmallString<128> Path; for (const auto : getLibraryPaths()) { SmallString<128> P(LibPath); llvm::sys::path::append(P, CRTBasename); if (getVFS().exists(P)) return std::string(P); +if (Path.empty()) + Path = P; } + if (getTriple().isOSAIX()) +Path.clear(); - // Fall back to the old expected compiler-rt name if the new one does not - // exist. + // Check the filename for the old layout if the new one does not exist. CRTBasename = buildCompilerRTBasename(Args, Component, Type, /*AddArch=*/true); - SmallString<128> Path(getCompilerRTPath()); - llvm::sys::path::append(Path, CRTBasename); + SmallString<128> OldPath(getCompilerRTPath()); +
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay ready_for_review https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From 610b14d9998793f2f04a4334bcae2408d4b55b78 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../x86_64-unknown-linux/libclang_rt.msan.a | 0 .../libclang_rt.msan.a.syms | 0 .../libclang_rt.msan_cxx.a| 0 .../libclang_rt.msan_cxx.a.syms | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 62 --- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 2 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 6 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 104 +- 32 files changed, 108 insertions(+), 122 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms create mode 100644
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay edited https://github.com/llvm/llvm-project/pull/81037 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From f332e700637f9dfec5712100b8608737f75dd255 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD, Linux, and z/OS enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../x86_64-unknown-linux/libclang_rt.msan.a | 0 .../libclang_rt.msan.a.syms | 0 .../libclang_rt.msan_cxx.a| 0 .../libclang_rt.msan_cxx.a.syms | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 62 --- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 2 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 6 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 104 +- 32 files changed, 108 insertions(+), 122 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.msan.a.syms create mode 100644
[clang] [Driver] Improve error when a compiler-rt library is not found (PR #81037)
https://github.com/MaskRay updated https://github.com/llvm/llvm-project/pull/81037 >From f246fe8c72f4f3fcb88bdbaaff5c6f23f35d58bf Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 7 Feb 2024 12:56:05 -0800 Subject: [PATCH] [Driver] Improve error when a compiler-rt library is not found BSD/Linux/OS390x enable `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` by default. When a compiler-rt library is not found, we currently report an incorrect filename `libclang_rt.XXX-$arch.a` ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` With this change, we will correctly report: ``` % /tmp/Debug/bin/clang++ a.cc -fsanitize=address -o a ld.lld: error: cannot open /tmp/Debug/lib/clang/19/lib/x86_64-unknown-linux-gnu/libclang_rt.asan.a: No such file or directory clang++: error: linker command failed with exit code 1 (use -v to see invocation) ``` Link: https://discourse.llvm.org/t/runtime-directory-fallback/76860 --- clang/lib/Driver/ToolChain.cpp| 18 ++- .../libclang_rt.hwasan.a} | 0 .../libclang_rt.hwasan.a.syms}| 0 .../libclang_rt.asan.a} | 0 .../libclang_rt.asan.a.syms} | 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../clang_rt.crtbegin.o} | 0 .../clang_rt.crtend.o}| 0 .../libclang_rt.msan.a} | 0 .../libclang_rt.msan.a.syms} | 0 .../libclang_rt.msan_cxx.a} | 0 .../libclang_rt.msan_cxx.a.syms} | 0 .../x86_64-unknown-linux/libclang_rt.tsan.a | 0 .../libclang_rt.tsan.a.syms | 0 .../libclang_rt.tsan_cxx.a| 0 .../libclang_rt.tsan_cxx.a.syms | 0 clang/test/Driver/arch-specific-libdir.c | 2 +- clang/test/Driver/arm-compiler-rt.c | 2 +- clang/test/Driver/baremetal-sysroot.cpp | 2 +- clang/test/Driver/baremetal.cpp | 62 --- clang/test/Driver/compiler-rt-unwind.c| 8 +- clang/test/Driver/coverage-ld.c | 2 +- clang/test/Driver/fuchsia.c | 6 +- clang/test/Driver/instrprof-ld.c | 6 +- clang/test/Driver/linux-ld.c | 16 +-- .../Driver/print-libgcc-file-name-clangrt.c | 2 +- clang/test/Driver/sanitizer-ld.c | 104 +- 28 files changed, 108 insertions(+), 122 deletions(-) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-i386.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.asan-x86_64.a.syms => aarch64-unknown-linux/libclang_rt.hwasan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-aarch64.a.syms => i386-unknown-linux/libclang_rt.asan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.hwasan-x86_64.a.syms => i386-unknown-linux/libclang_rt.asan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan-x86_64.a.syms => i686-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.msan_cxx-x86_64.a.syms => i686-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtbegin.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.tsan_cxx-x86_64.a.syms => x86_64-unknown-linux/clang_rt.crtend.o} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-i386.a.syms => x86_64-unknown-linux/libclang_rt.msan.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.msan.a.syms} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-i386.a.syms => x86_64-unknown-linux/libclang_rt.msan_cxx.a} (100%) rename clang/test/Driver/Inputs/resource_dir/lib/{linux/libclang_rt.ubsan_cxx-x86_64.a.syms => x86_64-unknown-linux/libclang_rt.msan_cxx.a.syms} (100%) create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan.a.syms create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a create mode 100644 clang/test/Driver/Inputs/resource_dir/lib/x86_64-unknown-linux/libclang_rt.tsan_cxx.a.syms diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index