mirror of
https://git.proxmox.com/git/llvm-toolchain
synced 2025-10-17 19:47:14 +00:00
* Remove unapplied patches:
- D52340-rustc-debuginfo.diff - D54379-hurd-triple-clang.diff - hurd-cxx-paths.diff - openmp-jessie-missing-include.diff - rustc-aarch64-test-failure.diff - strip-ignore-deterministic-archives.diff
This commit is contained in:
parent
4b60b20b1e
commit
3eac6dd0b8
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -2,6 +2,13 @@ llvm-toolchain-8 (1:8~svn351401-1~exp2) experimental; urgency=medium
|
||||
|
||||
* Fix debian-changelog-line-too-long
|
||||
* Silent source-contains-prebuilt-windows-binary
|
||||
* Remove unapplied patches:
|
||||
- D52340-rustc-debuginfo.diff
|
||||
- D54379-hurd-triple-clang.diff
|
||||
- hurd-cxx-paths.diff
|
||||
- openmp-jessie-missing-include.diff
|
||||
- rustc-aarch64-test-failure.diff
|
||||
- strip-ignore-deterministic-archives.diff
|
||||
|
||||
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 17 Jan 2019 10:23:10 +0100
|
||||
|
||||
|
32
debian/patches/D52340-rustc-debuginfo.diff
vendored
32
debian/patches/D52340-rustc-debuginfo.diff
vendored
@ -1,32 +0,0 @@
|
||||
Index: llvm/lib/Bitcode/Reader/MetadataLoader.cpp
|
||||
===================================================================
|
||||
--- llvm.orig/lib/Bitcode/Reader/MetadataLoader.cpp
|
||||
+++ llvm/lib/Bitcode/Reader/MetadataLoader.cpp
|
||||
@@ -1313,7 +1313,7 @@
|
||||
(Context, Tag, Name, File, Line, Scope, BaseType,
|
||||
SizeInBits, AlignInBits, OffsetInBits, Flags,
|
||||
Elements, RuntimeLang, VTableHolder, TemplateParams,
|
||||
- Identifier));
|
||||
+ Identifier, Discriminator));
|
||||
if (!IsNotUsedInTypeRef && Identifier)
|
||||
MetadataList.addTypeRef(*Identifier, *cast<DICompositeType>(CT));
|
||||
|
||||
Index: llvm/test/Assembler/debug-variant-discriminator.ll
|
||||
===================================================================
|
||||
--- llvm.orig/test/Assembler/debug-variant-discriminator.ll
|
||||
+++ llvm/test/Assembler/debug-variant-discriminator.ll
|
||||
@@ -0,0 +1,14 @@
|
||||
+; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
|
||||
+; RUN: verify-uselistorder %s
|
||||
+
|
||||
+; CHECK: !named = !{!0, !1, !2}
|
||||
+!named = !{!0, !1, !2}
|
||||
+
|
||||
+; CHECK: !0 = !DICompositeType(tag: DW_TAG_structure_type, name: "Outer", size: 64, align: 64, identifier: "Outer")
|
||||
+; CHECK-NEXT: !1 = !DICompositeType(tag: DW_TAG_variant_part, scope: !0, size: 64, discriminator: !2)
|
||||
+; CHECK-NEXT: !2 = !DIDerivedType(tag: DW_TAG_member, scope: !1, baseType: !3, size: 64, align: 64, flags: DIFlagArtificial)
|
||||
+; CHECK-NEXT: !3 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned)
|
||||
+!0 = !DICompositeType(tag: DW_TAG_structure_type, name: "Outer", size: 64, align: 64, identifier: "Outer")
|
||||
+!1 = !DICompositeType(tag: DW_TAG_variant_part, scope: !0, size: 64, discriminator: !2)
|
||||
+!2 = !DIDerivedType(tag: DW_TAG_member, scope: !1, baseType: !3, size: 64, align: 64, flags: DIFlagArtificial)
|
||||
+!3 = !DIBasicType(name: "u64", size: 64, encoding: DW_ATE_unsigned)
|
413
debian/patches/D54379-hurd-triple-clang.diff
vendored
413
debian/patches/D54379-hurd-triple-clang.diff
vendored
@ -1,413 +0,0 @@
|
||||
Add Hurd toolchain support to Clang
|
||||
|
||||
https://reviews.llvm.org/D54379
|
||||
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Basic/Targets/OSTargets.h
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Basic/Targets/OSTargets.h
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Basic/Targets/OSTargets.h
|
||||
@@ -270,6 +270,29 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
+// Hurd target
|
||||
+template <typename Target>
|
||||
+class LLVM_LIBRARY_VISIBILITY HurdTargetInfo : public OSTargetInfo<Target> {
|
||||
+protected:
|
||||
+ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple,
|
||||
+ MacroBuilder &Builder) const override {
|
||||
+ // Linux defines; list based off of gcc output
|
||||
+ DefineStd(Builder, "unix", Opts);
|
||||
+ Builder.defineMacro("__GNU__");
|
||||
+ Builder.defineMacro("__gnu_hurd__");
|
||||
+ Builder.defineMacro("__MACH__");
|
||||
+ Builder.defineMacro("__GLIBC__");
|
||||
+ Builder.defineMacro("__ELF__");
|
||||
+ if (Opts.POSIXThreads)
|
||||
+ Builder.defineMacro("_REENTRANT");
|
||||
+ if (Opts.CPlusPlus)
|
||||
+ Builder.defineMacro("_GNU_SOURCE");
|
||||
+ }
|
||||
+public:
|
||||
+ HurdTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts)
|
||||
+ : OSTargetInfo<Target>(Triple, Opts) {}
|
||||
+};
|
||||
+
|
||||
// Minix Target
|
||||
template <typename Target>
|
||||
class LLVM_LIBRARY_VISIBILITY MinixTargetInfo : public OSTargetInfo<Target> {
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Basic/Targets.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Basic/Targets.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Basic/Targets.cpp
|
||||
@@ -495,6 +495,8 @@ TargetInfo *AllocateTarget(const llvm::T
|
||||
return new NaClTargetInfo<X86_32TargetInfo>(Triple, Opts);
|
||||
case llvm::Triple::ELFIAMCU:
|
||||
return new MCUX86_32TargetInfo(Triple, Opts);
|
||||
+ case llvm::Triple::Hurd:
|
||||
+ return new HurdTargetInfo<X86_32TargetInfo>(Triple, Opts);
|
||||
default:
|
||||
return new X86_32TargetInfo(Triple, Opts);
|
||||
}
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/CMakeLists.txt
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Driver/CMakeLists.txt
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/CMakeLists.txt
|
||||
@@ -47,6 +47,7 @@ add_clang_library(clangDriver
|
||||
ToolChains/Haiku.cpp
|
||||
ToolChains/HIP.cpp
|
||||
ToolChains/Hexagon.cpp
|
||||
+ ToolChains/Hurd.cpp
|
||||
ToolChains/Linux.cpp
|
||||
ToolChains/MipsLinux.cpp
|
||||
ToolChains/MinGW.cpp
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/Driver.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Driver/Driver.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/Driver.cpp
|
||||
@@ -26,6 +26,7 @@
|
||||
#include "ToolChains/HIP.h"
|
||||
#include "ToolChains/Haiku.h"
|
||||
#include "ToolChains/Hexagon.h"
|
||||
+#include "ToolChains/Hurd.h"
|
||||
#include "ToolChains/Lanai.h"
|
||||
#include "ToolChains/Linux.h"
|
||||
#include "ToolChains/MSVC.h"
|
||||
@@ -402,6 +403,13 @@ static llvm::Triple computeTargetTriple(
|
||||
|
||||
llvm::Triple Target(llvm::Triple::normalize(TargetTriple));
|
||||
|
||||
+ // GNU/Hurd's triple should have been -hurd-gnu*, but was historically made
|
||||
+ // -gnu* only, and we can not change this, so we have to detect that case as
|
||||
+ // being the Hurd OS.
|
||||
+ if (TargetTriple.find("-unknown-gnu") != StringRef::npos ||
|
||||
+ TargetTriple.find("-pc-gnu") != StringRef::npos)
|
||||
+ Target.setOSName("hurd");
|
||||
+
|
||||
// Handle Apple-specific options available here.
|
||||
if (Target.isOSBinFormatMachO()) {
|
||||
// If an explicit Darwin arch name is given, that trumps all.
|
||||
@@ -4574,6 +4582,9 @@ const ToolChain &Driver::getToolChain(co
|
||||
case llvm::Triple::Contiki:
|
||||
TC = llvm::make_unique<toolchains::Contiki>(*this, Target, Args);
|
||||
break;
|
||||
+ case llvm::Triple::Hurd:
|
||||
+ TC = llvm::make_unique<toolchains::Hurd>(*this, Target, Args);
|
||||
+ break;
|
||||
default:
|
||||
// Of these targets, Hexagon is the only one that might have
|
||||
// an OS of Linux, in which case it got handled above already.
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Clang.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Driver/ToolChains/Clang.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Clang.cpp
|
||||
@@ -530,7 +530,7 @@ static bool useFramePointerForTargetByDe
|
||||
return !areOptimizationsEnabled(Args);
|
||||
}
|
||||
|
||||
- if (Triple.isOSLinux() || Triple.getOS() == llvm::Triple::CloudABI) {
|
||||
+ if (Triple.isOSLinux() || Triple.getOS() == llvm::Triple::CloudABI || Triple.isOSHurd()) {
|
||||
switch (Triple.getArch()) {
|
||||
// Don't use a frame pointer on linux if optimizing for certain targets.
|
||||
case llvm::Triple::mips64:
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -1882,7 +1882,10 @@ void Generic_GCC::GCCInstallationDetecto
|
||||
"i386-linux-gnu", "i386-redhat-linux6E", "i686-redhat-linux",
|
||||
"i586-redhat-linux", "i386-redhat-linux", "i586-suse-linux",
|
||||
"i486-slackware-linux", "i686-montavista-linux", "i586-linux-gnu",
|
||||
- "i686-linux-android"};
|
||||
+ "i686-linux-android",
|
||||
+ "i386-gnu", "i486-gnu", "i586-gnu",
|
||||
+ "i686-gnu"};
|
||||
+
|
||||
|
||||
static const char *const MIPSLibDirs[] = {"/lib"};
|
||||
static const char *const MIPSTriples[] = {
|
||||
@@ -2262,6 +2265,9 @@ void Generic_GCC::GCCInstallationDetecto
|
||||
// triple.
|
||||
{"i386-linux-gnu/gcc/" + CandidateTriple.str(), "../../..",
|
||||
(TargetArch == llvm::Triple::x86 &&
|
||||
+ TargetTriple.getOS() != llvm::Triple::Solaris)},
|
||||
+ {"i386-gnu/gcc/" + CandidateTriple.str(), "../../..",
|
||||
+ (TargetArch == llvm::Triple::x86 &&
|
||||
TargetTriple.getOS() != llvm::Triple::Solaris)}};
|
||||
|
||||
for (auto &Suffix : Suffixes) {
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Hurd.cpp
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Hurd.cpp
|
||||
@@ -0,0 +1,191 @@
|
||||
+//===--- Hurd.cpp - Hurd ToolChain Implementations --------*- C++ -*-===//
|
||||
+//
|
||||
+// The LLVM Compiler Infrastructure
|
||||
+//
|
||||
+// This file is distributed under the University of Illinois Open Source
|
||||
+// License. See LICENSE.TXT for details.
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#include "Hurd.h"
|
||||
+#include "CommonArgs.h"
|
||||
+#include "clang/Basic/VirtualFileSystem.h"
|
||||
+#include "clang/Config/config.h"
|
||||
+#include "clang/Driver/Driver.h"
|
||||
+#include "clang/Driver/Options.h"
|
||||
+#include "llvm/Support/Path.h"
|
||||
+
|
||||
+using namespace clang::driver;
|
||||
+using namespace clang::driver::toolchains;
|
||||
+using namespace clang;
|
||||
+using namespace llvm::opt;
|
||||
+
|
||||
+using tools::addPathIfExists;
|
||||
+
|
||||
+/// Get our best guess at the multiarch triple for a target.
|
||||
+///
|
||||
+/// Debian-based systems are starting to use a multiarch setup where they use
|
||||
+/// a target-triple directory in the library and header search paths.
|
||||
+/// Unfortunately, this triple does not align with the vanilla target triple,
|
||||
+/// so we provide a rough mapping here.
|
||||
+static std::string getMultiarchTriple(const Driver &D,
|
||||
+ const llvm::Triple &TargetTriple,
|
||||
+ StringRef SysRoot) {
|
||||
+ // For most architectures, just use whatever we have rather than trying to be
|
||||
+ // clever.
|
||||
+ switch (TargetTriple.getArch()) {
|
||||
+ default:
|
||||
+ break;
|
||||
+
|
||||
+ // We use the existence of '/lib/<triple>' as a directory to detect some
|
||||
+ // common hurd triples that don't quite match the Clang triple for both
|
||||
+ // 32-bit and 64-bit targets. Multiarch fixes its install triples to these
|
||||
+ // regardless of what the actual target triple is.
|
||||
+ case llvm::Triple::x86:
|
||||
+ if (D.getVFS().exists(SysRoot + "/lib/i386-gnu"))
|
||||
+ return "i386-gnu";
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return TargetTriple.str();
|
||||
+}
|
||||
+
|
||||
+static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
||||
+ // It happens that only x86 and PPC use the 'lib32' variant of oslibdir, and
|
||||
+ // using that variant while targeting other architectures causes problems
|
||||
+ // because the libraries are laid out in shared system roots that can't cope
|
||||
+ // with a 'lib32' library search path being considered. So we only enable
|
||||
+ // them when we know we may need it.
|
||||
+ //
|
||||
+ // FIXME: This is a bit of a hack. We should really unify this code for
|
||||
+ // reasoning about oslibdir spellings with the lib dir spellings in the
|
||||
+ // GCCInstallationDetector, but that is a more significant refactoring.
|
||||
+
|
||||
+ if (Triple.getArch() == llvm::Triple::x86)
|
||||
+ return "lib32";
|
||||
+
|
||||
+ return Triple.isArch32Bit() ? "lib" : "lib64";
|
||||
+}
|
||||
+
|
||||
+Hurd::Hurd(const Driver &D, const llvm::Triple &Triple,
|
||||
+ const ArgList &Args)
|
||||
+ : Generic_ELF(D, Triple, Args) {
|
||||
+ std::string SysRoot = computeSysRoot();
|
||||
+ path_list &Paths = getFilePaths();
|
||||
+
|
||||
+ const std::string OSLibDir = getOSLibDir(Triple, Args);
|
||||
+ const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
|
||||
+
|
||||
+ // Similar to the logic for GCC above, if we currently running Clang inside
|
||||
+ // of the requested system root, add its parent library paths to
|
||||
+ // those searched.
|
||||
+ // FIXME: It's not clear whether we should use the driver's installed
|
||||
+ // directory ('Dir' below) or the ResourceDir.
|
||||
+ if (StringRef(D.Dir).startswith(SysRoot)) {
|
||||
+ addPathIfExists(D, D.Dir + "/../lib/" + MultiarchTriple, Paths);
|
||||
+ addPathIfExists(D, D.Dir + "/../" + OSLibDir, Paths);
|
||||
+ }
|
||||
+
|
||||
+ addPathIfExists(D, SysRoot + "/lib/" + MultiarchTriple, Paths);
|
||||
+ addPathIfExists(D, SysRoot + "/lib/../" + OSLibDir, Paths);
|
||||
+
|
||||
+ addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
|
||||
+ addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
|
||||
+
|
||||
+ // If we are currently running Clang inside of the requested system root, add
|
||||
+ // its parent library path to those searched.
|
||||
+ // FIXME: It's not clear whether we should use the driver's installed
|
||||
+ // directory ('Dir' below) or the ResourceDir.
|
||||
+ if (StringRef(D.Dir).startswith(SysRoot))
|
||||
+ addPathIfExists(D, D.Dir + "/../lib", Paths);
|
||||
+
|
||||
+ addPathIfExists(D, SysRoot + "/lib", Paths);
|
||||
+ addPathIfExists(D, SysRoot + "/usr/lib", Paths);
|
||||
+}
|
||||
+
|
||||
+bool Hurd::HasNativeLLVMSupport() const { return true; }
|
||||
+
|
||||
+Tool *Hurd::buildLinker() const { return new tools::gnutools::Linker(*this); }
|
||||
+
|
||||
+Tool *Hurd::buildAssembler() const {
|
||||
+ return new tools::gnutools::Assembler(*this);
|
||||
+}
|
||||
+
|
||||
+std::string Hurd::computeSysRoot() const {
|
||||
+ if (!getDriver().SysRoot.empty())
|
||||
+ return getDriver().SysRoot;
|
||||
+
|
||||
+ return std::string();
|
||||
+}
|
||||
+
|
||||
+std::string Hurd::getDynamicLinker(const ArgList &Args) const {
|
||||
+ const llvm::Triple::ArchType Arch = getArch();
|
||||
+
|
||||
+ if (Arch == llvm::Triple::x86)
|
||||
+ return "/lib/ld.so";
|
||||
+
|
||||
+ llvm_unreachable("unsupported architecture");
|
||||
+}
|
||||
+
|
||||
+void Hurd::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
||||
+ ArgStringList &CC1Args) const {
|
||||
+ const Driver &D = getDriver();
|
||||
+ std::string SysRoot = computeSysRoot();
|
||||
+
|
||||
+ if (DriverArgs.hasArg(clang::driver::options::OPT_nostdinc))
|
||||
+ return;
|
||||
+
|
||||
+ if (!DriverArgs.hasArg(options::OPT_nostdlibinc))
|
||||
+ addSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/local/include");
|
||||
+
|
||||
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
|
||||
+ SmallString<128> P(D.ResourceDir);
|
||||
+ llvm::sys::path::append(P, "include");
|
||||
+ addSystemInclude(DriverArgs, CC1Args, P);
|
||||
+ }
|
||||
+
|
||||
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc))
|
||||
+ return;
|
||||
+
|
||||
+ // Check for configure-time C include directories.
|
||||
+ StringRef CIncludeDirs(C_INCLUDE_DIRS);
|
||||
+ if (CIncludeDirs != "") {
|
||||
+ SmallVector<StringRef, 5> dirs;
|
||||
+ CIncludeDirs.split(dirs, ":");
|
||||
+ for (StringRef dir : dirs) {
|
||||
+ StringRef Prefix =
|
||||
+ llvm::sys::path::is_absolute(dir) ? StringRef(SysRoot) : "";
|
||||
+ addExternCSystemInclude(DriverArgs, CC1Args, Prefix + dir);
|
||||
+ }
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Lacking those, try to detect the correct set of system includes for the
|
||||
+ // target triple.
|
||||
+
|
||||
+ const StringRef X86MultiarchIncludeDirs[] = {
|
||||
+ "/usr/include/i386-gnu"};
|
||||
+
|
||||
+ ArrayRef<StringRef> MultiarchIncludeDirs;
|
||||
+ switch (getTriple().getArch()) {
|
||||
+ case llvm::Triple::x86:
|
||||
+ MultiarchIncludeDirs = X86MultiarchIncludeDirs;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ for (StringRef Dir : MultiarchIncludeDirs) {
|
||||
+ if (D.getVFS().exists(SysRoot + Dir)) {
|
||||
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + Dir);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // Add an include of '/include' directly. This isn't provided by default by
|
||||
+ // system GCCs, but is often used with cross-compiling GCCs, and harmless to
|
||||
+ // add even when Clang is acting as-if it were a system compiler.
|
||||
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/include");
|
||||
+
|
||||
+ addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
||||
+}
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Hurd.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Driver/ToolChains/Hurd.h
|
||||
@@ -0,0 +1,46 @@
|
||||
+//===--- Hurd.h - Hurd ToolChain Implementations ----------*- C++ -*-===//
|
||||
+//
|
||||
+// The LLVM Compiler Infrastructure
|
||||
+//
|
||||
+// This file is distributed under the University of Illinois Open Source
|
||||
+// License. See LICENSE.TXT for details.
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H
|
||||
+#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H
|
||||
+
|
||||
+#include "Gnu.h"
|
||||
+#include "clang/Driver/ToolChain.h"
|
||||
+
|
||||
+namespace clang {
|
||||
+namespace driver {
|
||||
+namespace toolchains {
|
||||
+
|
||||
+class LLVM_LIBRARY_VISIBILITY Hurd : public Generic_ELF {
|
||||
+public:
|
||||
+ Hurd(const Driver &D, const llvm::Triple &Triple,
|
||||
+ const llvm::opt::ArgList &Args);
|
||||
+
|
||||
+ bool HasNativeLLVMSupport() const override;
|
||||
+
|
||||
+ void
|
||||
+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
||||
+ llvm::opt::ArgStringList &CC1Args) const override;
|
||||
+
|
||||
+ virtual std::string computeSysRoot() const;
|
||||
+
|
||||
+ virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const;
|
||||
+
|
||||
+ std::vector<std::string> ExtraOpts;
|
||||
+
|
||||
+protected:
|
||||
+ Tool *buildAssembler() const override;
|
||||
+ Tool *buildLinker() const override;
|
||||
+};
|
||||
+
|
||||
+} // end namespace toolchains
|
||||
+} // end namespace driver
|
||||
+} // end namespace clang
|
||||
+
|
||||
+#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_Hurd_H
|
||||
Index: llvm-toolchain-snapshot_8~svn347511/clang/lib/Frontend/InitHeaderSearch.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn347511.orig/clang/lib/Frontend/InitHeaderSearch.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn347511/clang/lib/Frontend/InitHeaderSearch.cpp
|
||||
@@ -260,6 +260,7 @@ void InitHeaderSearch::AddDefaultCInclud
|
||||
|
||||
switch (os) {
|
||||
case llvm::Triple::Linux:
|
||||
+ case llvm::Triple::Hurd:
|
||||
case llvm::Triple::Solaris:
|
||||
llvm_unreachable("Include management is handled in the driver.");
|
||||
|
||||
@@ -412,6 +413,7 @@ void InitHeaderSearch::AddDefaultCPlusPl
|
||||
|
||||
switch (os) {
|
||||
case llvm::Triple::Linux:
|
||||
+ case llvm::Triple::Hurd:
|
||||
case llvm::Triple::Solaris:
|
||||
llvm_unreachable("Include management is handled in the driver.");
|
||||
break;
|
||||
@@ -460,6 +462,7 @@ void InitHeaderSearch::AddDefaultInclude
|
||||
break; // Everything else continues to use this routine's logic.
|
||||
|
||||
case llvm::Triple::Linux:
|
||||
+ case llvm::Triple::Hurd:
|
||||
case llvm::Triple::Solaris:
|
||||
return;
|
||||
|
281
debian/patches/hurd-cxx-paths.diff
vendored
281
debian/patches/hurd-cxx-paths.diff
vendored
@ -1,281 +0,0 @@
|
||||
This should be factorized with Linux.cpp and the GNU/kFreeBSD case.
|
||||
|
||||
Index: llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-7_7.0.1~svn347285.orig/clang/lib/Driver/ToolChains/Hurd.cpp
|
||||
+++ llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.cpp
|
||||
@@ -67,15 +67,102 @@ static StringRef getOSLibDir(const llvm:
|
||||
return Triple.isArch32Bit() ? "lib" : "lib64";
|
||||
}
|
||||
|
||||
+static void addMultilibsFilePaths(const Driver &D, const MultilibSet &Multilibs,
|
||||
+ const Multilib &Multilib,
|
||||
+ StringRef InstallPath,
|
||||
+ ToolChain::path_list &Paths) {
|
||||
+ if (const auto &PathsCallback = Multilibs.filePathsCallback())
|
||||
+ for (const auto &Path : PathsCallback(Multilib))
|
||||
+ addPathIfExists(D, InstallPath + Path, Paths);
|
||||
+}
|
||||
+
|
||||
Hurd::Hurd(const Driver &D, const llvm::Triple &Triple,
|
||||
const ArgList &Args)
|
||||
: Generic_ELF(D, Triple, Args) {
|
||||
+ GCCInstallation.init(Triple, Args);
|
||||
+ Multilibs = GCCInstallation.getMultilibs();
|
||||
std::string SysRoot = computeSysRoot();
|
||||
+
|
||||
+ // Cross-compiling binutils and GCC installations (vanilla and openSUSE at
|
||||
+ // least) put various tools in a triple-prefixed directory off of the parent
|
||||
+ // of the GCC installation. We use the GCC triple here to ensure that we end
|
||||
+ // up with tools that support the same amount of cross compiling as the
|
||||
+ // detected GCC installation. For example, if we find a GCC installation
|
||||
+ // targeting x86_64, but it is a bi-arch GCC installation, it can also be
|
||||
+ // used to target i386.
|
||||
+ // FIXME: This seems unlikely to be Linux- or Hurd-specific.
|
||||
+ ToolChain::path_list &PPaths = getProgramPaths();
|
||||
+ PPaths.push_back(Twine(GCCInstallation.getParentLibPath() + "/../" +
|
||||
+ GCCInstallation.getTriple().str() + "/bin")
|
||||
+ .str());
|
||||
+
|
||||
+#ifdef ENABLE_LINKER_BUILD_ID
|
||||
+ ExtraOpts.push_back("--build-id");
|
||||
+#endif
|
||||
+
|
||||
+ // The selection of paths to try here is designed to match the patterns which
|
||||
+ // the GCC driver itself uses, as this is part of the GCC-compatible driver.
|
||||
+ // This was determined by running GCC in a fake filesystem, creating all
|
||||
+ // possible permutations of these directories, and seeing which ones it added
|
||||
+ // to the link paths.
|
||||
path_list &Paths = getFilePaths();
|
||||
|
||||
const std::string OSLibDir = getOSLibDir(Triple, Args);
|
||||
const std::string MultiarchTriple = getMultiarchTriple(D, Triple, SysRoot);
|
||||
|
||||
+ // Add the multilib suffixed paths where they are available.
|
||||
+ if (GCCInstallation.isValid()) {
|
||||
+ const llvm::Triple &GCCTriple = GCCInstallation.getTriple();
|
||||
+ const std::string &LibPath = GCCInstallation.getParentLibPath();
|
||||
+ const Multilib &Multilib = GCCInstallation.getMultilib();
|
||||
+ const MultilibSet &Multilibs = GCCInstallation.getMultilibs();
|
||||
+
|
||||
+ // Add toolchain / multilib specific file paths.
|
||||
+ addMultilibsFilePaths(D, Multilibs, Multilib,
|
||||
+ GCCInstallation.getInstallPath(), Paths);
|
||||
+
|
||||
+ // Sourcery CodeBench MIPS toolchain holds some libraries under
|
||||
+ // a biarch-like suffix of the GCC installation.
|
||||
+ addPathIfExists(D, GCCInstallation.getInstallPath() + Multilib.gccSuffix(),
|
||||
+ Paths);
|
||||
+
|
||||
+ // GCC cross compiling toolchains will install target libraries which ship
|
||||
+ // as part of the toolchain under <prefix>/<triple>/<libdir> rather than as
|
||||
+ // any part of the GCC installation in
|
||||
+ // <prefix>/<libdir>/gcc/<triple>/<version>. This decision is somewhat
|
||||
+ // debatable, but is the reality today. We need to search this tree even
|
||||
+ // when we have a sysroot somewhere else. It is the responsibility of
|
||||
+ // whomever is doing the cross build targeting a sysroot using a GCC
|
||||
+ // installation that is *not* within the system root to ensure two things:
|
||||
+ //
|
||||
+ // 1) Any DSOs that are linked in from this tree or from the install path
|
||||
+ // above must be present on the system root and found via an
|
||||
+ // appropriate rpath.
|
||||
+ // 2) There must not be libraries installed into
|
||||
+ // <prefix>/<triple>/<libdir> unless they should be preferred over
|
||||
+ // those within the system root.
|
||||
+ //
|
||||
+ // Note that this matches the GCC behavior. See the below comment for where
|
||||
+ // Clang diverges from GCC's behavior.
|
||||
+ addPathIfExists(D, LibPath + "/../" + GCCTriple.str() + "/lib/../" +
|
||||
+ OSLibDir + Multilib.osSuffix(),
|
||||
+ Paths);
|
||||
+
|
||||
+ // If the GCC installation we found is inside of the sysroot, we want to
|
||||
+ // prefer libraries installed in the parent prefix of the GCC installation.
|
||||
+ // It is important to *not* use these paths when the GCC installation is
|
||||
+ // outside of the system root as that can pick up unintended libraries.
|
||||
+ // This usually happens when there is an external cross compiler on the
|
||||
+ // host system, and a more minimal sysroot available that is the target of
|
||||
+ // the cross. Note that GCC does include some of these directories in some
|
||||
+ // configurations but this seems somewhere between questionable and simply
|
||||
+ // a bug.
|
||||
+ if (StringRef(LibPath).startswith(SysRoot)) {
|
||||
+ addPathIfExists(D, LibPath + "/" + MultiarchTriple, Paths);
|
||||
+ addPathIfExists(D, LibPath + "/../" + OSLibDir, Paths);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
// Similar to the logic for GCC above, if we currently running Clang inside
|
||||
// of the requested system root, add its parent library paths to
|
||||
// those searched.
|
||||
@@ -92,8 +179,40 @@ Hurd::Hurd(const Driver &D, const llvm::
|
||||
addPathIfExists(D, SysRoot + "/usr/lib/" + MultiarchTriple, Paths);
|
||||
addPathIfExists(D, SysRoot + "/usr/lib/../" + OSLibDir, Paths);
|
||||
|
||||
- // If we are currently running Clang inside of the requested system root, add
|
||||
- // its parent library path to those searched.
|
||||
+ // Try walking via the GCC triple path in case of biarch or multiarch GCC
|
||||
+ // installations with strange symlinks.
|
||||
+ if (GCCInstallation.isValid()) {
|
||||
+ addPathIfExists(D,
|
||||
+ SysRoot + "/usr/lib/" + GCCInstallation.getTriple().str() +
|
||||
+ "/../../" + OSLibDir,
|
||||
+ Paths);
|
||||
+
|
||||
+ // Add the 'other' biarch variant path
|
||||
+ Multilib BiarchSibling;
|
||||
+ if (GCCInstallation.getBiarchSibling(BiarchSibling)) {
|
||||
+ addPathIfExists(D, GCCInstallation.getInstallPath() +
|
||||
+ BiarchSibling.gccSuffix(),
|
||||
+ Paths);
|
||||
+ }
|
||||
+
|
||||
+ // See comments above on the multilib variant for details of why this is
|
||||
+ // included even from outside the sysroot.
|
||||
+ const std::string &LibPath = GCCInstallation.getParentLibPath();
|
||||
+ const llvm::Triple &GCCTriple = GCCInstallation.getTriple();
|
||||
+ const Multilib &Multilib = GCCInstallation.getMultilib();
|
||||
+ addPathIfExists(D, LibPath + "/../" + GCCTriple.str() + "/lib" +
|
||||
+ Multilib.osSuffix(),
|
||||
+ Paths);
|
||||
+
|
||||
+ // See comments above on the multilib variant for details of why this is
|
||||
+ // only included from within the sysroot.
|
||||
+ if (StringRef(LibPath).startswith(SysRoot))
|
||||
+ addPathIfExists(D, LibPath, Paths);
|
||||
+ }
|
||||
+
|
||||
+ // Similar to the logic for GCC above, if we are currently running Clang
|
||||
+ // inside of the requested system root, add its parent library path to those
|
||||
+ // searched.
|
||||
// FIXME: It's not clear whether we should use the driver's installed
|
||||
// directory ('Dir' below) or the ResourceDir.
|
||||
if (StringRef(D.Dir).startswith(SysRoot))
|
||||
@@ -163,6 +282,16 @@ void Hurd::AddClangSystemIncludeArgs(con
|
||||
// Lacking those, try to detect the correct set of system includes for the
|
||||
// target triple.
|
||||
|
||||
+ // Add include directories specific to the selected multilib set and multilib.
|
||||
+ if (GCCInstallation.isValid()) {
|
||||
+ const auto &Callback = Multilibs.includeDirsCallback();
|
||||
+ if (Callback) {
|
||||
+ for (const auto &Path : Callback(GCCInstallation.getMultilib()))
|
||||
+ addExternCSystemIncludeIfExists(
|
||||
+ DriverArgs, CC1Args, GCCInstallation.getInstallPath() + Path);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
const StringRef X86MultiarchIncludeDirs[] = {
|
||||
"/usr/include/i386-gnu"};
|
||||
|
||||
@@ -189,3 +318,94 @@ void Hurd::AddClangSystemIncludeArgs(con
|
||||
|
||||
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
||||
}
|
||||
+
|
||||
+static std::string DetectLibcxxIncludePath(StringRef base) {
|
||||
+ std::error_code EC;
|
||||
+ int MaxVersion = 0;
|
||||
+ std::string MaxVersionString = "";
|
||||
+ for (llvm::sys::fs::directory_iterator LI(base, EC), LE; !EC && LI != LE;
|
||||
+ LI = LI.increment(EC)) {
|
||||
+ StringRef VersionText = llvm::sys::path::filename(LI->path());
|
||||
+ int Version;
|
||||
+ if (VersionText[0] == 'v' &&
|
||||
+ !VersionText.slice(1, StringRef::npos).getAsInteger(10, Version)) {
|
||||
+ if (Version > MaxVersion) {
|
||||
+ MaxVersion = Version;
|
||||
+ MaxVersionString = VersionText;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return MaxVersion ? (base + "/" + MaxVersionString).str() : "";
|
||||
+}
|
||||
+
|
||||
+void Hurd::addLibCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
||||
+ llvm::opt::ArgStringList &CC1Args) const {
|
||||
+ const std::string& SysRoot = computeSysRoot();
|
||||
+ const std::string LibCXXIncludePathCandidates[] = {
|
||||
+ DetectLibcxxIncludePath(getDriver().ResourceDir + "/include/c++"),
|
||||
+ DetectLibcxxIncludePath(getDriver().Dir + "/../include/c++"),
|
||||
+ // If this is a development, non-installed, clang, libcxx will
|
||||
+ // not be found at ../include/c++ but it likely to be found at
|
||||
+ // one of the following two locations:
|
||||
+ DetectLibcxxIncludePath(SysRoot + "/usr/local/include/c++"),
|
||||
+ DetectLibcxxIncludePath(SysRoot + "/usr/include/c++") };
|
||||
+ for (const auto &IncludePath : LibCXXIncludePathCandidates) {
|
||||
+ if (IncludePath.empty() || !getVFS().exists(IncludePath))
|
||||
+ continue;
|
||||
+ // Use the first candidate that exists.
|
||||
+ addSystemInclude(DriverArgs, CC1Args, IncludePath);
|
||||
+ return;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void Hurd::addLibStdCxxIncludePaths(const llvm::opt::ArgList &DriverArgs,
|
||||
+ llvm::opt::ArgStringList &CC1Args) const {
|
||||
+ // We need a detected GCC installation on Hurd to provide libstdc++'s
|
||||
+ // headers.
|
||||
+ if (!GCCInstallation.isValid())
|
||||
+ return;
|
||||
+
|
||||
+ // By default, look for the C++ headers in an include directory adjacent to
|
||||
+ // the lib directory of the GCC installation. Note that this is expect to be
|
||||
+ // equivalent to '/usr/include/c++/X.Y' in almost all cases.
|
||||
+ StringRef LibDir = GCCInstallation.getParentLibPath();
|
||||
+ StringRef InstallDir = GCCInstallation.getInstallPath();
|
||||
+ StringRef TripleStr = GCCInstallation.getTriple().str();
|
||||
+ const Multilib &Multilib = GCCInstallation.getMultilib();
|
||||
+ const std::string GCCMultiarchTriple = getMultiarchTriple(
|
||||
+ getDriver(), GCCInstallation.getTriple(), getDriver().SysRoot);
|
||||
+ const std::string TargetMultiarchTriple =
|
||||
+ getMultiarchTriple(getDriver(), getTriple(), getDriver().SysRoot);
|
||||
+ const GCCVersion &Version = GCCInstallation.getVersion();
|
||||
+
|
||||
+ // The primary search for libstdc++ supports multiarch variants.
|
||||
+ if (addLibStdCXXIncludePaths(LibDir.str() + "/../include",
|
||||
+ "/c++/" + Version.Text, TripleStr,
|
||||
+ GCCMultiarchTriple, TargetMultiarchTriple,
|
||||
+ Multilib.includeSuffix(), DriverArgs, CC1Args))
|
||||
+ return;
|
||||
+
|
||||
+ // Otherwise, fall back on a bunch of options which don't use multiarch
|
||||
+ // layouts for simplicity.
|
||||
+ const std::string LibStdCXXIncludePathCandidates[] = {
|
||||
+ // Gentoo is weird and places its headers inside the GCC install,
|
||||
+ // so if the first attempt to find the headers fails, try these patterns.
|
||||
+ InstallDir.str() + "/include/g++-v" + Version.Text,
|
||||
+ InstallDir.str() + "/include/g++-v" + Version.MajorStr + "." +
|
||||
+ Version.MinorStr,
|
||||
+ InstallDir.str() + "/include/g++-v" + Version.MajorStr,
|
||||
+ // Android standalone toolchain has C++ headers in yet another place.
|
||||
+ LibDir.str() + "/../" + TripleStr.str() + "/include/c++/" + Version.Text,
|
||||
+ // Freescale SDK C++ headers are directly in <sysroot>/usr/include/c++,
|
||||
+ // without a subdirectory corresponding to the gcc version.
|
||||
+ LibDir.str() + "/../include/c++",
|
||||
+ };
|
||||
+
|
||||
+ for (const auto &IncludePath : LibStdCXXIncludePathCandidates) {
|
||||
+ if (addLibStdCXXIncludePaths(IncludePath, /*Suffix*/ "", TripleStr,
|
||||
+ /*GCCMultiarchTriple*/ "",
|
||||
+ /*TargetMultiarchTriple*/ "",
|
||||
+ Multilib.includeSuffix(), DriverArgs, CC1Args))
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
Index: llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.h
|
||||
===================================================================
|
||||
--- llvm-toolchain-7_7.0.1~svn347285.orig/clang/lib/Driver/ToolChains/Hurd.h
|
||||
+++ llvm-toolchain-7_7.0.1~svn347285/clang/lib/Driver/ToolChains/Hurd.h
|
||||
@@ -27,6 +27,12 @@ public:
|
||||
void
|
||||
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
||||
llvm::opt::ArgStringList &CC1Args) const override;
|
||||
+ void addLibCxxIncludePaths(
|
||||
+ const llvm::opt::ArgList &DriverArgs,
|
||||
+ llvm::opt::ArgStringList &CC1Args) const override;
|
||||
+ void addLibStdCxxIncludePaths(
|
||||
+ const llvm::opt::ArgList &DriverArgs,
|
||||
+ llvm::opt::ArgStringList &CC1Args) const override;
|
||||
|
||||
virtual std::string computeSysRoot() const;
|
||||
|
@ -1,13 +0,0 @@
|
||||
Index: llvm-toolchain-snapshot_8~svn339515/openmp/libomptarget/src/omptarget.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-snapshot_8~svn339515.orig/openmp/libomptarget/src/omptarget.cpp
|
||||
+++ llvm-toolchain-snapshot_8~svn339515/openmp/libomptarget/src/omptarget.cpp
|
||||
@@ -13,6 +13,8 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <omptarget.h>
|
||||
+// /build/llvm-toolchain-snapshot-8~svn340542/projects/openmp/libomptarget/src/omptarget.cpp:37:21: error: 'va_start' was not declared in this scope
|
||||
+#include <cstdarg>
|
||||
|
||||
#include "device.h"
|
||||
#include "private.h"
|
152
debian/patches/rustc-aarch64-test-failure.diff
vendored
152
debian/patches/rustc-aarch64-test-failure.diff
vendored
@ -1,152 +0,0 @@
|
||||
From 1c34cd56bc59b1540e0a814d2f80ade77daa9248 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Stone <jistone@redhat.com>
|
||||
Date: Tue, 11 Sep 2018 17:52:01 +0000
|
||||
Subject: [PATCH] [GlobalISel] Lower dbg.declare into indirect DBG_VALUE
|
||||
|
||||
Summary:
|
||||
D31439 changed the semantics of dbg.declare to take the address of a
|
||||
variable as the first argument, making it indirect. It specifically
|
||||
updated FastISel for this change here:
|
||||
|
||||
https://reviews.llvm.org/D31439#change-WVArzi177jPl
|
||||
|
||||
GlobalISel needs to follow suit, or else it will be missing a level of
|
||||
indirection in the generated debuginfo. This problem was seen in a Rust
|
||||
debuginfo test on aarch64, since GlobalISel is used at -O0 for aarch64.
|
||||
|
||||
https://github.com/rust-lang/rust/issues/49807
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1611597
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1625768
|
||||
|
||||
Reviewers: dblaikie, aprantl, t.p.northover, javed.absar, rnk
|
||||
|
||||
Reviewed By: rnk
|
||||
|
||||
Subscribers: #debug-info, rovka, kristof.beyls, JDevlieghere, llvm-commits, tstellar
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D51749
|
||||
|
||||
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341969 91177308-0d34-0410-b5e6-96231b3b80d8
|
||||
---
|
||||
lib/CodeGen/GlobalISel/IRTranslator.cpp | 9 ++-
|
||||
test/CodeGen/AArch64/GlobalISel/debug-cpp.ll | 67 +++++++++++++++++++
|
||||
.../CodeGen/AArch64/GlobalISel/debug-insts.ll | 4 +-
|
||||
3 files changed, 74 insertions(+), 6 deletions(-)
|
||||
create mode 100644 test/CodeGen/AArch64/GlobalISel/debug-cpp.ll
|
||||
|
||||
Index: llvm-toolchain-7-7/lib/CodeGen/GlobalISel/IRTranslator.cpp
|
||||
===================================================================
|
||||
--- llvm-toolchain-7-7.orig/lib/CodeGen/GlobalISel/IRTranslator.cpp
|
||||
+++ llvm-toolchain-7-7/lib/CodeGen/GlobalISel/IRTranslator.cpp
|
||||
@@ -763,9 +763,12 @@ bool IRTranslator::translateKnownIntrins
|
||||
// instructions (in fact, they get ignored if they *do* exist).
|
||||
MF->setVariableDbgInfo(DI.getVariable(), DI.getExpression(),
|
||||
getOrCreateFrameIndex(*AI), DI.getDebugLoc());
|
||||
- } else
|
||||
- MIRBuilder.buildDirectDbgValue(getOrCreateVReg(*Address),
|
||||
- DI.getVariable(), DI.getExpression());
|
||||
+ } else {
|
||||
+ // A dbg.declare describes the address of a source variable, so lower it
|
||||
+ // into an indirect DBG_VALUE.
|
||||
+ MIRBuilder.buildIndirectDbgValue(getOrCreateVReg(*Address),
|
||||
+ DI.getVariable(), DI.getExpression());
|
||||
+ }
|
||||
return true;
|
||||
}
|
||||
case Intrinsic::vaend:
|
||||
Index: llvm-toolchain-7-7/test/CodeGen/AArch64/GlobalISel/debug-cpp.ll
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ llvm-toolchain-7-7/test/CodeGen/AArch64/GlobalISel/debug-cpp.ll
|
||||
@@ -0,0 +1,67 @@
|
||||
+; RUN: llc -global-isel -mtriple=aarch64 %s -stop-after=irtranslator -o - | FileCheck %s
|
||||
+; RUN: llc -mtriple=aarch64 -global-isel --global-isel-abort=0 -o /dev/null
|
||||
+
|
||||
+; struct NTCopy {
|
||||
+; NTCopy();
|
||||
+; NTCopy(const NTCopy &);
|
||||
+; int x;
|
||||
+; };
|
||||
+; int foo(NTCopy o) {
|
||||
+; return o.x;
|
||||
+; }
|
||||
+
|
||||
+; ModuleID = 'ntcopy.cpp'
|
||||
+source_filename = "ntcopy.cpp"
|
||||
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
|
||||
+target triple = "aarch64-unknown-linux-gnu"
|
||||
+
|
||||
+%struct.NTCopy = type { i32 }
|
||||
+
|
||||
+; CHECK-LABEL: name: _Z3foo6NTCopy
|
||||
+; CHECK: DBG_VALUE debug-use %{{[0-9]+}}(p0), 0, !23, !DIExpression(), debug-location !24
|
||||
+; Function Attrs: noinline nounwind optnone
|
||||
+define dso_local i32 @_Z3foo6NTCopy(%struct.NTCopy* %o) #0 !dbg !7 {
|
||||
+entry:
|
||||
+ call void @llvm.dbg.declare(metadata %struct.NTCopy* %o, metadata !23, metadata !DIExpression()), !dbg !24
|
||||
+ %x = getelementptr inbounds %struct.NTCopy, %struct.NTCopy* %o, i32 0, i32 0, !dbg !25
|
||||
+ %0 = load i32, i32* %x, align 4, !dbg !25
|
||||
+ ret i32 %0, !dbg !26
|
||||
+}
|
||||
+
|
||||
+; Function Attrs: nounwind readnone speculatable
|
||||
+declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
|
||||
+
|
||||
+attributes #0 = { noinline nounwind optnone }
|
||||
+attributes #1 = { nounwind readnone speculatable }
|
||||
+
|
||||
+!llvm.dbg.cu = !{!0}
|
||||
+!llvm.module.flags = !{!3, !4, !5}
|
||||
+!llvm.ident = !{!6}
|
||||
+
|
||||
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 8.0.0 ", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)
|
||||
+!1 = !DIFile(filename: "ntcopy.cpp", directory: "/tmp")
|
||||
+!2 = !{}
|
||||
+!3 = !{i32 2, !"Dwarf Version", i32 4}
|
||||
+!4 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
+!5 = !{i32 1, !"wchar_size", i32 4}
|
||||
+!6 = !{!"clang version 8.0.0 "}
|
||||
+!7 = distinct !DISubprogram(name: "foo", linkageName: "_Z3foo6NTCopy", scope: !1, file: !1, line: 6, type: !8, isLocal: false, isDefinition: true, scopeLine: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, retainedNodes: !2)
|
||||
+!8 = !DISubroutineType(types: !9)
|
||||
+!9 = !{!10, !11}
|
||||
+!10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
|
||||
+!11 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "NTCopy", file: !1, line: 1, size: 32, flags: DIFlagTypePassByReference, elements: !12, identifier: "_ZTS6NTCopy")
|
||||
+!12 = !{!13, !14, !18}
|
||||
+!13 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !11, file: !1, line: 4, baseType: !10, size: 32)
|
||||
+!14 = !DISubprogram(name: "NTCopy", scope: !11, file: !1, line: 2, type: !15, isLocal: false, isDefinition: false, scopeLine: 2, flags: DIFlagPrototyped, isOptimized: false)
|
||||
+!15 = !DISubroutineType(types: !16)
|
||||
+!16 = !{null, !17}
|
||||
+!17 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !11, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
|
||||
+!18 = !DISubprogram(name: "NTCopy", scope: !11, file: !1, line: 3, type: !19, isLocal: false, isDefinition: false, scopeLine: 3, flags: DIFlagPrototyped, isOptimized: false)
|
||||
+!19 = !DISubroutineType(types: !20)
|
||||
+!20 = !{null, !17, !21}
|
||||
+!21 = !DIDerivedType(tag: DW_TAG_reference_type, baseType: !22, size: 64)
|
||||
+!22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !11)
|
||||
+!23 = !DILocalVariable(name: "o", arg: 1, scope: !7, file: !1, line: 6, type: !11)
|
||||
+!24 = !DILocation(line: 6, column: 16, scope: !7)
|
||||
+!25 = !DILocation(line: 7, column: 12, scope: !7)
|
||||
+!26 = !DILocation(line: 7, column: 3, scope: !7)
|
||||
Index: llvm-toolchain-7-7/test/CodeGen/AArch64/GlobalISel/debug-insts.ll
|
||||
===================================================================
|
||||
--- llvm-toolchain-7-7.orig/test/CodeGen/AArch64/GlobalISel/debug-insts.ll
|
||||
+++ llvm-toolchain-7-7/test/CodeGen/AArch64/GlobalISel/debug-insts.ll
|
||||
@@ -6,18 +6,16 @@
|
||||
; CHECK: - { id: {{.*}}, name: in.addr, type: default, offset: 0, size: {{.*}}, alignment: {{.*}},
|
||||
; CHECK-NEXT: callee-saved-register: '', callee-saved-restored: true,
|
||||
; CHECK-NEXT: debug-info-variable: '!11', debug-info-expression: '!DIExpression()',
|
||||
-; CHECK: DBG_VALUE debug-use %0(s32), debug-use $noreg, !11, !DIExpression(), debug-location !12
|
||||
define void @debug_declare(i32 %in) #0 !dbg !7 {
|
||||
entry:
|
||||
%in.addr = alloca i32, align 4
|
||||
store i32 %in, i32* %in.addr, align 4
|
||||
call void @llvm.dbg.declare(metadata i32* %in.addr, metadata !11, metadata !DIExpression()), !dbg !12
|
||||
- call void @llvm.dbg.declare(metadata i32 %in, metadata !11, metadata !DIExpression()), !dbg !12
|
||||
ret void, !dbg !12
|
||||
}
|
||||
|
||||
; CHECK-LABEL: name: debug_declare_vla
|
||||
-; CHECK: DBG_VALUE debug-use %{{[0-9]+}}(p0), debug-use $noreg, !14, !DIExpression(), debug-location !15
|
||||
+; CHECK: DBG_VALUE debug-use %{{[0-9]+}}(p0), 0, !14, !DIExpression(), debug-location !15
|
||||
define void @debug_declare_vla(i32 %in) #0 !dbg !13 {
|
||||
entry:
|
||||
%vla.addr = alloca i32, i32 %in
|
@ -1,10 +0,0 @@
|
||||
Index: llvm-toolchain-7-7.0.1~+rc2/tools/llvm-objcopy/StripOpts.td
|
||||
===================================================================
|
||||
--- llvm-toolchain-7-7.0.1~+rc2.orig/tools/llvm-objcopy/StripOpts.td
|
||||
+++ llvm-toolchain-7-7.0.1~+rc2/tools/llvm-objcopy/StripOpts.td
|
||||
@@ -47,3 +47,5 @@ def x : Flag<["-"], "x">,
|
||||
|
||||
def strip_unneeded : Flag<["-", "--"], "strip-unneeded">,
|
||||
HelpText<"Remove all symbols not needed by relocations">;
|
||||
+
|
||||
+def deterministic : Flag<["--"], "enable-deterministic-archives">;
|
Loading…
Reference in New Issue
Block a user