Author: Christopher Di Bella Date: 2020-10-14T10:29:35-07:00 New Revision: 18432bea764863d1c42fd569bd3846673ee4e802
URL: https://github.com/llvm/llvm-project/commit/18432bea764863d1c42fd569bd3846673ee4e802 DIFF: https://github.com/llvm/llvm-project/commit/18432bea764863d1c42fd569bd3846673ee4e802.diff LOG: [Driver]: fix compiler-rt path when printing libgcc for baremetal clang --target arm-none-eabi --print-libgcc-file-name --rtlib=compiler-rt used to print `/path/to/lib/clang/version/lib/libclang_rt.builtins-arm.a` but should print `/path/to/lib/clang/version/lib/baremetal/libclang_rt.builtins-arm.a`. Similarly, --target armv7m-none-eabi should print libclang_rt.builtins-armv7m.a This matches the compiler-rt file name used at link time in the baremetal driver. Reviewed By: manojgupta Differential Revision: https://reviews.llvm.org/D89327 Added: Modified: clang/include/clang/Driver/ToolChain.h clang/lib/Driver/ToolChains/BareMetal.cpp clang/lib/Driver/ToolChains/BareMetal.h clang/test/Driver/print-libgcc-file-name-clangrt.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h index 7495e08fe6e6..4704308f0450 100644 --- a/clang/include/clang/Driver/ToolChain.h +++ b/clang/include/clang/Driver/ToolChain.h @@ -419,10 +419,10 @@ class ToolChain { getCompilerRTArgString(const llvm::opt::ArgList &Args, StringRef Component, FileType Type = ToolChain::FT_Static) const; - std::string getCompilerRTBasename(const llvm::opt::ArgList &Args, - StringRef Component, - FileType Type = ToolChain::FT_Static, - bool AddArch = true) const; + virtual std::string + getCompilerRTBasename(const llvm::opt::ArgList &Args, StringRef Component, + FileType Type = ToolChain::FT_Static, + bool AddArch = true) const; // Returns target specific runtime path if it exists. virtual Optional<std::string> getRuntimePath() const; @@ -435,7 +435,7 @@ class ToolChain { std::string getArchSpecificLibPath() const; // Returns <OSname> part of above. - StringRef getOSLibName() const; + virtual StringRef getOSLibName() const; /// needsProfileRT - returns true if instrumentation profile is on. static bool needsProfileRT(const llvm::opt::ArgList &Args); diff --git a/clang/lib/Driver/ToolChains/BareMetal.cpp b/clang/lib/Driver/ToolChains/BareMetal.cpp index 6ed81c1e34a1..9df42061e12c 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.cpp +++ b/clang/lib/Driver/ToolChains/BareMetal.cpp @@ -35,8 +35,6 @@ BareMetal::BareMetal(const Driver &D, const llvm::Triple &Triple, getProgramPaths().push_back(getDriver().Dir); } -BareMetal::~BareMetal() {} - /// Is the triple {arm,thumb}-none-none-{eabi,eabihf} ? static bool isARMBareMetal(const llvm::Triple &Triple) { if (Triple.getArch() != llvm::Triple::arm && @@ -64,6 +62,13 @@ Tool *BareMetal::buildLinker() const { return new tools::baremetal::Linker(*this); } +std::string BareMetal::getCompilerRTPath() const { return getRuntimesDir(); } + +std::string BareMetal::getCompilerRTBasename(const llvm::opt::ArgList &, + StringRef, FileType, bool) const { + return ("libclang_rt.builtins-" + getTriple().getArchName() + ".a").str(); +} + std::string BareMetal::getRuntimesDir() const { SmallString<128> Dir(getDriver().ResourceDir); llvm::sys::path::append(Dir, "lib", "baremetal"); diff --git a/clang/lib/Driver/ToolChains/BareMetal.h b/clang/lib/Driver/ToolChains/BareMetal.h index 4c0c739307b1..0be9377134ce 100644 --- a/clang/lib/Driver/ToolChains/BareMetal.h +++ b/clang/lib/Driver/ToolChains/BareMetal.h @@ -23,7 +23,7 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain { public: BareMetal(const Driver &D, const llvm::Triple &Triple, const llvm::opt::ArgList &Args); - ~BareMetal() override; + ~BareMetal() override = default; static bool handlesTarget(const llvm::Triple &Triple); protected: @@ -37,6 +37,14 @@ class LLVM_LIBRARY_VISIBILITY BareMetal : public ToolChain { bool isPICDefaultForced() const override { return false; } bool SupportsProfiling() const override { return false; } + StringRef getOSLibName() const override { return "baremetal"; } + + std::string getCompilerRTPath() const override; + std::string getCompilerRTBasename(const llvm::opt::ArgList &Args, + StringRef Component, + FileType Type = ToolChain::FT_Static, + bool AddArch = true) const override; + RuntimeLibType GetDefaultRuntimeLibType() const override { return ToolChain::RLT_CompilerRT; } diff --git a/clang/test/Driver/print-libgcc-file-name-clangrt.c b/clang/test/Driver/print-libgcc-file-name-clangrt.c index 74a88e565bb8..ac921ec38b12 100644 --- a/clang/test/Driver/print-libgcc-file-name-clangrt.c +++ b/clang/test/Driver/print-libgcc-file-name-clangrt.c @@ -42,3 +42,9 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ // RUN: | FileCheck --check-prefix=CHECK-CLANGRT-ARM-ABI %s // CHECK-CLANGRT-ARM-ABI: libclang_rt.builtins-armhf.a + +// RUN: %clang -rtlib=compiler-rt -print-libgcc-file-name 2>&1 \ +// RUN: --target=armv7m-none-eabi \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_arch_subdir \ +// RUN: | FileCheck --check-prefix=CHECK-CLANGRT-ARM-BAREMETAL %s +// CHECK-CLANGRT-ARM-BAREMETAL: libclang_rt.builtins-armv7m.a _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits